Ë
    ÃÓ^jÊí  ã                   óÈ  — d Z 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	m
Z
 ddlmZmZ ddlZddlmZ ddlmZmZmZ dd	lmZmZmZmZmZmZmZ dd
lmZm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD erddlEmFZF ddlGmHZH ddlImJZJ dddej–                  j˜                  deMe>   deNeOe>f   ddf
d„ZPe	deOdedddej–                  j˜                  def
d„«       ZQdedz  dej–                  j˜                  ddfd „ZR G d!„ d"e>«      ZS G d#„ d$eD«      ZT G d%„ d&eT«      ZU G d'„ d(eT«      ZVy))aQ  
This module implements variable tracking for PyTorch nn.Module instances during Dynamo tracing.

It provides specialized handling for different types of nn.Module instances through several key classes:

- NNModuleVariable: Handles instance-specific module tracing, specializing on module id() and placing
  parameters directly on the torch.fx.GraphModule. This creates one graph per module instance.

- UnspecializedNNModuleVariable: Provides class-level module tracing, treating nn.Modules like other
  user-defined objects and passing parameters as inputs to the FX graph. This creates one graph per
  module class.

- UnspecializedBuiltinNNModuleVariable: Specifically handles built-in PyTorch modules (e.g. nn.Linear)
  with appropriate optimizations.

- FSDPManagedNNModuleVariable: Special handling for FSDP-wrapped modules with modified guarding behavior
  and parameter handling.

The module integrates with Dynamo's broader tracing functionality to handle module method calls,
parameter access, hooks, and other nn.Module behaviors while maintaining proper scoping and guarding
of module state.
é    N)ÚIterable)ÚcontextmanagerÚnullcontext)ÚAnyÚTYPE_CHECKING)ÚSourceé   )Úgraph_break_hintsÚtrace_rulesÚ	variables)Úhandle_observed_exceptionÚObservedAttributeErrorÚraise_observed_exceptionÚraise_type_errorÚunimplementedÚUnspecializeRestartAnalysisÚUnsupported)ÚGuardBuilderÚinstall_guard)ÚGenerationTracker)Ú
AttrSourceÚConstDictKeySourceÚDictGetItemSourceÚFSDPNNModuleSourceÚGetItemSourceÚNNModuleSourceÚUnspecializedNNModuleSource)Ú"enumerate_items_with_dict_positionÚget_custom_getattrÚget_fake_valueÚis_lazy_moduleÚis_namedtupleÚis_safe_constantÚistensorÚistypeÚnnmodule_has_hooksÚobject_has_getattributeÚproxy_args_kwargsÚraise_args_mismatchÚset_example_valueÚunpatched_nn_module_callÚunpatched_nn_module_call_implé   )ÚtypestrÚValueMutationNewÚVariableTracker)Úinvoke_and_store_as_constant)ÚLazyVariableTracker)ÚUserDefinedObjectVariable)ÚInstructionTranslatorBase©ÚConstantVariable)ÚDunderDictVariableÚtxr4   ÚmodÚargsÚkwargsÚreturnc                 ód  ‡ ‡— t        |d«      rudt        dt        fˆˆ fd„Št        ||«      \  }}|D �cg c]
  } ‰|«      ‘Œ }}|j                  «       D ��	ci c]  \  }}	| ‰|	«      “Œ }
}}		 |j	                  |||
«       yyc c}w c c}	}w # t
        $ r t        t
        ‰ dg¬«       Y yw xY w)a~  
    Fairly coupled helper used by NNModuleVariable and UnspecializedNNModuleVariable.

    Used to cause lazy module to be initialized (and delete its init hook) before tracing. Especially
    useful now that 'allowed' modules graph-break on hooks, calling this first ensures there is no hook
    by the time we trace __call__ and thus no graph-break for lazy allowed modules.
    Ú_initialize_hookÚxr<   c                 óª  •— t        | «      r t        | «      ˆfd„| D «       Ž S t        | t        «      r*| j	                  «       D ��ci c]  \  }}| ‰|«      “Œ c}}S t        | t
        t        t        f«      r t        | «      ˆfd„| D «       «      S t        | t        j                  j                  «      rt        | j                  ‰«      S | S c c}}w )Nc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­w©N© ©Ú.0ÚelemÚconvert_to_fakes     €úl/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/nn_module.pyú	<genexpr>zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>h   s   øè ø€ Ò E¸4¡°×!6Ñ Eùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrB   rC   rD   s     €rH   rI   zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>l   s   øè ø€ ÒC¸™¨t×4ÑCùrJ   )r"   ÚtypeÚ
isinstanceÚdictÚitemsÚlistÚtupleÚsetÚtorchÚfxÚProxyr    Únode)r?   ÚkÚvrG   r8   s      €€rH   rG   z/initialize_lazy_module.<locals>.convert_to_fakef   s§   ø€ Ü˜QÔØ”t˜A“wÓ EÀ1Ô EÐFÐFÜ˜AœtÔ$Ø:;¿'¹'»)×D±$°!°Q˜™?¨1Ó-Ñ-ÓDÐDÜ˜A¤¤e¬SÐ1Ô2Ø”t˜A“wÓCÀÔCÓCÐCÜ˜AœuŸx™xŸ~™~Ô.Ü% a§f¡f¨bÓ1Ð1à�ùó Es   ÁCz0AttributeError during lazy module initialization©r:   N)Úhasattrr   r(   rO   Ú_infer_parametersÚAttributeErrorr   )r8   r9   r:   r;   Ú
proxy_argsÚproxy_kwargsÚargÚ	fake_argsrW   rX   Úfake_kwargsrG   s   `          @rH   Úinitialize_lazy_modulerb   W   sÂ   ù€ ô ˆsÐ&Ô'ð
	œsð 
	¤sö 
	ô $5°T¸6Ó#BÑ ˆ
�LØ5?Ö@¨c‘_ SÕ)Ð@ˆ	Ð@Ø9E×9KÑ9KÓ9M×N±°°A�q™/¨!Ó,Ñ,ÐNˆÑNð	Ø×!Ñ! # y°+Õ>ð% (ùò AùÛNøô ò 	ä$ÜØØHÐI÷ð	ús   µBÁB
Á0B ÂB/Â.B/Ú
module_keyÚsourcec              #   óH  K  — |j                   }t        j                  dd|«      }|j                  j	                  |d«      }|dkD  r| › d|› �n| } 	 ||j
                  f|j                  | <   |dz   |j                  |<   d –— |j                  | = y # |j                  | = w xY w­w)Nz9\._(?:modules|parameters|buffers)\[(['\"])([^'\"\]]+)\1\]z.\2r   ú@r-   )ÚnameÚreÚsubÚ	num_callsÚgetÚ	__class__Únn_module_stack)rc   rd   r8   r9   Úfully_qualified_namerj   s         rH   Úrecord_nn_module_stackro   €   s«   è ø€ ð "Ÿ;™;ÐäŸ6™6ØDØØóÐð
 —‘× Ñ Ð!5°qÓ9€IØ09¸A²�J�<˜q  Ñ,À:€Jð+Ø*>ÀÇÁÐ)Nˆ×Ñ˜:Ñ&Ø-6¸©]ˆ�‰Ð)Ñ*Ûà×Ñ˜zÑ*øˆB×Ñ˜zÑ*üs   ‚AB"Á1B ÂB"ÂBÂB"c                 ó¦  — | rÏd|j                   v rƒt        |j                   d   «      rk|j                   d   }t        | d«      }t        |«      t        j
                  u rt        |d«      }t        |j                  t        j                  «      «       y t        | j                  t        j                  t        j                  d¬«      «      «       y y )NÚforwardÚ__func__©Úattr)Ú__dict__Úcallabler   rL   ÚtypesÚ
MethodTyper   Ú
make_guardr   ÚCLOSURE_MATCHÚ	functoolsÚpartialÚNOT_PRESENT_IN_GENERIC_DICT)rd   r9   ÚfwdÚforward_sources       rH   Ú&guard_to_detect_forward_monkeypatchingr€   ˜   sª   € ñ  Ø˜Ÿ™Ñ$¬°#·,±,¸yÑ2IÔ)Jà—,‘,˜yÑ)ˆCÜ'¨°	Ó:ˆNÜ�C‹yœE×,Ñ,Ñ,Ü!+¨N¸JÓ!G�Ü˜.×3Ñ3´L×4NÑ4NÓOÕPô Ø×!Ñ!Ü×%Ñ%Ü$×@Ñ@Àyôóõð ó    c                   ój  ‡ — e Zd Zddddhej                  £Zdededej                  j                  de
ddf
ˆ fd„Zd)d„Zdefd„Zdeddfd„Zdefd„Zd	d
dedz  fd„Zdefd„Zd	d
defd„Zd	d
defd„Zd	d
dedej                  j                  de
de
ddfd„Zd	d
dee   fd„Zd	d
deddfd„Zd	d
defd„Zd*d„Zdej                  j                  d	d
dedededz  f
d „Zd	d
dedefˆ fd!„Zd	d
d"ee   de eef   defd#„Z!	 	 	 	 	 	 d+d$„Z"d	d
defd%„Z#	 d,d	d
ded"ee   de eef   d&edefˆ fd'„Z$d-d(„Z%ˆ xZ&S ).ÚNNModuleVariableÚmodule_typerc   ÚvalueÚnn_module_stack_sourcer;   r<   Nc                 ó’   •— t        ‰| �  di |¤Ž || _        || _        || _        | j
                  | _        | j
                  | _        y )NrC   )ÚsuperÚ__init__r„   rc   r…   rd   r†   )Úselfr„   rc   r…   r;   rl   s        €rH   r‰   zNNModuleVariable.__init__Ä   sD   ø€ ô 	‰ÑÑ"˜6Ò"Ø&ˆÔØ$ˆŒØˆŒ
ð #Ÿk™kˆŒØ&*§k¡kˆÕ#r�   r8   r4   c                 ó|   — t        | d«      s%t        j                  j                  || «      | _        | j                  S )NÚdict_vt)rZ   r   r7   ÚcreaterŒ   ©rŠ   r8   s     rH   Úget_dict_vtzNNModuleVariable.get_dict_vtÑ   s0   € Ü�t˜YÔ'Ü$×7Ñ7×>Ñ>¸rÀ4ÓHˆDŒLØ�|‰|Ðr�   c                 óT   — | j                   xs | j                  }|st        d«      ‚|S ©Nz'nn_module_stack_source must not be None©r†   rd   ÚAssertionError©rŠ   Úress     rH   Úget_nn_module_stack_sourcez+NNModuleVariable.get_nn_module_stack_sourceÖ   ó*   € Ø×)Ñ)Ò8¨T¯[©[ˆÙÜ Ð!JÓKÐKØˆ
r�   rd   c                 ó   — || _         y rB   ©r†   ©rŠ   rd   s     rH   Úset_nn_module_stack_sourcez+NNModuleVariable.set_nn_module_stack_sourceÜ   ó
   € Ø&,ˆÕ#r�   c                 ó   — | j                   S rB   )r„   ©rŠ   s    rH   Úpython_typezNNModuleVariable.python_typeß   s   € Ø×ÑÐr�   c                 ó^   — t        |j                  j                  | j                  «      «      S rB   )ÚidÚoutputÚget_submodulerc   rŽ   s     rH   Úget_idzNNModuleVariable.get_idâ   s    € Ü�"—)‘)×)Ñ)¨$¯/©/Ó:Ó;Ð;r�   c                 ó   — | j                   S rB   )r…   rž   s    rH   Úget_real_python_backed_valuez-NNModuleVariable.get_real_python_backed_valueå   s   € Ø�z‰zÐr�   c                 óŽ   — ddl m} |j                  j                  | j                  «      } |j
                  t        |«      «      S )aY  nb_bool for nn.Module.

        nn.Module itself has no __bool__ or __len__, so bare modules are always
        truthy.  Subclasses like ModuleList/ModuleDict define __len__, so
        bool(module) calls PyObject_IsTrue which falls through nb_bool (NULL)
        to sq_length/mp_length.  We evaluate on the real module to capture this.
        r-   r5   )Úconstantr6   r¢   r£   rc   r�   Úbool)rŠ   r8   r6   r9   s       rH   Ú	bool_implzNNModuleVariable.bool_implè   s7   € õ 	/à�i‰i×%Ñ% d§o¡oÓ6ˆØ&Ð×&Ñ&¤t¨C£yÓ1Ð1r�   c                 óŠ   — |j                   j                  | j                  «      }t        j                  |t        |«      «      S rB   )r¢   r£   rc   r0   ÚbuildÚrepr©rŠ   r8   r9   s      rH   Ú	repr_implzNNModuleVariable.repr_implõ   s1   € Ø�i‰i×%Ñ% d§o¡oÓ6ˆÜ×$Ñ$ R¬¨c«Ó3Ð3r�   ÚsubmodÚ	key_extraÚoptionsc                  ó   — y rB   rC   )rŠ   r8   rd   r°   r±   r²   s         rH   Ú_wrap_submodulez NNModuleVariable._wrap_submoduleù   s   € ð 	r�   c                 óV  — |j                   j                  | j                  «      }g }t        |t        j
                  j                  «      r‡|j                  «       D ]r  \  }}t        j                  ||«      }|j                   j                  || j                  |t        t        | j                  |«      «      ¬«       |j                  |«       Œt |S t        |t        j
                  j                  t        j
                  j                   t        j
                  j"                  f«      st%        dt'        |«      › �«      ‚t)        |«      D ]Z  \  }}|j                  |j                   j                  || j                  |t        t        | j                  |«      «      ¬«      «       Œ\ |S )N©rd   z7Expected ModuleList, ParameterList, or Sequential, got )r¢   r£   rc   rM   rS   ÚnnÚ
ModuleDictrO   r0   r¬   Úregister_attr_or_moduler   r   rd   ÚappendÚ
ModuleListÚParameterListÚ
Sequentialr“   r.   Ú	enumerate)rŠ   r8   ÚbaseÚresultrg   r°   Úname_varÚidxs           rH   Úunpack_var_sequencez$NNModuleVariable.unpack_var_sequence  s_  € ð �y‰y×&Ñ& t§¡Ó7ˆØ(*ˆÜ�dœEŸH™H×/Ñ/Ô0Ø $§
¡
£ò (‘��fÜ*×0Ñ0°°TÓ:�Ø—	‘	×1Ñ1ØØ—O‘OØÜ)¬-¸¿¹ÀTÓ*JÓKð	 2ô ð —‘˜hÕ'ð(ð ˆMäØ”5—8‘8×&Ñ&¬¯©×(>Ñ(>ÄÇÁ×@SÑ@SÐTô
ô !ØIÌ'ÐRVË-ÈÐYóð ô % T›?ò 	‰KˆC�Ø�M‰MØ—	‘	×1Ñ1ØØ—O‘OØÜ)¬-¸¿¹ÀSÓ*IÓJð	 2ó õð	ð ˆr�   rg   r6   c                 ó  — |j                   j                  | j                  «      }t        ||«      }t	        | j
                  j                  t        j                  t        j                  |¬«      «      «       t        j                  ||«      S )Nrs   )r¢   r£   rc   rZ   r   rd   ry   r{   r|   r   ÚHASATTRr0   r¬   )rŠ   r8   rg   r9   rÀ   s        rH   Úcall_obj_hasattrz!NNModuleVariable.call_obj_hasattr&  sk   € ð �i‰i×%Ñ% d§o¡oÓ6ˆÜ˜˜dÓ#ˆÜØ�K‰K×"Ñ"¤9×#4Ñ#4´\×5IÑ5IÐPTÔ#UÓVô	
ô ×$Ñ$ R¨Ó0Ð0r�   c                 óf   — |j                   j                  | j                  «      }t        |dd«      S )NÚtrainingF)r¢   r£   rc   Úgetattrr®   s      rH   Úis_trainingzNNModuleVariable.is_training0  s)   € Ø�i‰i×%Ñ% d§o¡oÓ6ˆÜ�s˜J¨Ó.Ð.r�   c                 óð   — |j                   j                  | j                  «      }t        j                  |«       |j
                  j                  dk7  rt        j                  t        |«      «       t        ‚)zIRestart analysis treating this module as an UnspecializedNNModuleVariabler‰   )
r¢   r£   rc   r   ÚtagÚf_codeÚco_nameÚmark_class_dynamicrL   r   r®   s      rH   Úconvert_to_unspecializedz)NNModuleVariable.convert_to_unspecialized4  sT   € à�i‰i×%Ñ% d§o¡oÓ6ˆÜ×Ñ˜cÔ"ð �9‰9×Ñ 
Ò*Ü×0Ñ0´°c³Ô;Ü)Ð)r�   r¿   Ú
obj_sourcec                 óÐ  — t        |«      rwt        j                  t        |«      d«      }|rt	        |d«      nd}	 t        j                  || |¬«      j                  |t
        j                  j                  |«      gi «      S t!        |d
¬«      }|€yt#        |t$        j&                  «      s&t        dd| › d|› �ddgt        j                  ¢¬	«       dt	        |d«      i}t        j                  || fi |¤Žj                  |t)        j*                  ||«      gi «      S # t        $ r t        |«       Y Œ±t        $ r) t        dd| › d|› �ddgt        j                  ¢¬	«       Y Œáw xY w)zDCheck for a __getattr__ and handle it specially if it is implementedÚ__getattribute__Nr¶   z5Custom __getattribute__ in nn.Module attribute accessúvar_getattr ú zXDynamo could not trace through the custom `__getattribute__` method on this `nn.Module`.z[Simplify your `__getattribute__` implementation, or replace it with a targeted `@property`.©Úgb_typeÚcontextÚexplanationÚhintsT)Úignore_nn_module_getattrz6torch.nn.Module with a non-function custom __getattr__zîDynamo detected a nn.Module object with a custom `__getattr__` method, but this method is not a standard Python function (e.g., it might be implemented in C/C++). Dynamo cannot currently trace into such non-standard `__getattr__` methods.z—Avoid using objects with non-standard __getattr__ methods within the compiled region. If possible, implement __getattr__ as a standard Python function.rd   Ú__getattr__)r'   ÚinspectÚgetattr_staticrL   r   r   ÚUserMethodVariableÚcall_functionr6   r�   r   r   r   r   r
   ÚSUPPORTABLEr   rM   rw   ÚFunctionTyper0   r¬   )	rŠ   r¿   r8   rg   rÑ   Úgetattribute_fnÚ
new_sourceÚ
getattr_fnr²   s	            rH   Ú_custom_getattr_fallbackz)NNModuleVariable._custom_getattr_fallback>  sŒ  € ô # 4Ô(Ü%×4Ñ4´T¸$³ZÐASÓTˆOá>H”
˜:Ð'9Ô:Èdð ðÜ ×3Ñ3Ø#ØØ%ô÷  ‘- ¤Y×%?Ñ%?×%FÑ%FÀtÓ%LÐ$MÈrÓRð	Sô( (¨ÀtÔLˆ
ØÐØä˜*¤e×&8Ñ&8Ô9ÜØPØ& t f¨A¨d¨VÐ4ð-ðAðô '×2Ñ2ð	õð$ œZ¨
°MÓBÐCˆä×+Ñ+¨J¸ÑHÀÑH×VÑVØ”×&Ñ& r¨4Ó0Ð1°2ó
ð 	
øôQ *ò .Ü)¨"Ö-Üò ÜØSØ*¨4¨&°°$°Ð8ð!EðEðô +×6Ñ6ð÷
ðús   ¼AD ÄE%Ä4.E%Å$E%c                 ó–  •— | j                   xr t        | j                   |«      }|j                  j                  | j                  «      }t
        j                  |d«      }d}t        «       }t        j                  |j                  «      D ]+  }|j                  |j                  j                  «       «       Œ- | j                   s%t        dd| › d|› �dg t        j                   ¢¬«       |dk(  r| j#                  |«      S d }	||v r||   }	nYd|v r||d   v r||vr	|d   |   }	nAd	|v r||d	   v r	|d	   |   }	n-d
|v r||d
   v r	|d
   |   }	n	 t        j$                  ||«      }	d}|dk(  rt1        | j                   |«       |dk(  r$|s"t3        j4                  ||j                  |¬«      S |rat3        j4                  ||	t7        |«      «      }t9        |t:        t<        f«      r)|j?                  t        | jA                  «       |«      «       |S tC        |	tD        «      rk| j                   r,t        t        | j                   d«      |«      }t        |d«      }tG        jH                  |	jJ                  |¬«      jM                  || gi «      S tC        |	tN        «      r>tG        jP                  |	jR                  tG        jT                  t-        |«      «      |¬«      S tC        |	tV        «      r&tG        jH                  |	jY                  |«      |¬«      S tC        |	tZ        j\                  «      rtG        jP                  |	| |¬«      S t_        |	«      sta        |	«      r t3        j4                  ||	t7        |«      «      S t        ddtc        |«      › d|› dtc        |	«      › �dtc        |	«      › d�d|› dtc        |	«      › dtc        |«      › d�dgt        jd                  ¢¬«       tf        ‰| �Ñ  ||«      S # t&        $ rV | j)                  |||| j                   ¬«      }
|
�|
cY S t+        t&        |dt-        |«      j.                  › d|› d�g¬«       Y �Œáw xY w)Nru   Tzgetattr with no sourcerÔ   rÕ   zŒDynamo does not know how to access an attribute on an `nn.Module` instance that lacks a source. This is usually an internal error in Dynamo.rÖ   Ú_modulesÚ_parametersÚ_buffersF)r¿   r8   rg   rÑ   ú'ú' object has no attribute 'rY   rq   rl   r¶   Úfgetz$Unsupported nn.Module attribute typeznn.Module subclass: z, name: z, attribute type: z>Dynamo does not support tracing nn.Module attributes of type `ú`zRefactor your code so that `z	` (type `z`) is not an attribute of `zqCurrently supported attribute types are methods, classmethods, staticmethods, properties, constants, and tensors.)5rd   r   r¢   r£   rc   ÚobjectrÓ   rR   rÝ   Úgetmrorl   Úupdateru   Úkeysr   r
   Ú
DYNAMO_BUGr�   rÞ   r\   ræ   r   rL   Ú__name__r€   r0   r¬   r   rM   rƒ   ÚUnspecializedNNModuleVariabler›   r–   r%   Úpropertyr   ÚUserFunctionVariablerí   rà   Úclassmethodrß   rr   r3   ÚstaticmethodÚ__get__rw   râ   r#   r$   r.   rá   rˆ   Úvar_getattr)rŠ   r8   rg   rd   r¿   Ú	base_dictÚobject_memberÚall_class_attribute_namesr?   ÚsubobjrÀ   Úoutrl   s               €rH   rû   zNNModuleVariable.var_getattr}  sQ  ø€ ð —‘Ò>¤¨D¯K©K¸Ó!>ˆà�y‰y×&Ñ& t§¡Ó7ˆô ×+Ñ+¨D°*Ó=ˆ	ØˆÜ$'£EÐ!Ü—‘ §¡Ó/ò 	@ˆAØ%×,Ñ,¨Q¯Z©Z¯_©_Ó->Õ?ð	@ð �{Š{ÜØ0Ø& t f¨A¨d¨VÐ4ð7ð 6Ô)×4Ñ4Ð5õð �:ÒØ×#Ñ# BÓ'Ð'àˆØ�9ÑØ˜t‘_‰Fà˜)Ñ#Ø˜	 *Ñ-Ñ-ØÐ5Ñ5à˜zÑ*¨4Ñ0‰FØ˜iÑ'¨D°I¸mÑ4LÑ,LØ˜}Ñ-¨dÑ3‰FØ˜9Ñ$¨°¸:Ñ1FÑ)FØ˜zÑ*¨4Ñ0‰FðÜ ×/Ñ/°°dÓ;�Ø %�ð �9ÒÜ2°4·;±;ÀÔEà�;Ò¡}Ü"×(Ñ(¨¨T¯^©^ÀFÔKÐKáÜ!×'Ñ'¨¨F´NÀ6Ó4JÓKˆCä˜#Ô 0Ô2OÐPÔQð ×.Ñ.Ü˜t×>Ñ>Ó@À$ÓGôð ˆJô �fœhÔ'Ø—;’;ä'¬
°4·;±;ÀÓ(LÈdÓS�Fä'¨°Ó7�FÜ ×5Ñ5Ø—K‘KØ!ô÷  ‘-  d H¨bÓ1ð2ô ˜¤Ô,Ü ×3Ñ3Ø—O‘OÜ×7Ñ7¼¸T»
ÓCØ!ôð ô
 ˜¤Ô-Ü ×5Ñ5Ø—N‘N 4Ó(Ø!ôð ô ˜¤× 2Ñ 2Ô3Ü ×3Ñ3°F¸DÈÔPÐPÜ! &Ô)¬X°fÔ-=ä&×,Ñ,¨R°¼ÈÓ9OÓPÐPäØBØ2´7¸4³=°/ÀÈ$ÈÐOaÔbiÐjpÓbqÐarÐsØ"`ÔahÐioÓapÐ`qÐqrÐ sà6°t°f¸IÄgÈfÃoÐEVÐVqÔryÐz~Órð  rAð  ABð  Cð>ðô +×6Ñ6ð	õ	
ô ‰wÑ" 2 tÓ,Ð,øôQ "ò à×6Ñ6Ø "¨4¸D¿K¹Kð 7ó �ð Ð%Ø!’Mä(Ü"ØØœd 4›j×1Ñ1Ð2Ð2MÈdÈVÐSTÐUÐV÷ð ðús   ÅO) Ï),QÐ-QÑQr:   c                 ó  — |j                   j                  | j                  «      }t        | j                  | j	                  «       ||«      5  t        |«      }t        |t        j                  j                  «      �r|j                  j                  t        j                  j                  j                  u rÞt        |«      r| j                  |«       |rt        d«      ‚|rt        |ddt!        |«      › d�«       |\  }|j"                  j%                  «       D ]m  \  }}|j'                  |j                   j)                  || j                  |t+        t-        | j.                  |«      «      ¬«      |gi «       |j1                  «       }Œo |cd d d «       S |r+|j2                  �|j2                  | _        t7        ||||«       |j                   j9                  «       r’|j:                  j=                  d«      rw|j:                  dk7  rht        |dd¬	«      r| j                  |«       d
dlm }	  |	| |j                   jB                  d| j                  gtE        ||«      ¢­Ž ¬«      cd d d «       S t        |t        jF                  jH                  «      r#|j                  }
t-        | j.                  d«      }n"|jJ                  }
t-        | j.                  d«      }tM        |
tN        jP                  «      r(|
jR                  }
t-        |d«      }| gtU        |«      z   }n1tM        |
tN        jV                  «      st        dtY        |
«      › �«      ‚|j[                  t]        j^                  |
|¬«      ||d¬«      cd d d «       S # 1 sw Y   y xY w)Nz3Expected lazy sequential isn't a valid combination?ztorch.nn.Module.Sequentialz0 kwargsú kwargsr¶   )z	torch.nn.z	torch.ao.ztorch.nn.utils.parametrizeT)Úcheck_forward_hooksÚcheck_backward_hooksr-   ©Úwrap_fx_proxyÚcall_module©r8   Úproxyrq   Ú
_call_implrr   úExpected FunctionType, got ©Úallow_nested_graph_breaks)0r¢   r£   rc   ro   r–   r!   rM   rS   r·   r½   rl   rq   r&   rÐ   r“   r)   Úlenrè   rO   rà   r¹   r   r   rd   ÚpopÚcls_to_becomer„   rb   Úis_root_tracerÚ
__module__Ú
startswithÚbuilderr  Úcreate_proxyr(   rT   ÚGraphModuler
  r%   rw   rx   rr   rP   râ   rL   Úinline_user_function_returnr   r÷   )rŠ   r8   r:   r;   r9   Úis_lazyr_   Ú
child_namer°   r  ÚfnÚ	fn_sources               rH   rà   zNNModuleVariable.call_functionô  s  € ð �i‰i×%Ñ% d§o¡oÓ6ˆä#Ø�O‰O˜T×<Ñ<Ó>ÀÀCó
ñ f	ô % SÓ)ˆGä˜3¤§¡× 3Ñ 3Õ4Ø—M‘M×)Ñ)¬U¯X©X×-@Ñ-@×-HÑ-HÑHä% cÔ*ð ×1Ñ1°"Ô5ñ Ü(ØMóð ñ Ü'ØØ4Ø"Ü˜v›;˜- wÐ/ô	ð ‘�à*-¯,©,×*<Ñ*<Ó*>ò #Ñ&�J Ø×$Ñ$ØŸ	™	×9Ñ9Ø"Ø ŸO™OØ&Ü#1´*¸T¿[¹[È*Ó2UÓ#Vð	 :ó ð ˜Øô	ð Ÿ&™&›(‘Cð#ð ÷Qf	ñ f	ñT à×$Ñ$Ð0Ø'*×'8Ñ'8�DÔ$ô
 ' r¨3°°fÔ=ð —	‘	×(Ñ(Ô*Ø—N‘N×-Ñ-Ð.HÔIØ—N‘NÐ&BÒBä%Ø¨TÈõð ×1Ñ1°"Ô5å2á$ØØ0˜"Ÿ)™)×0Ñ0Ø%ØŸ™ðô +¨4°Ó8òô÷Qf	ñ f	ôb ˜c¤5§8¡8×#7Ñ#7Ô8ð Ÿ™�BÜ *¨4¯;©;¸	Ó B‘IàŸ™�BÜ *¨4¯;©;¸Ó E�IÜ˜"œe×.Ñ.Ô/ØŸ™�BÜ *¨9°jÓ A�IØ ˜6¤D¨£JÑ.‘Dä! "¤e×&8Ñ&8Ô9Ü,Ð/JÌ4ÐPRË8È*Ð-UÓVÐVØ×5Ñ5Ü×2Ñ2°2¸iÔHØØØ.2ð	 6ó ÷Cf	÷ f	ò f	ús   ÁD?M=ÆCM=É.DM=Í=Nc                 ó‚  — ddl m} ddlm} |j                  j                  | j                  «      }t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                  t        j                  j                  j                  f}t        |«      j                  |vrá|j!                  «       r$t#        |j%                  «       t&        t(        f«      st+        dd| › d|› �d|› d�d	g¬
«       |j                  j,                  }t#        |t.        j0                  «      st3        dt        |«      › �«      ‚t5        t5        | j6                  d«      d«      }|j9                  t;        j<                  ||¬«      | |gi d¬«      S t#        ||«      �r.|j                  j>                  �rg }	tA        tC        tE        |«      «      «      |j%                  «          }
tG        ||j%                  «          «      D ]V  \  }}|
|   }tI        tK        | j6                  |«      «      }|	jM                  |j                  jO                  |||¬«      «       ŒX ||j%                  «          }|j                  jO                  || › d�tI        tK        | j6                  |j%                  «       «      «      ¬«      }|S | jQ                  |«       d}t#        ||«      r|jS                  |j                  «      }n6|j!                  «       r|j%                  «       }nt+        dd| › d|› �dg ¬
«       ||   }|j                  jO                  || j                  |tI        tK        | j6                  |«      «      ¬«      S )Nr-   )ÚSliceVariable)ÚSymNodeVariablez6Invalid or non-const argument in nn.Module __getitem__zmp_subscript_impl: rÕ   zFDynamo does not support calling method `__getitem__` of ``nn.Module`` z+ with a non-constant or non-(str, int) key.z9Use constant arguments of type str or int for __getitem__rÖ   r  Ú__getitem__rr   r¶   Tr  z.__getitem__(slice)r   z.Unsupported key type for nn.Module.__getitem__zEDynamo does not support getitem on `nn.Module` with non-constant key.)*Úlistsr  Útensorr  r¢   r£   rc   rS   r·   r¸   r  r»   ÚParameterDictr¼   r½   rL   Úis_python_constantrM   Úas_python_constantÚstrÚintr   rr   rw   râ   r“   r   rd   r  r   r÷   ÚexportrP   Úranger  r¾   r   r   rº   r¹   rÐ   Úevaluate_expr)rŠ   r8   Úkeyr  r  ÚmoduleÚbuiltin_supportedr  ÚsrcrÀ   rò   rÂ   r°   rW   Ú
new_moduleÚnew_module_variableÚ	key_values                    rH   Úmp_subscript_implz"NNModuleVariable.mp_subscript_impld  sK  € õ 	)Ý+à—‘×(Ñ(¨¯©Ó9ˆô �H‰H×Ñ×+Ñ+Ü�H‰H×Ñ×+Ñ+Ü�H‰H×"Ñ"×.Ñ.Ü�H‰H×"Ñ"×.Ñ.Ü�H‰H×Ñ×+Ñ+ð
Ðô �‹<×#Ñ#Ð+<Ñ<à×&Ñ&Ô(Ü˜s×5Ñ5Ó7¼#¼s¸ÔDäØTØ1°$°°q¸¸Ð>ð!=Ø=C¸HÐDoð!qàVÐWõð ×#Ñ#×,Ñ,ˆBä˜b¤%×"4Ñ"4Ô5Ü$Ð'BÄ4ÈÃ8À*Ð%MÓNÐNäœZ¨¯©°]ÓCÀZÓPˆCØ×1Ñ1Ü×.Ñ.¨r¸#Ô>Ø�s�ØØ*.ð	 2ó ð ô �c˜=Õ)ð �y‰y×ÓØ�ÜœE¤# f£+Ó.Ó/°×0FÑ0FÓ0HÑI�Ü#,¨V°C×4JÑ4JÓ4LÑ-MÓ#Nò 	‘K�C˜Ø˜S™	�AÜ(¬°t·{±{ÀAÓ)FÓG�CØ—M‘MØŸ	™	×9Ñ9Ø"ØØ#&ð :ó õð	ð $ C×$:Ñ$:Ó$<Ñ=�
Ø&(§i¡i×&GÑ&GØØ�fÐ/Ð0Ü)Ü% d§k¡k°3×3IÑ3IÓ3KÓLóð 'Hó 'Ð#ð +Ð*ð ×-Ñ-¨bÔ1àˆ	Ü�c˜?Ô+Ø×)Ñ)¨"¯)©)Ó4‰IØ×#Ñ#Ô%Ø×.Ñ.Ó0‰IäØHØ-¨d¨V°1°S°EÐ:ð5àõð ˜	Ñ"ˆØ�y‰y×0Ñ0ØØ�O‰OØÜ!¤-°·±¸YÓ"GÓHð	 1ó 
ð 	
r�   c                 óP   — ddl m}  || j                  |«      t        «       ¬«      S )Nr-   )ÚListIteratorVariable©Úmutation_type)Ú r3  rÃ   r/   )rŠ   r8   r3  s      rH   Útp_iter_implzNNModuleVariable.tp_iter_implÆ  s&   € Ý*á#Ø×$Ñ$ RÓ(Ô8HÓ8Jô
ð 	
r�   r¨   c                 óˆ  •‡ ‡‡‡‡‡‡‡‡‡‡— ddl mŠmŠ ddlm} ‰ j
                  Š‰j                  j                  ‰«      Šdt        dt        fˆˆˆˆ ˆfd„}‰dv r‰ j                  ‰‰‰«      S ‰dk(  r8t        ‰ j
                  ‰ j                  «       ‰‰«      5   |‰«      cd d d «       S ‰d	k(  rNt        j                  t        j                   ‰j"                  j$                  «      «      r |j&                  d
«      S ‰dk(  rÜ‰d   j)                  «       st+        ‰d‰› d‰› d�«       t-        ‰d   ‰«      st+        ‰d‰› d‰› d�«       ‰d   j.                  ‰d   j0                     }t-        |t2        «      r|S |j
                  Š‰j                  j                  ‰«      }	‰j                  j5                  |	‰‰t7        t9        ‰ j:                  ‰«      «      ¬«      S |r7t=        ‰‰«      }
‰j"                  j>                  › d‰› d�ŠtA        ‰|
‰‰‰«      S d;ˆˆˆˆˆ fd„Šdt        dtB        t        tD        f   fˆˆˆˆˆfd„}dtF        tH        tD        tD        f      ddfˆˆˆˆ ˆfd„}dt        dtD        ddfˆˆˆˆ ˆfd„}dtJ        dt        dtJ        fd„Š‰dk(  r§‰j                  jL                  jO                  tQ        ‰ j:                  d «      «       ‰s‰r&tS        ‰‰d!tU        ‰«      › d"tU        ‰«      › d#�«       g }‰jW                  «       D ]  \  Š}	|jY                   |‰|	«      «       Œ  ‰|t[        «       ¬$«      S ‰d%k(  r†‰j                  jL                  jO                  tQ        ‰ j:                  d&«      «       g } ‰j\                  d<i  |d'd(«      ¤ŽD ]  \  Š}|jY                   |‰|«      «       Œ  ‰|t[        «       ¬$«      S ‰d)k(  r‡‰j                  jL                  jO                  tQ        ‰ j:                  d*«      «       g } ‰j^                  d<i  |d'd(d+«      ¤ŽD ]  \  Š}|jY                   |‰|«      «       Œ  ‰|t[        «       ¬$«      S ‰d,k(  r‡‰j                  jL                  jO                  tQ        ‰ j:                  d «      «       g } ‰j`                  d<i  |d-d'd+«      ¤ŽD ]  \  Š}	|jY                   |‰|	«      «       Œ  ‰|t[        «       ¬$«      S ‰d.k(  ry‰j                  jL                  jO                  tQ        ‰ j:                  d «      «       ‰s‰r&tS        ‰‰d!tU        ‰«      › d"tU        ‰«      › d#�«        |‰jW                  «       «      S ‰d/k(  rO‰j                  jL                  jO                  tQ        ‰ j:                  d «      «        |‰ja                  «       «      S ‰d0k(  rW‰j                  jL                  jO                  tQ        ‰ j:                  d&«      «        | ‰j\                  d<i  |d(«      ¤Ž«      S ‰d1k(  rW‰j                  jL                  jO                  tQ        ‰ j:                  d*«      «        | ‰j^                  d<i  |d(«      ¤Ž«      S ‰d2k(  rj‰s‰r&tS        ‰‰d!tU        ‰«      › d"tU        ‰«      › d#�«       g }‰D ]'  }|jY                  t        jb                  ‰|«      «       Œ)  ‰|t[        «       ¬$«      S ‰d3k(  r@‰s‰r&tS        ‰‰d!tU        ‰«      › d"tU        ‰«      › d#�«        |‰j/                  «       «      S ‰dk(  rn‰s‰r&tS        ‰‰d!tU        ‰«      › d"tU        ‰«      › d#�«       g }‰j/                  «       D ]  \  Š}	|jY                   |‰|	«      «       Œ  ‰|t[        «       ¬$«      S ‰d4k(  r‰ je                  ‰«      S ‰d5k(  r†t-        ‰tf        jh                  jj                  tf        jh                  jl                  f«      rH‰rF‰d   j)                  «       r3t        jb                  ‰‰d   jo                  «       ‰jp                  v «      S ‰d6k(  szt-        ‰tf        jh                  jr                  jt                  jv                  «      r‰d7k(  s=t-        ‰tf        jh                  jr                  jt                  jx                  «      rp‰d8k(  rkt=        ‰‰«      jz                  }
tQ        tQ        ‰ j:                  ‰«      d9«      }‰j}                  t        j€                  |
|¬«      ‰ gtƒ        ‰«      z   ‰«      S ‰‰j"                  j„                  v r^t‡        ‰j"                  j„                  ‰   «      r<t‰        d:„ t‹        jŒ                  ‰‰j�                  «       «      D «       «      r |‰«      S t�        ‰‰ ��%  ‰‰tƒ        ‰«      ‰«      S # 1 sw Y   �	ŒxY w)=Nr-   )r3  ÚTupleVariabler5   rg   r<   c           	      ó   •— ‰	j                   j                  d‰j                  di «      }t        |j                  ‰«       t        ‰‰«      \  }}ddlm}  |‰	‰	j                   j                  d| |g|¢­|¬«      ¬«      S )NÚget_attrrC   r-   r  Úcall_method)r:   r;   r  )r¢   r  rc   r*   rV   r(   r  r  )
rg   Ú	mod_proxyr]   r^   r  r:   r;   r+  rŠ   r8   s
        €€€€€rH   Úgeneric_call_method_helperz@NNModuleVariable.call_method.<locals>.generic_call_method_helperÛ  sˆ   ø€ ð Ÿ	™	×.Ñ.ØØ—‘ØØó	ˆIô ˜iŸn™n¨fÔ5ä'8¸¸vÓ'FÑ$ˆJ˜å.á ØØ—i‘i×,Ñ,Ø!ØØ#Ð1 jÑ1Ø'ð	 -ó ôð r�   ©r
  Ú_wrapped_call_implrq   Ú_check_input_dimTÚ_get_item_by_idxz``nn.Module`` z's call method z# requires a constant index argumentr   z# requires a tuple as first argumentr¶   Ú_Ú_resultc                  ó´   •— t        d„ t        j                  ‰ ‰j                  «       «      D «       «      s#t	        dd‰› d‰› d‰ › d‰› �d‰› d‰› d�g ¬«       y y )	Nc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrB   )r#  ©rE   r?   s     rH   rI   zUNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const.<locals>.<genexpr>$  s   è ø€ ò Ø+,�×$Ñ$×&ñùó   ‚z&non-const argument in nn.Module methodúcall_method: rÕ   z(Dynamo does not support calling method `z` of ``nn.Module`` z with non-constant arguments.rÖ   )ÚallÚ	itertoolsÚchainÚvaluesr   )r:   r;   r+  rg   rŠ   s   €€€€€rH   Úassert_all_args_kwargs_constzBNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const#  st   ø€ Üñ Ü09·±ÀÀfÇmÁmÃoÓ0Vôô ô ØDØ+¨D¨6°°4°&¸¸$¸¸qÀÀÐIð!Ø#˜fÐ$7¸°xÐ?\ð!^àöðr�   Únamesc                  óŒ  •—  ‰«        t        ‰	‰
«      } t        j                  |«      j                  ‰D �cg c]  }|j	                  «       ‘Œ c}i ‰j                  «       D ��ci c]  \  }}||j	                  «       “Œ c}}¤Ž}|j                  «        |j                  }| D �ci c]  }|||   “Œ
 c}S c c}w c c}}w c c}w rB   )rÉ   rÝ   Ú	signatureÚbindr$  rO   Úapply_defaultsÚ	arguments)rO  r  r?   rW   rX   Ú
bound_argsr:   rN  r;   r+  rg   s         €€€€€rH   Ú
get_kwargsz0NNModuleVariable.call_method.<locals>.get_kwargs/  s´   ø€ Ù(Ô*Ü˜ Ó&ˆBØ3œ×*Ñ*¨2Ó.×3Ñ3Ø37Ö8¨a�1×'Ñ'Õ)Ò8ðà9?¿¹»×H±°°A�1�a×*Ñ*Ó,Ñ,ÓHñˆJð ×%Ñ%Ô'Ø#×-Ñ-ˆJØ.3Ö4¨�A�z !‘}Ñ$Ò4Ð4ùò 9ùÛHùò 5s   ¸B6Á%B;Â&CrO   zvariables.ListIteratorVariablec                 óÐ   •— g }| D ]M  \  }}|j                  ‰j                  j                  |‰|t         ‰‰j                  |«      «      ¬«      «       ŒO  ‰|t        «       ¬«      S )Nr¶   r4  )rº   r¢   r¹   r   rd   r/   )	rO   Únamed_childrenrg   r°   r3  Ú
gen_sourcer*  rŠ   r8   s	       €€€€€rH   Úwrap_valuesz1NNModuleVariable.call_method.<locals>.wrap_values:  sv   ø€ ð 57ˆNØ %ò ‘��fØ×%Ñ%Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó õðñ (ØÔ.>Ó.@ôð r�   Úobjzvariables.TupleVariablec                 ó®   •—  ‰t        j                  ‰| «      ‰j                  j                  |‰| t	         ‰‰j
                  | «      «      ¬«      g«      S )Nr¶   )r0   r¬   r¢   r¹   r   rd   )rg   r[  r9  rY  r*  rŠ   r8   s     €€€€€rH   Únamed_embedz1NNModuleVariable.call_method.<locals>.named_embedK  sX   ø€ Ù ä#×)Ñ)¨"¨dÓ3Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó ðó
ð 
r�   rd   c                 ó°   — |j                  d«      }|d   dk(  r| S t        |«      dkD  r,|j                  d«      }t        | |«      } t        |«      dkD  rŒ,| S )Nú.r   r6  )Úsplitr  r  r   )rd   rg   Ú
name_splitr?   s       rH   rY  z0NNModuleVariable.call_method.<locals>.gen_sourceX  s[   € ØŸ™ C›ˆJØ˜!‰} Ò"Ø�Ü�j“/ AÒ%Ø—N‘N 1Ó%�Ü# F¨AÓ.�ô �j“/ AÓ%ð ˆMr�   rX  rè   z0 args and 0 kwargsz
 args and r  r4  Únamed_parametersré   ÚprefixÚrecurseÚnamed_buffersrê   Úremove_duplicateÚnamed_modulesÚmemoÚchildrenÚmodulesÚ
parametersÚbuffersrò   rM  Ú__iter__Ú__contains__Ú_get_abs_string_indexÚ_conv_forwardÚ_output_paddingrr   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrB   )Ú	is_tensorrG  s     rH   rI   z/NNModuleVariable.call_method.<locals>.<genexpr>ä  s   è ø€ ÒR a�A—K‘K—MÑRùrH  )r<   NrC   )Jr6  r3  r9  r¨   r6   rc   r¢   r£   r%  r0   rà   ro   r–   r   Úis_torch_inline_allowedrÝ   Úgetfilerl   rA  r�   r#  r   rM   rO   r…   rõ   r¹   r   r   rd   rÉ   rô   r1   rN   r   r   rQ   r   Úguard_on_key_orderÚaddr   r)   r  rX  rº   r/   rb  re  rg  r¬   r7  rS   r·   r¸   r"  r$  rè   rj  ÚconvÚ_ConvNdÚ_ConvTransposeNdrr   r  r   r÷   rP   ru   rv   rJ  rK  rL  rM  rˆ   r<  )rŠ   r8   rg   r:   r;   r¨   r6   r>  Úmod_varr°   r  rV  rZ  r]  rX  rb  Úparamre  ÚbufferÚnamed_modules_listrÀ   ÚtmpÚitems_resultr  r3  r9  rN  rY  r*  r+  rl   s   `````                   @@@@@@€rH   r<  zNNModuleVariable.call_methodÍ  sF	  ÿû€ ÷ 	:Ý.à�o‰oˆØ—‘×(Ñ(¨Ó-ˆð	¬Sð 	´_÷ 	ñ 	ð2 Ð7Ñ7ð ×%Ñ% b¨$°Ó7Ð7Ø�YÒô (Ø—‘ ×!@Ñ!@Ó!BÀBÈóñ 8ñ 2°$Ó7÷8ñ 8ð
 Ð%Ò%¬+×*MÑ*MÜ�O‰O˜F×,Ñ,×=Ñ=Ó>ô+
ð +Ð#×*Ñ*¨4Ó0Ð0àÐ%Ò%Ø˜‘7×-Ñ-Ô/Ü ØØ$ V H¨O¸D¸6ÐAdÐeôô ˜d 1™g }Ô5Ü ØØ$ V H¨O¸D¸6ÐAdÐeôð ˜1‘g—m‘m D¨¡G§M¡MÑ2ˆGÜ˜'Ô#@ÔAØ�Ø×$Ñ$ˆCØ—Y‘Y×,Ñ,¨SÓ1ˆFØ—9‘9×4Ñ4ØØØÜ%¤m°D·K±KÀÓ&EÓFð	 5ó ð ñ Ü˜ Ó&ˆBØ×&Ñ&×/Ñ/Ð0°°$°°wÐ?ˆDÜ/°°B¸¸dÀFÓKÐK÷
	ñ 
	ð		5œsð 		5¤t¬C´¨H¡~÷ 		5ñ 		5ð	ÜœE¤#¤s (™OÑ,ð	à-÷	ñ 	ð"	œcð 	¬ð 	Ð0I÷ 	ñ 	ð	œvð 	¬Sð 	´Vó 	ð Ð#Ò#Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQÙ‘vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð 57ˆNØ &× 5Ñ 5Ó 7ò A‘��fØ×%Ñ%¡k°$¸Ó&?Õ@ðAá'ØÔ.>Ó.@ôð ð Ð'Ò'Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹À]Ó-SÔTØ68ÐØ6˜v×6Ñ6ñ  Ù˜X yÓ1ñ ò B‘��eð !×'Ñ'©°D¸%Ó(@ÕAðBñ (Ø Ô0@Ó0Bôð ð �_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQØ35ˆMØ 4 × 4Ñ 4ñ !Ù˜X yÐ2DÓEñ!ò @‘��fð ×$Ñ$¡[°°vÓ%>Õ?ð@ñ (¨ÔEUÓEWÔXÐXØ�_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQØ8:ÐØ 4 × 4Ñ 4ñ !Ù˜V XÐ/AÓBñ!ò E‘��fð #×)Ñ)©+°d¸FÓ*CÕDðEñ (Ø"Ô2BÓ2Dôð ð �ZÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQÙ‘vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ñ ˜v×4Ñ4Ó6Ó7Ð7Ø�YÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQÙ˜v×3Ñ3Ó5Ó6Ð6Ø�\Ò!Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹À]Ó-SÔTÙÐ6˜v×6Ñ6ÑO¹ÀIÓ9NÑOÓPÐPØ�YÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-PÔQÙÐ3˜v×3Ñ3ÑL±jÀÓ6KÑLÓMÐMØ�VŠ^Ù‘vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð ˆFàò >�Ø—‘œo×3Ñ3°B¸Ó<Õ=ð>á'¨Ô>NÓ>PÔQÐQØ�XÒÙ‘vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ñ ˜vŸ|™|›~Ó.Ð.Ø�WŠ_Ù‘vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð 35ˆLØ &§¡£ò ?‘��fØ×#Ñ#¡K°°fÓ$=Õ>ð?á'¨ÔDTÓDVÔWÐWØ�ZÒØ×$Ñ$ RÓ(Ð(à�NÒ"Ü˜6¤E§H¡H×$7Ñ$7¼¿¹×9OÑ9OÐ#PÔQÙØ�Q‘×*Ñ*Ô,ä"×(Ñ(Ø�D˜‘G×.Ñ.Ó0°F·O±OÐCóð ð Ð+Ò+ä˜6¤5§8¡8×#3Ñ#3×#8Ñ#8×#@Ñ#@ÔAØ˜OÒ+ô ˜6¤5§8¡8×#3Ñ#3×#8Ñ#8×#IÑ#IÔJØÐ-Ò-ô ˜ Ó&×/Ñ/ˆBÜ"¤:¨d¯k©k¸4Ó#@À*ÓMˆIØ×1Ñ1Ü×.Ñ.¨r¸)ÔDØ�œ˜d›Ñ#Øóð ð �F×$Ñ$×-Ñ-Ñ-Ü˜×)Ñ)×2Ñ2°4Ñ8Ô9ÜÑR¬9¯?©?¸4ÀÇÁÃÓ+QÔRÔRá-¨dÓ3Ð3ä‘7Ò& r¨4´°d³¸VÓDÐD÷W8ñ 8ús   Âf7æ7gc                 óŠ   — |j                   j                  | j                  «      }t        j                  |t        |«      «      S )z<Sequence length for container modules (e.g., nn.Sequential).)r¢   r£   rc   r0   r¬   r  )rŠ   r8   r+  s      rH   Ú	sq_lengthzNNModuleVariable.sq_lengthê  s1   € à—‘×(Ñ(¨¯©Ó9ˆÜ×$Ñ$ R¬¨V«Ó5Ð5r�   )r8   r4   r<   r7   )r8   r4   r<   N)r8   r4   r*  r0   r<   r0   )F)r8   r4   r<   r0   )'rô   r  Ú__qualname__r0   Ú_nonvar_fieldsrL   r%  rS   r·   ÚModuler   r‰   r�   r   r–   r›   rŸ   r&  r¤   rï   r¦   rª   r¯   r´   rP   rÃ   rÆ   r©   rÊ   rÐ   ræ   rû   rN   rà   r1  r7  r<  r‚  Ú__classcell__©rl   s   @rH   rƒ   rƒ   »   sµ  ø„ àØØØ ð	ð
 
×	'Ñ	'ð€Nð2Øð2Ø-0ð2Ø9>¿¹¿¹ð2ØTWð2à	õ2óð
¨Fó ð-°ð -¸Dó -ð ˜Tó  ð<Ð4ð <¸¸t¹ó <ð¨fó ð2Ð7ð 2¸Oó 2ð4Ð7ð 4¸Oó 4ðà'ðð ðð —‘—‘ð	ð
 ðð ðð 
óð!Ø-ð!à	ˆoÑ	ó!ðF1Ø-ð1Ø58ð1à	ó1ð/Ð9ð /¸dó /ó*ð=
à�h‰h�o‰oð=
ð (ð=
ð ð	=
ð
 ð=
ð 
˜4Ñ	ó=
ð~u-Ø-ðu-Ø58ðu-à	õu-ðnnà'ðnð �?Ñ#ðnð �S˜/Ð)Ñ*ð	nð
 
ónð``
à'ð`
ð ð`
ð 
ó	`
ðD
Ð:ð 
¸ó 
ð ñ[Eà'ð[Eð ð[Eð �?Ñ#ð	[Eð
 �S˜/Ð)Ñ*ð[Eð ð[Eð 
õ[E÷z6r�   rƒ   c            
       óš  ‡ — e Zd Zdddhej                  £Z	 dej                  j                  deddfˆ fd„Z	d	e
de
fd
„Zde
fd„Zde
ddfd„Zeej                   dee   fd„«       «       Zdddee   fˆ fd„Zdddee   deeef   defd„Zdddedee   deeef   def
ˆ fd„Zdddedededz  fd„Zdddedefˆ fd„Zdddedefd„Zˆ xZS )rõ   Ú
value_typeÚis_state_mutatedr†   r…   r;   r<   Nc                 ó¶   •— d|v r+t        |d   dd «      }t        |«      |u rt        |«      |d<   t        ‰| �  dd|i|¤Ž d| _        | j
                  | _        y )Nr‰  r  r…   FrC   )rÉ   rL   rˆ   r‰   rŠ  rd   r†   )rŠ   r…   r;   Úlazy_value_to_becomerl   s       €rH   r‰   z&UnspecializedNNModuleVariable.__init__   sh   ø€ Ø˜6Ñ!Ü#*¨6°,Ñ+?ÀÐRVÓ#WÐ Ü�E‹{Ð2Ñ2ô
 (,¨E£{��|Ñ$ä‰ÑÑ/˜uÐ/¨Ò/Ø %ˆÔð '+§k¡kˆÕ#r�   Úattr_sourcec                 ó   — |S rB   rC   ©rŠ   r�  s     rH   Ú_wrap_sourcez*UnspecializedNNModuleVariable._wrap_source  ó   € àÐr�   c                 óT   — | j                   xs | j                  }|st        d«      ‚|S r‘   r’   r”   s     rH   r–   z8UnspecializedNNModuleVariable.get_nn_module_stack_source  r—   r�   rd   c                 ó   — || _         y rB   r™   rš   s     rH   r›   z8UnspecializedNNModuleVariable.set_nn_module_stack_source  rœ   r�   c                  ó¨  — t         j                  j                  j                  t         j                  j                  j                  t         j                  j                  j
                  h} t         j                  j                  j                  j                  «       D �ch c]'  }t        |d«      r|| vrt        |j                  «      ’Œ) c}S c c}w )NÚ__code__)rS   r·   r…  Ú__setattr__r‰   Ú__delattr__ru   rM  rZ   r¡   r•  )Ú	supportedr?   s     rH   Ú_nn_module_method_idsz3UnspecializedNNModuleVariable._nn_module_method_ids!  s�   € ô
 �H‰H�O‰O×'Ñ'Ü�H‰H�O‰O×$Ñ$Ü�H‰H�O‰O×'Ñ'ð
ˆ	ô —X‘X—_‘_×-Ñ-×4Ñ4Ó6ö
àÜ�q˜*Ô%¨!°9Ñ*<ô ˆq�z‰z�Nò
ð 	
ùò 
s   Â ,Cr8   r4   c                 óÜ  •— 	 t        j                  | j                  d«      }|t
        j                  j                  j                  t
        j                  j                  j                  t
        j                  j                  j                  fv r7|j                  t        j                  ||«      | gi «      j                  |«      S t        ‰| �9  |«      S # t        $ r}t        |‚d }~ww xY w)Nrm  )rÝ   rÞ   r‰  r\   ÚNotImplementedErrorrS   r·   r»   rm  r¼   r½   r  r0   r¬   rÃ   rˆ   )rŠ   r8   r  Úerl   s       €rH   rÃ   z1UnspecializedNNModuleVariable.unpack_var_sequence0  sÑ   ø€ ð	-Ü×'Ñ'¨¯©¸ÓDˆBð Ü�H‰H×Ñ×(Ñ(Ü�H‰H×"Ñ"×+Ñ+Ü�H‰H×Ñ×(Ñ(ð
ñ 
ð ×1Ñ1Ü×%Ñ% b¨"Ó-àðð ó÷ "Ñ! "Ó%ð&ô ‰wÑ*¨2Ó.Ð.øô' ò 	-Ü%¨1Ð,ûð	-ús   ƒ C Ã	C+ÃC&Ã&C+r:   c                 ó  ‡ ‡‡‡— ‰ j                   }t        |«      r+|j                  �|j                  ‰ _        t	        ‰|||«       t        |t        j                  j                  «      sd}t        ‰ j                  |«      }nd}t        ‰ j                  |«      }t        |j                  t        j                  «      �rt        |j                  t        j                  «      rä|j                  j                  t         u rÈ|j                  j                  t"        u r¬‰ j%                  ‰d«      sšt'        j(                  |d«      }t        |t        j*                  «      rj‰j,                  Šdt.        dt0        dt2        fˆfd„Št5        ˆˆ fd„d	D «       «      xs t5        ˆˆfd
„dD «       «      }|sd}‰ j                  j6                  }‰ j8                  r‰ j;                  ‰|«      }	nd }	t=        ‰ j8                  |«       ‰ j8                  r.t?        t1        tA        |«      «      ‰ jC                  «       ‰|«      n	tE        «       }
|
5  t        |t        j*                  t        jF                  jH                  f«      sBt/        jJ                  ‰||	d¬«      }|jM                  ‰‰ gtO        |«      z   |«      cd d d «       S tQ        jR                  ||	¬«      jM                  ‰‰ gtO        |«      z   |«      cd d d «       S # 1 sw Y   y xY w)NÚ__call__r
  rq   r[  rt   r<   c                 ó„   •— | j                  ‰|«      }t        |d«      r|j                  «       n|}|j                  «       S )NÚrealize)rû   rZ   r   r  )r[  rt   Úvtr8   s      €rH   Ú_hooks_dict_lenzDUnspecializedNNModuleVariable.call_function.<locals>._hooks_dict_lenm  s4   ø€ ØŸ™¨¨TÓ2�BÜ)0°°YÔ)?˜Ÿ™œÀR�BØŸ6™6›8�Or�   c              3   ó0   •K  — | ]  } ‰‰|«      –— Œ y ­wrB   rC   )rE   rt   r¢  rŠ   s     €€rH   rI   z>UnspecializedNNModuleVariable.call_function.<locals>.<genexpr>r  s    øè ø€ ò 
 àñ $ D¨$×/ñ
 ùó   ƒ)Ú_backward_hooksÚ_backward_pre_hooksÚ_forward_hooksÚ_forward_hooks_with_kwargsÚ_forward_pre_hooksÚ_forward_pre_hooks_with_kwargsc              3   ó0   •K  — | ]  } ‰‰|«      –— Œ y ­wrB   rC   )rE   rt   r¢  Ú
globals_vts     €€rH   rI   z>UnspecializedNNModuleVariable.call_function.<locals>.<genexpr>|  s    øè ø€ ò àñ $ J°×5ñùr¤  )Ú_global_backward_pre_hooksÚ_global_backward_hooksÚ_global_forward_hooksÚ_global_forward_pre_hooksT©rd   r   r¶   )*r…   r!   r  r‰  rb   rM   rS   rT   r  rÉ   r%   rž  rw   rx   r
  rr   r+   r,   Úhas_key_in_generic_dictrÝ   rÞ   râ   Únn_modules_globals_vtr0   r%  r&  Úanyrq   rd   Úget_source_by_walking_mror€   ro   r¡   r–   r   ÚjitÚScriptFunctionr¬   rà   rP   r   r÷   )rŠ   r8   r:   r;   r9   rg   r  Úforward_methodÚ	has_hooksrd   ÚctxÚfn_vtr¢  r¬  s   ``          @@rH   rà   z+UnspecializedNNModuleVariable.call_functionJ  s†  û€ ð �j‰jˆä˜#ÔØ× Ñ Ð,Ø"%×"3Ñ"3�”Ü" 2 s¨D°&Ô9ä˜#œuŸx™x×3Ñ3Ô4ØˆDÜ˜Ÿ™¨$Ó/‰BàˆDÜ˜Ÿ™¨$Ó/ˆBô
 �3—<‘<¤×!1Ñ!1Õ2Ü�s—~‘~¤u×'7Ñ'7Ô8Ø—‘×%Ñ%Ô)AÑAØ—‘×'Ñ'Ô+HÑHð ×0Ñ0°°YÔ?ä$×3Ñ3°C¸ÓCˆNÜ˜.¬%×*<Ñ*<Ô=Ø×5Ñ5�
ð$¬ð $Äð $Ìõ $ô
  ô 
 ð!ô
 ó 
ò ô ô ð!ôó ð ñ( !Ø$�DØŸ™×0Ñ0�Bà�;Š;Ø×3Ñ3°B¸Ó=‰FàˆFä.¨t¯{©{¸CÔ@ð �{Š{ô #Ü”B�s“G“Ø×/Ñ/Ó1ØØô	ô “ð 	ð ñ 	Ü˜b¤5×#5Ñ#5´u·y±y×7OÑ7OÐ"PÔQÜ'×-Ñ-¨b°"¸VÈTÔR�Ø×*Ñ*¨2°¨v¼¸T»
Ñ/BÀFÓK÷	ñ 	ô !×5Ñ5°bÀÔH×VÑVØ˜˜¤ d£Ñ+¨Vó÷	÷ 	ò 	ús   ÉA-K;Ê=4K;Ë;Lrg   c                 óÒ  •— |dv rpt        | j                  |«      }| j                  r| j                  ||«      }nd }t	        j
                  |||d¬«      }|j                  || gt        |«      z   |«      S | j                  ||«      �s³	 t        j                  t        | j                  «      |«      }t        |t        «      rRt!        | j                  ||«      d«      }t	        j
                  ||j"                  |d¬«      }|j                  |||«      S t%        |d«      rat'        |j(                  «      | j+                  «       v r<t-        dd| › d|› d|› d|› �d	|› d
| j                  › �dgt.        j0                  ¢¬«       |dk(  rüd| j                  j2                  v rä|d   j5                  «       }	|d   }
|
j7                  «       r*|
j9                  «       t:        j<                  j>                  u s|	| j                  j2                  d   v rd| _         no|	| j                  j2                  d   v rd| _         nLt        |
tB        jD                  tB        jF                  f«      s|	| j                  j2                  d   v rd| _         |t:        j<                  jH                  jJ                  u rt        |d   tB        jL                  «      s&|t:        j<                  jH                  jN                  u rPt	        j
                  |t:        j<                  jH                  jN                  «      }|j                  || |d   g|«      S tP        ‰| �¥  ||t        |«      |«      S # t        $ r d }Y �Œ²w xY w)Nr?  Tr±  rr   r•  z,UnspecializedNNModuleVariable missing methodrI  rÕ   z'Dynamo does not support tracing method z of nn.Module z@Dynamo does not really define unspecialized nn.Module very well.rÖ   r–  ré   r   r-   rê   rè   )*rÉ   r‰  rd   rµ  r0   r¬   rà   rP   r²  rÝ   rÞ   rL   r…   r\   rM   rù   r   rr   rZ   r¡   r•  r™  r   r
   Ú	DIFFICULTru   r$  rs  rŸ   rS   r·   Ú	ParameterrŠ  r   rƒ   rõ   r…  r–  ÚDeletedVariabler—  rˆ   r<  )rŠ   r8   rg   r:   r;   r  rd   r»  ÚmethodÚ	attr_namer…   rl   s              €rH   r<  z)UnspecializedNNModuleVariable.call_method¨  s  ø€ ð Ð7Ñ7Ü˜Ÿ™¨$Ó/ˆBØ�{Š{Ø×7Ñ7¸¸DÓA‘à�ä#×)Ñ)¨"¨b¸ÈÔNˆEØ×&Ñ& r¨D¨6´D¸³JÑ+>ÀÓGÐGà×+Ñ+¨B°Õ5ðÜ ×/Ñ/´°T·Z±ZÓ0@À$ÓG�ô ˜&¤,Ô/Ü#Ø×2Ñ2°2°tÓ<¸jó�ô (×-Ñ-Ø˜Ÿ™°Àô�ð ×*Ñ*¨2¨t°VÓ<Ð<ô ˜ 
Ô+Ü�v—‘Ó'¨4×+EÑ+EÓ+GÑGäØJØ+¨D¨6°°4°&¸¸$¸¸qÀÀÐIØ"IÈ$ÈÈ~Ð^b×^hÑ^hÐ]iÐ jàZðä*×4Ñ4ðõ	ð �}Ò$¨¸$¿*¹*×:MÑ:MÑ)Mð ! ™G×6Ñ6Ó8�	Ø˜Q™�ð
 —O‘OÔ%¨%×*;Ñ*;Ó*=ÄÇÁ×ASÑASÑ*SØ $§*¡*×"5Ñ"5°mÑ"DÑDà,0�DÕ)Ø $§*¡*×"5Ñ"5°jÑ"AÑAà,0�DÕ)äØä%×6Ñ6Ü%×CÑCðôð ! D§J¡J×$7Ñ$7¸
Ñ$CÑCð -1�DÔ)ð œ%Ÿ(™(Ÿ/™/×5Ñ5Ñ5Ü˜t A™w¬	×(AÑ(AÔBØœ5Ÿ8™8Ÿ?™?×6Ñ6Ñ6ô (×-Ñ-¨b´%·(±(·/±/×2MÑ2MÓN�Ø×*Ñ*¨2°°d¸1±g¨ÀÓGÐGä‰wÑ" 2 t¬T°$«Z¸Ó@Ð@øôQ "ò Ø“ðús   Â
)M ÍM&Í%M&ÚfieldÚname_vtc                 óÊ   — | j                  ||«      }t        |t        j                  «      r|j                  }t        |t        j
                  «      r|j                  |«      S y rB   )rû   rM   r   ÚUserDefinedDictVariableÚ_base_vtÚConstDictVariableÚmaybe_getitem_const)rŠ   r8   rÂ  rÃ  rŒ   s        rH   Úgetattr_helperz,UnspecializedNNModuleVariable.getattr_helper  sU   € ð ×"Ñ" 2 uÓ-ˆÜ�gœy×@Ñ@ÔAØ×&Ñ&ˆGÜ�gœy×:Ñ:Ô;Ø×.Ñ.¨wÓ7Ð7Ør�   c           
      óÚ  •‡‡‡— |dv r¹‰j                   j                  j                  | |«      s“t        | j                  |«      }t        |t        «      rmt        |«      dk(  r_| j                  r>t        | j                  |«      }t        |j                  t        j                  «      «       t        j                  i «      S | j                  �r|dv �r	‰j                   j                  j                  | |«      sãt        | j                  |«      }t        | j                  |«      Št        ‰j                  t        j                   «      «       ‰j                   j"                  j%                  ‰«       dt&        dt(        dt(        dt*        t,        t,        f   fˆˆfd„Št        ˆfd	„t/        |«      D «       «      }t        j0                  |t3        |«      ‰¬
«      S t4        ‰| �m  ‰|«      S )N)r¥  r¦  r¨  r§  rª  r©  r   )rª  r©  r¨  r§  ÚirW   rX   r<   c                 ó˜   •— t        j                  ‰|«      }t        ‰| «      }t        ‰|«      }t	        j
                  ||‰¬«      }||fS )N)r8   )r0   r¬   r   r   r2   r�   )	rË  rW   rX   r*  Ú
source_keyÚsource_valuer…   Úhooks_dict_sourcer8   s	          €€rH   Úbuild_key_valuezBUnspecializedNNModuleVariable.var_getattr.<locals>.build_key_value?  sQ   ø€ ô &×+Ñ+¨B°Ó2�ô 0Ð0AÀ1ÓE�
Ü0Ð1BÀJÓO�Ü+×2Ñ2°1°lÀrÔJ�Ø˜E�zÐ!r�   c              3   ó:   •K  — | ]  \  }}} ‰|||«      –— Œ y ­wrB   rC   )rE   rË  rW   rX   rÐ  s       €rH   rI   z<UnspecializedNNModuleVariable.var_getattr.<locals>.<genexpr>L  s(   øè ø€ ò á�A�q˜!ñ    1 a×(ñùs   ƒr¶   )r¢   Úside_effectsÚhas_pending_mutation_of_attrrÉ   r…   rM   rN   r  rd   r   r   ry   r   ÚEMPTY_NN_MODULE_HOOKS_DICTr   rÇ  ÚSEQUENCE_LENGTHrv  rw  r&  r   rQ   r0   r   ÚNNModuleHooksDictVariablerL   rˆ   rû   )	rŠ   r8   rg   Ú
hooks_dictÚhooks_sourcerÀ   rÐ  rÏ  rl   s	    `    @@€rH   rû   z)UnspecializedNNModuleVariable.var_getattr  s¥  û€ ð ð 
ñ 
ð —9‘9×)Ñ)×FÑFÀtÈTÔRÜ$ T§Z¡Z°Ó6�
Ü˜j¬$Ô/´C¸
³OÀqÒ4HØ—{’{Ü'1°$·+±+¸tÓ'D˜Ü%Ø(×3Ñ3Ü ,× GÑ Góôô
 %×6Ñ6°rÓ:Ð:ð �K‹KØðòð —I‘I×*Ñ*×GÑGÈÈdÔSä  §¡¨TÓ2ˆJÜ *¨4¯;©;¸Ó =ÐÜÐ+×6Ñ6´|×7SÑ7SÓTÔUØ�I‰I×(Ñ(×,Ñ,Ð->Ô?ð"Üð"Üð"Ü#&ð"ä”¬Ð7Ñ8ö"ô ó äAÀ*ÓMôó ˆFô
 ×6Ñ6Øœ˜ZÓ(Ð1Bôð ô ‰wÑ" 2 tÓ,Ð,r�   c           	      óD  — ddl m} |j                  ||«      }| j                  |d|«      }|€| j                  |d|«      }|€| j                  |d|«      }|€7t	        t
        |dt        | j                  «      j                  › d|› d�g¬«       |€t        d	|› d�«      ‚|S )
a  
        Dynamo tracing of nn.Module __getattr__ can be expensive if the model
        has deep submodule hierarchy. Since the __getattr__ is stable, we can
        directly look into the underlying datastructures. This saves a lot of
        compilation time.
        r-   )ÚSourcelessBuilderré   rè   rê   rë   rì   rY   z;manually_trace_nn_module_getattr failed to find attribute ')
r  rÚ  r�   rÉ  r   r\   rL   r…   rô   r“   )rŠ   r8   rg   rÚ  rÃ  r   s         rH   Ú manually_trace_nn_module_getattrz>UnspecializedNNModuleVariable.manually_trace_nn_module_getattrV  sÃ   € õ 	/à#×*Ñ*¨2¨tÓ4ˆØ×!Ñ! " m°WÓ=ˆØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ü$ÜØàœ˜TŸZ™ZÓ(×1Ñ1Ð2Ð2MÈdÈVÐSTÐUðõð ˆ;Ü ØMÈdÈVÐSTÐUóð ð ˆ
r�   )rô   r  rƒ  r3   r„  rS   r·   r…  r   r‰   r   r�  r–   r›   rù   r{   ÚcacherR   r&  r™  rP   r0   rÃ   rN   r%  rà   r<  rÉ  rû   rÛ  r†  r‡  s   @rH   rõ   rõ   ð  s»  ø„ àØØ ðð 
#×	1Ñ	1ð	€Nðð2˜eŸh™hŸo™oð 2¸ð 2Àõ 2ð(¨ð °6ó ð¨Fó ð-°ð -¸Dó -ð Ø‡_�_ð
 3 s¡8ò 
ó ó ð
ð/Ø-ð/à	ˆoÑ	õ/ð4\à'ð\ð �?Ñ#ð\ð �S˜/Ð)Ñ*ð	\ð
 
ó\ð|\Aà'ð\Að ð\Að �?Ñ#ð	\Að
 �S˜/Ð)Ñ*ð\Að 
õ\Að|Ø-ðØ69ðØDSðà	˜4Ñ	óðD-Ø-ðD-Ø58ðD-à	õD-ðLØ-ðØ58ðà	÷r�   rõ   c                   ó    — e Zd ZdZdedefd„Zy)Ú$UnspecializedBuiltinNNModuleVariablezg
    Differentiates between builtin nn modules (e.g. torch.nn.Linear) and user defined nn modules.
    r�  r<   c                 ó   — |S rB   rC   r�  s     rH   r�  z1UnspecializedBuiltinNNModuleVariable._wrap_source{  r‘  r�   N)rô   r  rƒ  Ú__doc__r   r�  rC   r�   rH   rÞ  rÞ  v  s   „ ñð¨ð °6ô r�   rÞ  c                   óh   ‡ — e Zd ZdZdej
                  j                  deddfˆ fd„Zdedefd„Z	ˆ xZ
S )	ÚFSDPManagedNNModuleVariableaü  
    Tracing behavior: trace into submodules and treat them as Unspecialized, do not
    register parameters to the top-level, treat them as function inputs.

    Guards behavior: if 'skip_fsdp_guards', many guards that would be installed
    by a vanilla UnspecializedNNModuleVariable are simply dropped, on the basis
    that a user wrapping their model in FSDP(model) is already opting into a
    requirement to not modify internal model state, which would already break FSDP without
    compilation.
    r…   r;   r<   Nc                 ór   •— |j                  d«      }|€t        d«      ‚t        ‰| �  dd|i|¤Ž || _        y )Nrd   zMFSDPManagedNNModule depends on having an accurate source to control guarding.r…   rC   )rk   r“   rˆ   r‰   rd   )rŠ   r…   r;   rd   rl   s       €rH   r‰   z$FSDPManagedNNModuleVariable.__init__Œ  sD   ø€ Ø—‘˜HÓ%ˆØˆ>Ü Ø_óð ô 	‰ÑÑ/˜uÐ/¨Ò/Øˆ�r�   r�  c                 ó¦   — t        |t        t        f«      s:t        j                  j
                  j                  rt        |«      S t        |«      S |S rB   )rM   r   r   rS   Ú_dynamoÚconfigÚskip_fsdp_guardsr�  s     rH   r�  z(FSDPManagedNNModuleVariable._wrap_source–  sG   € ÜØÔ,Ô.IÐJô
ô �}‰}×#Ñ#×4Ò4Ü)¨+Ó6Ð6ä2°;Ó?Ð?ØÐr�   )rô   r  rƒ  rà  rS   r·   r…  r   r‰   r�  r†  r‡  s   @rH   râ  râ  €  s=   ø„ ñ	ð˜eŸh™hŸo™oð ¸ð Àõ ð¨ð °÷ r�   râ  )Wrà  r{   rÝ   rK  rh   rw   Úcollections.abcr   Ú
contextlibr   r   Útypingr   r   Útorch.nnrS   Útorch._guardsr   r6  r
   r   r   Úexcr   r   r   r   r   r   r   Úguardsr   r   Úmutation_guardr   rd   r   r   r   r   r   r   r   Úutilsr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r¿   r.   r/   r0   Ú	functionsr1   Úlazyr2   Úuser_definedr3   Útorch._dynamo.symbolic_convertr4   r¨   r6   Údictsr7   r·   r…  rP   rN   r%  rb   ro   r€   rƒ   rõ   rÞ  râ  rC   r�   rH   ú<module>rö     s†  ðñó. Û Û Û 	Û Ý $ß 2ß %ã Ý  ç 8Ñ 8÷÷ ñ ÷ 1Ý .÷÷ ñ ÷÷ ÷ ÷ ñ ÷" =Ñ <Ý 3Ý %Ý 3ñ ÝHå*Ý)ð&Ø#ð&à	�‰�‰ð&ð ˆÑ
ð&ð ��oÐ%Ñ&ð	&ð
 
ó&ðR ð+Øð+àð+ð 	$ð+ð 
�‰�‰ð	+ð
 	ò+ó ð+ð. Ø�T‰Mð Ø %§¡§¡ð à	ó ôFr6�ô r6ôjCÐ$=ô CôLÐ+Hô ôÐ"?õ r�   