§
    C�’jhó  ã                   ó¸  — 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jK        jL        deMe>         deNeOe>f         ddf
d„ZPe	deOdedddejK        jL        def
d„¦   «         ZQdedz  dejK        jL        ddfd „ZR G d!„ d"e>¦  «        ZS G d#„ d$eD¦  «        ZT G d%„ d&eT¦  «        ZU G d'„ d(eT¦  «        ZVdS ))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                 ó\  ‡ ‡— t          |d¦  «        r™dt          dt          fˆˆ fd„Št          ||¦  «        \  }}ˆfd„|D ¦   «         }ˆfd„|                     ¦   «         D ¦   «         }	 |                     |||¦  «         d	S # t
          $ r t          t
          ‰ dg¬¦  «         Y d	S w xY wd	S )
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 ˆfd„|                      ¦   «         D ¦   «         S t          | t
          t          t          f¦  «        r$ t          | ¦  «        ˆfd„| D ¦   «         ¦  «        S t          | t          j	        j
        ¦  «        rt          | j        ‰¦  «        S | S )Nc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S ©N© ©Ú.0ÚelemÚconvert_to_fakes     €úOC:\Projects\DSCons\.venv\Lib\site-packages\torch\_dynamo\variables\nn_module.pyú	<genexpr>zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>h   s-   øè è € Ð EÐ E¸4  °Ñ!6Ô!6Ð EÐ EÐ EÐ EÐ EÐ Eó    c                 ó.   •— i | ]\  }}| ‰|¦  «        “ŒS rC   rC   ©rE   ÚkÚvrG   s      €rH   ú
<dictcomp>zCinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<dictcomp>j   s)   ø€ ÐDÐDÐD±$°!°Q˜˜?˜?¨1Ñ-Ô-ÐDÐDÐDrJ   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S rB   rC   rD   s     €rH   rI   zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>l   s-   øè è € ÐCÐC¸˜˜¨tÑ4Ô4ÐCÐCÐCÐCÐCÐCrJ   )r"   ÚtypeÚ
isinstanceÚdictÚitemsÚlistÚtupleÚsetÚtorchÚfxÚProxyr    Únode)r?   rG   r8   s    €€rH   rG   z/initialize_lazy_module.<locals>.convert_to_fakef   sà   ø€ Ý˜QÑÔð 	Ø•t˜A‘w”wÐ EÐ EÐ EÐ EÀ1Ð EÑ EÔ EÐFÐFÝ˜A�tÑ$Ô$ð ØDÐDÐDÐD¸!¿'º'¹)¼)ÐDÑDÔDÐDÝ˜A¥¥e­SÐ1Ñ2Ô2ð Ø•t˜A‘w”wÐCÐCÐCÐCÀÐCÑCÔCÑCÔCÐCÝ˜A�uœxœ~Ñ.Ô.ð Ý% a¤f¨bÑ1Ô1Ð1à�rJ   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rC   rC   )rE   ÚargrG   s     €rH   ú
<listcomp>z*initialize_lazy_module.<locals>.<listcomp>s   s#   ø€ Ð@Ð@Ð@¨c�_�_ SÑ)Ô)Ð@Ð@Ð@rJ   c                 ó.   •— i | ]\  }}| ‰|¦  «        “ŒS rC   rC   rL   s      €rH   rO   z*initialize_lazy_module.<locals>.<dictcomp>t   s)   ø€ ÐNÐNÐN±°°A�q˜/˜/¨!Ñ,Ô,ÐNÐNÐNrJ   z0AttributeError during lazy module initialization©r:   N)Úhasattrr   r(   rT   Ú_infer_parametersÚAttributeErrorr   )	r8   r9   r:   r;   Ú
proxy_argsÚproxy_kwargsÚ	fake_argsÚfake_kwargsrG   s	   `       @rH   Úinitialize_lazy_modulerh   W   s  øø€ õ ˆsÐ&Ñ'Ô'ð ð
	�sð 
	¥sð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	õ $5°T¸6Ñ#BÔ#BÑ ˆ
�LØ@Ð@Ð@Ð@°ZÐ@Ñ@Ô@ˆ	ØNÐNÐNÐN¸×9KÒ9KÑ9MÔ9MÐNÑNÔNˆð	Ø×!Ò! # y°+Ñ>Ô>Ð>Ð>Ð>øÝð 	ð 	ð 	å$ÝØØHÐIðñ ô ð ð ð ð ð	øøøð'ð s   Á*B Â"B)Â(B)Ú
module_keyÚsourcec              #   ó  K  — |j         }t          j        dd|¦  «        }|j                             |d¦  «        }|dk    r| › d|› �n| } 	 ||j        f|j        | <   |dz   |j        |<   d V — |j        | = d S # |j        | = w xY w)Nz9\._(?:modules|parameters|buffers)\[(['\"])([^'\"\]]+)\1\]z.\2r   ú@r-   )ÚnameÚreÚsubÚ	num_callsÚgetÚ	__class__Únn_module_stack)ri   rj   r8   r9   Úfully_qualified_namerp   s         rH   Úrecord_nn_module_stackru   €   sÀ   è è € ð "œ;Ðåœ6ØDØØñô Ðð
 ”× Ò Ð!5°qÑ9Ô9€IØ09¸A²°�JÐ,Ð, Ð,Ð,Ð,À:€Jð+Ø*>ÀÄÐ)NˆÔ˜:Ñ&Ø-6¸©]ˆŒÐ)Ñ*ØˆˆˆàÔ˜zÐ*Ð*Ð*øˆBÔ˜zÐ*Ð*Ð*Ð*Ð*s   Á"A7 Á7
Bc                 óÀ  — | rÛd|j         v r�t          |j         d         ¦  «        rv|j         d         }t          | d¦  «        }t          |¦  «        t          j        u rt          |d¦  «        }t          |                     t          j	        ¦  «        ¦  «         d S t          |                      t          j        t          j        d¬¦  «        ¦  «        ¦  «         d S d S )NÚforwardÚ__func__©Úattr)Ú__dict__Úcallabler   rQ   ÚtypesÚ
MethodTyper   Ú
make_guardr   ÚCLOSURE_MATCHÚ	functoolsÚpartialÚNOT_PRESENT_IN_GENERIC_DICT)rj   r9   ÚfwdÚforward_sources       rH   Ú&guard_to_detect_forward_monkeypatchingr†   ˜   sè   € ð  ð Ø˜œÐ$Ð$­°#´,¸yÔ2IÑ)JÔ)JÐ$à”,˜yÔ)ˆCÝ'¨°	Ñ:Ô:ˆNÝ�C‰yŒy�EÔ,Ð,Ð,Ý!+¨N¸JÑ!GÔ!G�Ý˜.×3Ò3µLÔ4NÑOÔOÑPÔPÐPÐPÐPõ Ø×!Ò!ÝÔ%Ý$Ô@Àyðñ ô ñô ñô ð ð ð ðð rJ   c                   óB  ‡ — 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#	 d0d	d
ded#ee         de eef         d*edefˆ fd+„Z$d1d,„Z%ˆ xZ&S )2ÚNNModuleVariableÚmodule_typeri   ÚvalueÚnn_module_stack_sourcer;   r<   Nc                 ó”   •—  t          ¦   «         j        di |¤Ž || _        || _        || _        | j        | _        | j        | _        d S )NrC   )ÚsuperÚ__init__r‰   ri   rŠ   rj   r‹   )Úselfr‰   ri   rŠ   r;   rr   s        €rH   rŽ   zNNModuleVariable.__init__Ä   sS   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø&ˆÔØ$ˆŒØˆŒ
ð #œkˆŒØ&*¤kˆÔ#Ð#Ð#rJ   r8   r4   r7   c                 óz   — t          | d¦  «        s%t          j                             || ¦  «        | _        | j        S )NÚdict_vt)ra   r   r7   Úcreater‘   ©r�   r8   s     rH   Úget_dict_vtzNNModuleVariable.get_dict_vtÑ   s7   € Ý�t˜YÑ'Ô'ð 	IÝ$Ô7×>Ò>¸rÀ4ÑHÔHˆDŒLØŒ|ÐrJ   c                 óD   — | j         p| j        }|st          d¦  «        ‚|S ©Nz'nn_module_stack_source must not be None©r‹   rj   ÚAssertionError©r�   Úress     rH   Úget_nn_module_stack_sourcez+NNModuleVariable.get_nn_module_stack_sourceÖ   ó.   € ØÔ)Ð8¨T¬[ˆØð 	LÝ Ð!JÑKÔKÐKØˆ
rJ   rj   c                 ó   — || _         d S rB   ©r‹   ©r�   rj   s     rH   Úset_nn_module_stack_sourcez+NNModuleVariable.set_nn_module_stack_sourceÜ   ó   € Ø&,ˆÔ#Ð#Ð#rJ   c                 ó   — | j         S rB   )r‰   ©r�   s    rH   Úpython_typezNNModuleVariable.python_typeß   s   € ØÔÐrJ   c                 óZ   — t          |j                             | j        ¦  «        ¦  «        S rB   )ÚidÚoutputÚget_submoduleri   r“   s     rH   Úget_idzNNModuleVariable.get_idâ   s"   € Ý�"”)×)Ò)¨$¬/Ñ:Ô:Ñ;Ô;Ð;rJ   c                 ó   — | j         S rB   )rŠ   r£   s    rH   Úget_real_python_backed_valuez-NNModuleVariable.get_real_python_backed_valueå   s
   € ØŒzÐrJ   c                 ó†   — ddl m} |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¨   ri   r’   Úbool)r�   r8   r6   r9   s       rH   Ú	bool_implzNNModuleVariable.bool_implè   sG   € ð 	/Ð.Ð.Ð.Ð.Ð.àŒi×%Ò% d¤oÑ6Ô6ˆØ&ÐÔ&¥t¨C¡y¤yÑ1Ô1Ð1rJ   c                 ó„   — |j                              | j        ¦  «        }t          j        |t          |¦  «        ¦  «        S rB   )r§   r¨   ri   r0   ÚbuildÚrepr©r�   r8   r9   s      rH   Ú	repr_implzNNModuleVariable.repr_implõ   s2   € ØŒi×%Ò% d¤oÑ6Ô6ˆÝÔ$ R­¨c©¬Ñ3Ô3Ð3rJ   ÚsubmodÚ	key_extraÚoptionsc                 ó   — d S rB   rC   )r�   r8   rj   rµ   r¶   r·   s         rH   Ú_wrap_submodulez NNModuleVariable._wrap_submoduleù   s	   € ð 	ˆrJ   c                 ó,  — |j                              | j        ¦  «        }g }t          |t          j        j        ¦  «        r‰|                     ¦   «         D ]r\  }}t          j	        ||¦  «        }|j          
                    || j        |t          t          | j        |¦  «        ¦  «        ¬¦  «         |                     |¦  «         Œs|S t          |t          j        j        t          j        j        t          j        j        f¦  «        st%          dt'          |¦  «        › �¦  «        ‚t)          |¦  «        D ][\  }}|                     |j          
                    || j        |t          t          | j        |¦  «        ¦  «        ¬¦  «        ¦  «         Œ\|S )N©rj   z7Expected ModuleList, ParameterList, or Sequential, got )r§   r¨   ri   rR   rX   ÚnnÚ
ModuleDictrT   r0   r±   Úregister_attr_or_moduler   r   rj   ÚappendÚ
ModuleListÚParameterListÚ
Sequentialr˜   r.   Ú	enumerate)r�   r8   ÚbaseÚresultrm   rµ   Úname_varÚidxs           rH   Úunpack_var_sequencez$NNModuleVariable.unpack_var_sequence  s�  € ð Œy×&Ò& t¤Ñ7Ô7ˆØ(*ˆÝ�d�EœHÔ/Ñ0Ô0ð 
	Ø $§
¢
¡¤ð (ð (‘��fÝ*Ô0°°TÑ:Ô:�Ø”	×1Ò1ØØ”OØÝ)­-¸¼ÀTÑ*JÔ*JÑKÔKð	 2ñ ô ð ð —’˜hÑ'Ô'Ð'Ð'ØˆMåØ•5”8Ô&­¬Ô(>ÅÄÔ@SÐTñ
ô 
ð 	õ !ØYÍ'ÐRVÉ-Ì-ÐYÐYñô ð õ % T™?œ?ð 	ð 	‰KˆC�Ø�MŠMØ”	×1Ò1ØØ”OØÝ)­-¸¼ÀSÑ*IÔ*IÑJÔJð	 2ñ ô ñô ð ð ð ˆrJ   rm   r6   c                 ó  — |j                              | j        ¦  «        }t          ||¦  «        }t	          | j                             t          j        t          j
        |¬¦  «        ¦  «        ¦  «         t          j        ||¦  «        S )Nry   )r§   r¨   ri   ra   r   rj   r   r�   r‚   r   ÚHASATTRr0   r±   )r�   r8   rm   r9   rÅ   s        rH   Úcall_obj_hasattrz!NNModuleVariable.call_obj_hasattr&  sx   € ð Œi×%Ò% d¤oÑ6Ô6ˆÝ˜˜dÑ#Ô#ˆÝØŒK×"Ò"¥9Ô#4µ\Ô5IÐPTÐ#UÑ#UÔ#UÑVÔVñ	
ô 	
ð 	
õ Ô$ R¨Ñ0Ô0Ð0rJ   c                 ób   — |j                              | j        ¦  «        }t          |dd¦  «        S )NÚtrainingF)r§   r¨   ri   Úgetattrr³   s      rH   Úis_trainingzNNModuleVariable.is_training0  s+   € ØŒi×%Ò% d¤oÑ6Ô6ˆÝ�s˜J¨Ñ.Ô.Ð.rJ   c                 óØ   — |j                              | j        ¦  «        }t          j        |¦  «         |j        j        dk    r!t          j        t          |¦  «        ¦  «         t          ‚)zIRestart analysis treating this module as an UnspecializedNNModuleVariablerŽ   )
r§   r¨   ri   r   ÚtagÚf_codeÚco_nameÚmark_class_dynamicrQ   r   r³   s      rH   Úconvert_to_unspecializedz)NNModuleVariable.convert_to_unspecialized4  sY   € àŒi×%Ò% d¤oÑ6Ô6ˆÝÔ˜cÑ"Ô"Ð"ð Œ9Ô 
Ò*Ð*ÝÔ0µ°c±´Ñ;Ô;Ð;Ý)Ð)rJ   rÄ   Ú
obj_sourcec                 ó  — t          |¦  «        rÑt          j        t          |¦  «        d¦  «        }|rt	          |d¦  «        nd}	 t          j        || |¬¦  «                             |t
          j         	                    |¦  «        gi ¦  «        S # t          $ r t          |¦  «         Y n5t          $ r) t          dd| › d|› �ddgt          j        ¢¬	¦  «         Y nw xY wt!          |d
¬¦  «        }|€dS t#          |t$          j        ¦  «        s&t          dd| › d|› �ddgt          j        ¢¬	¦  «         dt	          |d¦  «        i}t          j        || fi |¤Ž                     |t)          j        ||¦  «        gi ¦  «        S )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.rj   Ú__getattr__)r'   ÚinspectÚgetattr_staticrQ   r   r   ÚUserMethodVariableÚcall_functionr6   r’   r   r   r   r   r
   ÚSUPPORTABLEr   rR   r}   ÚFunctionTyper0   r±   )	r�   rÄ   r8   rm   rÖ   Úgetattribute_fnÚ
new_sourceÚ
getattr_fnr·   s	            rH   Ú_custom_getattr_fallbackz)NNModuleVariable._custom_getattr_fallback>  s
  € õ # 4Ñ(Ô(ð 	Ý%Ô4µT¸$±Z´ZÐASÑTÔTˆOà>HÐR•
˜:Ð'9Ñ:Ô:Ð:Èdð ðÝ Ô3Ø#ØØ%ðñ ô ÷  ’- ¥YÔ%?×%FÒ%FÀtÑ%LÔ%LÐ$MÈrÑRÔRð	Søõ
 *ð .ð .ð .Ý)¨"Ñ-Ô-Ð-Ð-Ð-Ýð ð ð ÝØSØ8¨4Ð8Ð8°$Ð8Ð8ð!EðEðõ +Ô6ðð
ñ 
ô 
ð 
ð 
ð 
ðøøøõ (¨ÀtÐLÑLÔLˆ
ØÐØ�4å˜*¥eÔ&8Ñ9Ô9ð 	ÝØPØ4 tÐ4Ð4¨dÐ4Ð4ð-ðAðõ 'Ô2ð	ðñ ô ð ð$ �Z¨
°MÑBÔBÐCˆåÔ+¨J¸ÐHÐHÀÐHÐH×VÒVØ•Ô& r¨4Ñ0Ô0Ð1°2ñ
ô 
ð 	
s   ÁA	B ÂCÂ,/CÃCc                 ób	  •— | j         ot          | j         |¦  «        }|j                             | j        ¦  «        }t
                               |d¦  «        }d}t          ¦   «         }t          j	        |j
        ¦  «        D ].}|                     |j                             ¦   «         ¦  «         Œ/| j         s%t          dd| › d|› �dg t          j        ¢¬¦  «         |dk    r|                      |¦  «        S d }	||v r	||         }	nÙd|v r||d         v r||vr|d         |         }	n¸d	|v r||d	         v r|d	         |         }	n›d
|v r||d
         v r|d
         |         }	n~	 t          j        ||¦  «        }	d}ne# t&          $ rX |                      |||| j         ¬¦  «        }
|
�|
cY S t+          t&          |dt-          |¦  «        j        › d|› d�g¬¦  «         Y nw xY w|dk    rt1          | j         |¦  «         |dk    r|st3          j        ||j
        |¬¦  «        S |rvt3          j        ||	t7          |¦  «        ¦  «        }t9          |t:          t<          f¦  «        r5|                     t          |                       ¦   «         |¦  «        ¦  «         |S tC          |	tD          ¦  «        rk| j         r3t          t          | j         d¦  «        |¦  «        }t          |d¦  «        }tG          j$        |	j%        |¬¦  «         &                    || gi ¦  «        S tC          |	tN          ¦  «        r;tG          j(        |	j)        tG          j*        t-          |¦  «        ¦  «        |¬¦  «        S tC          |	tV          ¦  «        r)tG          j$        |	 ,                    |¦  «        |¬¦  «        S tC          |	tZ          j.        ¦  «        rtG          j(        |	| |¬¦  «        S t_          |	¦  «        sta          |	¦  «        r#t3          j        ||	t7          |¦  «        ¦  «        S t          ddtc          |¦  «        › d|› dtc          |	¦  «        › �dtc          |	¦  «        › d�d|› dtc          |	¦  «        › dtc          |¦  «        › d�dgt          j2        ¢¬¦  «         tg          ¦   «          4                    ||¦  «        S )Nr{   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   rm   rÖ   ú'ú' object has no attribute 'r`   rw   rr   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.)5rj   r   r§   r¨   ri   ÚobjectrØ   rW   râ   Úgetmrorr   Úupdater{   Úkeysr   r
   Ú
DYNAMO_BUGr”   rã   rc   rë   r   rQ   Ú__name__r†   r0   r±   r   rR   rˆ   ÚUnspecializedNNModuleVariabler    r›   r%   Úpropertyr   ÚUserFunctionVariablerò   rå   Úclassmethodrä   rx   r3   ÚstaticmethodÚ__get__r}   rç   r#   r$   r.   ræ   r�   Úvar_getattr)r�   r8   rm   rj   rÄ   Ú	base_dictÚobject_memberÚall_class_attribute_namesr?   ÚsubobjrÅ   Úoutrr   s               €rH   r   zNNModuleVariable.var_getattr}  sp  ø€ ð ”Ð>¥¨D¬K¸Ñ!>Ô!>ˆàŒy×&Ò& t¤Ñ7Ô7ˆõ ×+Ò+¨D°*Ñ=Ô=ˆ	ØˆÝ$'¡E¤EÐ!Ý” ¤Ñ/Ô/ð 	@ð 	@ˆAØ%×,Ò,¨Q¬Z¯_ª_Ñ->Ô->Ñ?Ô?Ð?Ð?àŒ{ð 	ÝØ0Ø4 tÐ4Ð4¨dÐ4Ð4ð7ð 6Õ)Ô4Ð5ðñ ô ð ð �:ÒÐØ×#Ò# BÑ'Ô'Ð'àˆØ�9ÐÐØ˜t”_ˆFˆFà˜)Ð#Ð#Ø˜	 *Ô-Ð-Ð-ØÐ5Ð5Ð5à˜zÔ*¨4Ô0ˆFˆFØ˜iÐ'Ð'¨D°I¸mÔ4LÐ,LÐ,LØ˜}Ô-¨dÔ3ˆFˆFØ˜9Ð$Ð$¨°¸:Ô1FÐ)FÐ)FØ˜zÔ*¨4Ô0ˆFˆFðÝ Ô/°°dÑ;Ô;�Ø %��øÝ!ð ð ð à×6Ò6Ø "¨4¸D¼Kð 7ñ ô �ð Ð%Ø!�M�M�Må(Ý"ØØU�d 4™jœjÔ1ÐUÐUÈdÐUÐUÐUÐVðñ ô ð ð ð ðøøøð �9ÒÐÝ2°4´;ÀÑEÔEÐEà�;ÒÐ }ÐÝ"Ô(¨¨T¬^ÀFÐKÑKÔKÐKàð 2	Ý!Ô'¨¨FµNÀ6Ñ4JÔ4JÑKÔKˆCå˜#Õ 0Õ2OÐPÑQÔQð ð ×.Ò.Ý˜t×>Ò>Ñ@Ô@À$ÑGÔGñô ð ð ˆJõ �f�hÑ'Ô'ð %Ø”;ð 8å'­
°4´;ÀÑ(LÔ(LÈdÑSÔS�Få'¨°Ñ7Ô7�FÝ Ô5Ø”KØ!ðñ ô ÷  ’-  d H¨bÑ1Ô1ð2õ ˜¥Ñ,Ô,ð Ý Ô3Ø”OÝÔ7½¸T¹
¼
ÑCÔCØ!ðñ ô ð õ
 ˜¥Ñ-Ô-ð Ý Ô5Ø—N’N 4Ñ(Ô(Ø!ðñ ô ð õ ˜¥Ô 2Ñ3Ô3ð Ý Ô3°F¸DÈÐPÑPÔPÐPÝ! &Ñ)Ô)ð ­X°fÑ-=Ô-=ð å&Ô,¨R°½ÈÑ9OÔ9OÑPÔPÐPåØBØsµ7¸4±=´=ÐsÐsÈ$ÐsÐsÕbiÐjpÑbqÔbqÐsÐsØ sÕahÐioÑapÔapÐ sÐ sÐ sð C°tð  Cð  CÅgÈfÁoÄoð  Cð  CÕryÐz~ÑrÔrð  Cð  Cð  Cð>ðõ +Ô6ð	ð	
ñ 
ô 
ð 
õ ‰wŒw×"Ò" 2 tÑ,Ô,Ð,s   Å"E: Å:,GÆ(1GÇGr:   c                 óü  — |j                              | j        ¦  «        }t          | j        |                      ¦   «         ||¦  «        5  t          |¦  «        }t          |t          j        j	        ¦  «        �r|j
        j        t          j        j	        j        u r÷t          |¦  «        r|                      |¦  «         |rt          d¦  «        ‚|r"t          |ddt!          |¦  «        › d�¦  «         |\  }|j                             ¦   «         D ]r\  }}|                     |j                              || j        |t+          t-          | j        |¦  «        ¦  «        ¬¦  «        |gi ¦  «         |                     ¦   «         }Œs|cd d d ¦  «         S |r%|j        �|j        | _        t7          ||||¦  «         |j                              ¦   «         r�|j                             d¦  «        rv|j        dk    rkt          |dd¬	¦  «        r|                      |¦  «         d
dlm }	  |	| |j         j!        d| j        gtE          ||¦  «        ¢R Ž ¬¦  «        cd d d ¦  «         S t          |t          j#        j$        ¦  «        r|j        }
t-          | j        d¦  «        }n|j%        }
t-          | j        d¦  «        }tM          |
tN          j(        ¦  «        r+|
j)        }
t-          |d¦  «        }| gtU          |¦  «        z   }n9tM          |
tN          j+        ¦  «        st          dtY          |
¦  «        › �¦  «        ‚| -                    t]          j/        |
|¬¦  «        ||d¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )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   Úproxyrw   Ú
_call_implrx   úExpected FunctionType, got ©Úallow_nested_graph_breaks)0r§   r¨   ri   ru   r›   r!   rR   rX   r¼   rÂ   rr   rw   r&   rÕ   r˜   r)   Úlenrí   rT   rå   r¾   r   r   rj   ÚpopÚcls_to_becomer‰   rh   Úis_root_tracerÚ
__module__Ú
startswithÚbuilderr  Úcreate_proxyr(   rY   ÚGraphModuler  r%   r}   r~   rx   rU   rç   rQ   Úinline_user_function_returnr   rü   )r�   r8   r:   r;   r9   Úis_lazyr]   Ú
child_namerµ   r  ÚfnÚ	fn_sources               rH   rå   zNNModuleVariable.call_functionô  ss  € ð Œi×%Ò% d¤oÑ6Ô6ˆå#ØŒO˜T×<Ò<Ñ>Ô>ÀÀCñ
ô 
ð f	ð f	õ % SÑ)Ô)ˆGå˜3¥¤Ô 3Ñ4Ô4ñ$à”MÔ)­U¬XÔ-@Ô-HÐHÐHå% cÑ*Ô*ð 6ð ×1Ò1°"Ñ5Ô5Ð5ð ð Ý(ØMñô ð ð ð Ý'ØØ4Ø"Ý˜v™;œ;Ð/Ð/Ð/ñ	ô ð ð ‘�à*-¬,×*<Ò*<Ñ*>Ô*>ð #ð #Ñ&�J Ø×$Ò$Øœ	×9Ò9Ø"Ø œOØ&Ý#1µ*¸T¼[È*Ñ2UÔ2UÑ#VÔ#Vð	 :ñ ô ð ˜Øñ	ô 	ð 	ð Ÿ&š&™(œ(�C�CØðQf	ð f	ð f	ð f	ñ f	ô f	ð f	ð f	ðT ð >àÔ$Ð0Ø'*Ô'8�DÔ$õ
 ' r¨3°°fÑ=Ô=Ð=ð ”	×(Ò(Ñ*Ô*ð+à”N×-Ò-Ð.HÑIÔIð+ð ”NÐ&BÒBÐBå%Ø¨TÈðñ ô ð 6ð ×1Ò1°"Ñ5Ô5Ð5à2Ð2Ð2Ð2Ð2Ð2à$�}ØØ0˜"œ)Ô0Ø%Øœðõ +¨4°Ñ8Ô8ðð ð ðñ ô ðQf	ð f	ð f	ð f	ñ f	ô f	ð f	ð f	õb ˜c¥5¤8Ô#7Ñ8Ô8ð Fð œ�BÝ *¨4¬;¸	Ñ BÔ B�I�Iàœ�BÝ *¨4¬;¸Ñ EÔ E�IÝ˜"�eÔ.Ñ/Ô/ð WØœ�BÝ *¨9°jÑ AÔ A�IØ ˜6¥D¨¡J¤JÑ.�D�Då! "¥eÔ&8Ñ9Ô9ð WÝ,Ð-UÍ4ÐPRÉ8Ì8Ð-UÐ-UÑVÔVÐVØ×5Ò5ÝÔ2°2¸iÐHÑHÔHØØØ.2ð	 6ñ ô ðCf	ð f	ð f	ð f	ñ f	ô f	ð f	ð f	ð f	ð f	ð f	ð f	øøøð f	ð f	ð f	ð f	ð f	ð f	s!   Á	D<M1ÆCM1É"DM1Í1M5Í8M5Úkeyr0   c                 ó’  — ddl m} ddlm} |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÷|                     ¦   «         r.t#          |                     ¦   «         t&          t(          f¦  «        st+          dd| › d|› �d|› d�d	g¬
¦  «         |j
        j        }t#          |t.          j        ¦  «        st3          dt          |¦  «        › �¦  «        ‚t5          t5          | j        d¦  «        d¦  «        }|                     t;          j        ||¬¦  «        | |gi d¬¦  «        S t#          ||¦  «        �rZ|j        j        �r8g }	tA          tC          tE          |¦  «        ¦  «        ¦  «        |                     ¦   «                  }
tG          ||                     ¦   «                  ¦  «        D ]_\  }}|
|         }tI          tK          | j        |¦  «        ¦  «        }|	 &                    |j         '                    |||¬¦  «        ¦  «         Œ`||                     ¦   «                  }|j         '                    || › d�tI          tK          | j        |                     ¦   «         ¦  «        ¦  «        ¬¦  «        }|S |  (                    |¦  «         d}t#          ||¦  «        r| )                    |j        ¦  «        }nB|                     ¦   «         r|                     ¦   «         }nt+          dd| › d|› �dg ¬
¦  «         ||         }|j         '                    || j        |tI          tK          | j        |¦  «        ¦  «        ¬¦  «        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__rx   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¨   ri   rX   r¼   r½   r%  rÀ   ÚParameterDictrÁ   rÂ   rQ   Úis_python_constantrR   Úas_python_constantÚstrÚintr   rx   r}   rç   r˜   r   rj   r  r   rü   ÚexportrU   Úranger  rÃ   r   r   r¿   r¾   rÕ   Úevaluate_expr)r�   r8   r!  r#  r$  ÚmoduleÚbuiltin_supportedr  ÚsrcrÅ   r÷   rÇ   rµ   rM   Ú
new_moduleÚnew_module_variableÚ	key_values                    rH   Úmp_subscript_implz"NNModuleVariable.mp_subscript_impld  s÷  € ð 	)Ð(Ð(Ð(Ð(Ð(Ø+Ð+Ð+Ð+Ð+Ð+à”×(Ò(¨¬Ñ9Ô9ˆõ ŒHÔÔ+ÝŒHÔÔ+ÝŒHÔ"Ô.ÝŒHÔ"Ô.ÝŒHÔÔ+ð
Ðõ �‰<Œ<Ô#Ð+<Ð<Ð<à×&Ò&Ñ(Ô(ð
å˜s×5Ò5Ñ7Ô7½#½s¸ÑDÔDð
õ ØTØ>°$Ð>Ð>¸Ð>Ð>ð!qØ=Cð!qð !qð !qàVÐWðñ ô ð ð Ô#Ô,ˆBå˜b¥%Ô"4Ñ5Ô5ð OÝ$Ð%MÅ4ÈÁ8Ä8Ð%MÐ%MÑNÔNÐNå�Z¨¬°]ÑCÔCÀZÑPÔPˆCØ×1Ò1ÝÔ.¨r¸#Ð>Ñ>Ô>Ø�s�ØØ*.ð	 2ñ ô ð õ �c˜=Ñ)Ô)ñ 	2ð ŒyÔñ 2Ø�Ý�E¥# f¡+¤+Ñ.Ô.Ñ/Ô/°×0FÒ0FÑ0HÔ0HÔI�Ý#,¨V°C×4JÒ4JÑ4LÔ4LÔ-MÑ#NÔ#Nð 	ð 	‘K�C˜Ø˜Sœ	�AÝ(­°t´{ÀAÑ)FÔ)FÑGÔG�CØ—M’MØœ	×9Ò9Ø"ØØ#&ð :ñ ô ñô ð ð ð $ C×$:Ò$:Ñ$<Ô$<Ô=�
Ø&(¤i×&GÒ&GØØÐ0Ð0Ð0Ý)Ý% d¤k°3×3IÒ3IÑ3KÔ3KÑLÔLñô ð 'Hñ 'ô 'Ð#ð +Ð*ð ×-Ò-¨bÑ1Ô1Ð1àˆ	Ý�c˜?Ñ+Ô+ð 	Ø×)Ò)¨"¬)Ñ4Ô4ˆIˆIØ×#Ò#Ñ%Ô%ð 		Ø×.Ò.Ñ0Ô0ˆIˆIåØHØ:¨dÐ:Ð:°SÐ:Ð:ð5àðñ ô ð ð ˜	Ô"ˆØŒy×0Ò0ØØŒOØÝ!¥-°´¸YÑ"GÔ"GÑHÔHð	 1ñ 
ô 
ð 	
rJ   c                 óf   — ddl m}  ||                      |¦  «        t          ¦   «         ¬¦  «        S )Nr-   )ÚListIteratorVariable©Úmutation_type)Ú r8  rÈ   r/   )r�   r8   r8  s      rH   Útp_iter_implzNNModuleVariable.tp_iter_implÆ  sH   € Ø*Ð*Ð*Ð*Ð*Ð*à#Ð#Ø×$Ò$ RÑ(Ô(Õ8HÑ8JÔ8Jð
ñ 
ô 
ð 	
rJ   Fr­   c                 ó²  •‡ ‡‡‡‡‡‡‡‡‡‡— ddl mŠmŠ ddlm} ‰ j        Š‰j                             ‰¦  «        Šdt          dt          fˆˆˆˆ ˆfd„}‰dv r‰  
                    ‰‰‰¦  «        S ‰dk    rLt          ‰ j        ‰                      ¦   «         ‰‰¦  «        5   |‰¦  «        cd d d ¦  «         S # 1 swxY w Y   ‰d	k    r@t          j        t          j        ‰j        j        ¦  «        ¦  «        r |j        d
¦  «        S ‰dk    rò‰d                              ¦   «         st+          ‰d‰› d‰› d�¦  «         t-          ‰d         ‰¦  «        st+          ‰d‰› d‰› d�¦  «         ‰d         j        ‰d         j                 }t-          |t2          ¦  «        r|S |j        Š‰j                             ‰¦  «        }	‰j                             |	‰‰t7          t9          ‰ j        ‰¦  «        ¦  «        ¬¦  «        S |r5t=          ‰‰¦  «        }
‰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        j&         '                    tQ          ‰ j        d ¦  «        ¦  «         ‰s‰r2tS          ‰‰d!tU          ‰¦  «        › d"tU          ‰¦  «        › d#�¦  «         g }‰ +                    ¦   «         D ]$\  Š}	| ,                     |‰|	¦  «        ¦  «         Œ% ‰|t[          ¦   «         ¬$¦  «        S ‰d%k    r‰‰j        j&         '                    tQ          ‰ j        d&¦  «        ¦  «         g } ‰j.        d<i  |d'd(¦  «        ¤ŽD ]$\  Š}| ,                     |‰|¦  «        ¦  «         Œ% ‰|t[          ¦   «         ¬$¦  «        S ‰d)k    rŠ‰j        j&         '                    tQ          ‰ j        d*¦  «        ¦  «         g } ‰j/        d<i  |d'd(d+¦  «        ¤ŽD ]$\  Š}| ,                     |‰|¦  «        ¦  «         Œ% ‰|t[          ¦   «         ¬$¦  «        S ‰d,k    rŠ‰j        j&         '                    tQ          ‰ j        d ¦  «        ¦  «         g } ‰j0        d<i  |d-d'd+¦  «        ¤ŽD ]$\  Š}	| ,                     |‰|	¦  «        ¦  «         Œ% ‰|t[          ¦   «         ¬$¦  «        S ‰d.k    r…‰j        j&         '                    tQ          ‰ j        d ¦  «        ¦  «         ‰s‰r2tS          ‰‰d!tU          ‰¦  «        › d"tU          ‰¦  «        › d#�¦  «          |‰ +                    ¦   «         ¦  «        S ‰d/k    rO‰j        j&         '                    tQ          ‰ j        d ¦  «        ¦  «          |‰ 0                    ¦   «         ¦  «        S ‰d0k    rQ‰j        j&         '                    tQ          ‰ j        d&¦  «        ¦  «          | ‰j.        d<i  |d(¦  «        ¤Ž¦  «        S ‰d1k    rQ‰j        j&         '                    tQ          ‰ j        d*¦  «        ¦  «          | ‰j/        d<i  |d(¦  «        ¤Ž¦  «        S ‰d2k    r~‰s‰r2tS          ‰‰d!tU          ‰¦  «        › d"tU          ‰¦  «        › d#�¦  «         g }‰D ]*}| ,                    t          j1        ‰|¦  «        ¦  «         Œ+ ‰|t[          ¦   «         ¬$¦  «        S ‰d3k    rS‰s‰r2tS          ‰‰d!tU          ‰¦  «        › d"tU          ‰¦  «        › d#�¦  «          |‰                     ¦   «         ¦  «        S ‰dk    rŠ‰s‰r2tS          ‰‰d!tU          ‰¦  «        › d"tU          ‰¦  «        › d#�¦  «         g }‰                     ¦   «         D ]$\  Š}	| ,                     |‰|	¦  «        ¦  «         Œ% ‰|t[          ¦   «         ¬$¦  «        S ‰d4k    r‰  2                    ‰¦  «        S ‰d5k    r€t-          ‰tf          j4        j5        tf          j4        j6        f¦  «        rP‰rN‰d                              ¦   «         r4t          j1        ‰‰d          7                    ¦   «         ‰j8        v ¦  «        S ‰d6k    s^t-          ‰tf          j4        j9        j:        j;        ¦  «        r‰d7k    s/t-          ‰tf          j4        j9        j:        j<        ¦  «        rz‰d8k    rtt=          ‰‰¦  «        j=        }
tQ          tQ          ‰ j        ‰¦  «        d9¦  «        }‰ >                    t          j@        |
|¬¦  «        ‰ gtƒ          ‰¦  «        z   ‰¦  «        S ‰‰j        jB        v rht‡          ‰j        jB        ‰         ¦  «        rIt‰          d:„ t‹          jF        ‰‰ G                    ¦   «         ¦  «        D ¦   «         ¦  «        r |‰¦  «        S t‘          ¦   «          I                    ‰‰tƒ          ‰¦  «        ‰¦  «        S )=Nr-   )r8  ÚTupleVariabler5   rm   r<   c           	      óþ   •— ‰	j                              d‰j        di ¦  «        }t          |j        ‰¦  «         t          ‰‰¦  «        \  }}ddlm}  |‰	‰	j                              d| |g|¢R |¬¦  «        ¬¦  «        S )NÚget_attrrC   r-   r
  Úcall_method)r:   r;   r  )r§   r  ri   r*   r[   r(   r  r  )
rm   Ú	mod_proxyrd   re   r  r:   r;   r0  r�   r8   s
        €€€€€rH   Úgeneric_call_method_helperz@NNModuleVariable.call_method.<locals>.generic_call_method_helperÛ  s±   ø€ ð œ	×.Ò.ØØ”ØØñ	ô ˆIõ ˜iœn¨fÑ5Ô5Ð5å'8¸¸vÑ'FÔ'FÑ$ˆJ˜à.Ð.Ð.Ð.Ð.Ð.à �=ØØ”i×,Ò,Ø!ØØ#Ð1 jÐ1Ð1Ø'ð	 -ñ ô ðñ ô ð rJ   ©r  Ú_wrapped_call_implrw   Ú_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        ‰ ‰                     ¦   «         ¦  «        D ¦   «         ¦  «        s(t	          dd‰› d‰› d‰ › d‰› �d‰› d‰› d�g ¬¦  «         d S d S )	Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rB   )r)  ©rE   r?   s     rH   rI   zUNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const.<locals>.<genexpr>$  s?   è è € ð ð Ø+,�×$Ò$Ñ&Ô&ðð ð ð ð ð rJ   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;   r0  rm   r�   s   €€€€€rH   Úassert_all_args_kwargs_constzBNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const#  sÅ   ø€ Ýð ð Ý09´ÀÀfÇmÂmÁoÄoÑ0VÔ0Vðñ ô ñ ô ð 	õ ØDØI¨DÐIÐI°4ÐIÐI¸$ÐIÐIÀÐIÐIð!^Ø#ð!^ð !^Ø8>ð!^ð !^ð !^àðñ ô ð ð ð ð	ð 	rJ   Únamesc                  ó  •‡—  ‰¦   «          t          ‰‰¦  «        } t          j        |¦  «        j        d„ ‰D ¦   «         i d„ ‰                     ¦   «         D ¦   «         ¤ŽŠ‰                     ¦   «          ‰j        Šˆfd„| D ¦   «         S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS rC   ©r*  rL  s     rH   r^   zDNNModuleVariable.call_method.<locals>.get_kwargs.<locals>.<listcomp>3  s$   € Ð8Ð8Ð8¨a�1×'Ò'Ñ)Ô)Ð8Ð8Ð8rJ   c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS rC   rV  )rE   rM   rN   s      rH   rO   zDNNModuleVariable.call_method.<locals>.get_kwargs.<locals>.<dictcomp>4  s*   € ÐHÐHÐH±°°A�1�a×*Ò*Ñ,Ô,ÐHÐHÐHrJ   c                 ó"   •— i | ]}|‰|         “ŒS rC   rC   )rE   rM   Ú
bound_argss     €rH   rO   zDNNModuleVariable.call_method.<locals>.get_kwargs.<locals>.<dictcomp>8  s   ø€ Ð4Ð4Ð4¨�A�z !”}Ð4Ð4Ð4rJ   )rÎ   râ   Ú	signatureÚbindrT   Úapply_defaultsÚ	arguments)rS  r  rY  r:   rR  r;   r0  rm   s     @€€€€€rH   Ú
get_kwargsz0NNModuleVariable.call_method.<locals>.get_kwargs/  s¦   øø€ Ø(Ð(Ñ*Ô*Ð*Ý˜ Ñ&Ô&ˆBØ3�Ô*¨2Ñ.Ô.Ô3Ø8Ð8°4Ð8Ñ8Ô8ðàHÐH¸¿º¹¼ÐHÑHÔHðð ˆJð ×%Ò%Ñ'Ô'Ð'Ø#Ô-ˆJØ4Ð4Ð4Ð4¨eÐ4Ñ4Ô4Ð4rJ   rT   zvariables.ListIteratorVariablec                 óä   •— g }| D ]R\  }}|                      ‰j                             |‰|t           ‰‰j        |¦  «        ¦  «        ¬¦  «        ¦  «         ŒS ‰|t          ¦   «         ¬¦  «        S )Nr»   r9  )r¿   r§   r¾   r   rj   r/   )	rT   Únamed_childrenrm   rµ   r8  Ú
gen_sourcer!  r�   r8   s	       €€€€€rH   Úwrap_valuesz1NNModuleVariable.call_method.<locals>.wrap_values:  sž   ø€ ð 57ˆNØ %ð ð ‘��fØ×%Ò%Ø”I×5Ò5ØØØÝ-¨j¨j¸¼ÀdÑ.KÔ.KÑLÔLð	 6ñ ô ñô ð ð ð (Ð'ØÕ.>Ñ.@Ô.@ðñ ô ð rJ   Úobjzvariables.TupleVariablec                 ó´   •—  ‰t          j        ‰| ¦  «        ‰j                             |‰| t	           ‰‰j        | ¦  «        ¦  «        ¬¦  «        g¦  «        S )Nr»   )r0   r±   r§   r¾   r   rj   )rm   rc  r>  ra  r!  r�   r8   s     €€€€€rH   Únamed_embedz1NNModuleVariable.call_method.<locals>.named_embedK  sh   ø€ Ø �=å#Ô)¨"¨dÑ3Ô3Ø”I×5Ò5ØØØÝ-¨j¨j¸¼ÀdÑ.KÔ.KÑLÔLð	 6ñ ô ðñ
ô 
ð 
rJ   rj   c                 óâ   — |                      d¦  «        }|d         dk    r| S t          |¦  «        dk    r8|                     d¦  «        }t          | |¦  «        } t          |¦  «        dk    °8| S )Nú.r   r;  )Úsplitr  r  r   )rj   rm   Ú
name_splitr?   s       rH   ra  z0NNModuleVariable.call_method.<locals>.gen_sourceX  sp   € ØŸš C™œˆJØ˜!Œ} Ò"Ð"Ø�Ý�j‘/”/ AÒ%Ð%Ø—N’N 1Ñ%Ô%�Ý# F¨AÑ.Ô.�õ �j‘/”/ AÒ%Ð%ð ˆMrJ   r`  rí   z0 args and 0 kwargsz
 args and r  r9  Únamed_parametersrî   ÚprefixÚrecurseÚnamed_buffersrï   Úremove_duplicateÚnamed_modulesÚmemoÚchildrenÚmodulesÚ
parametersÚbuffersr÷   rQ  Ú__iter__Ú__contains__Ú_get_abs_string_indexÚ_conv_forwardÚ_output_paddingrx   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rB   )Ú	is_tensorrL  s     rH   rI   z/NNModuleVariable.call_method.<locals>.<genexpr>ä  s*   è è € ÐRÐR a�A—K’K‘M”MÐRÐRÐRÐRÐRÐRrJ   )r<   NrC   )Jr;  r8  r>  r­   r6   ri   r§   r¨   r+  r0   rå   ru   r›   r   Úis_torch_inline_allowedrâ   Úgetfilerr   rF  r’   r)  r   rR   rT   rŠ   rú   r¾   r   r   rj   rÎ   rù   r1   rS   r   r   rV   r   Úguard_on_key_orderÚaddr   r)   r  r`  r¿   r/   rj  rm  ro  r±   r<  rX   r¼   r½   r(  r*  rí   rr  ÚconvÚ_ConvNdÚ_ConvTransposeNdrx   r  r   rü   rU   r{   r|   rN  rO  rP  rQ  r�   rA  )r�   r8   rm   r:   r;   r­   r6   rC  Úmod_varrµ   r  r^  rb  re  r`  rj  Úparamrm  ÚbufferÚnamed_modules_listrÅ   ÚtmpÚitems_resultr   r8  r>  rR  ra  r!  r0  rr   s   `````                   @@@@@@€rH   rA  zNNModuleVariable.call_methodÍ  sê  øøøøøøøøøøøø€ ð 	:Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø.Ð.Ð.Ð.Ð.Ð.àŒoˆØ”×(Ò(¨Ñ-Ô-ˆð	­Sð 	µ_ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð2 Ð7Ð7Ð7ð ×%Ò% b¨$°Ñ7Ô7Ð7Ø�YÒÐõ (Ø” ×!@Ò!@Ñ!BÔ!BÀBÈñô ð 8ð 8ð 2Ð1°$Ñ7Ô7ð8ð 8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð
 Ð%Ò%Ð%­+Ô*MÝŒO˜FÔ,Ô=Ñ>Ô>ñ+
ô +
Ð%ð +Ð#Ô*¨4Ñ0Ô0Ð0àÐ%Ò%Ð%Ø˜”7×-Ò-Ñ/Ô/ð Ý ØØe VÐeÐe¸DÐeÐeÐeñô ð õ ˜d 1œg }Ñ5Ô5ð Ý ØØe VÐeÐe¸DÐeÐeÐeñô ð ð ˜1”g”m D¨¤G¤MÔ2ˆGÝ˜'Õ#@ÑAÔAð Ø�ØÔ$ˆCØ”Y×,Ò,¨SÑ1Ô1ˆFØ”9×4Ò4ØØØÝ%¥m°D´KÀÑ&EÔ&EÑFÔFð	 5ñ ô ð ð ð 	LÝ˜ Ñ&Ô&ˆBØÔ&Ô/Ð?Ð?°$Ð?Ð?Ð?ˆDÝ/°°B¸¸dÀFÑKÔKÐKð
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð		5�sð 		5¥t­Cµ¨H¤~ð 		5ð 		5ð 		5ð 		5ð 		5ð 		5ð 		5ð 		5ð 		5ð 		5ð	Ý�E¥#¥s (œOÔ,ð	à-ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð"	�cð 	­ð 	Ð0Ið 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	�vð 	­Sð 	µVð 	ð 	ð 	ð 	ð Ð#Ò#Ð#ØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØð �vð Ý#ØØØ)Ý˜4‘y”yÐ@Ð@­C°©K¬KÐ@Ð@Ð@ñ	ô ð ð 57ˆNØ &× 5Ò 5Ñ 7Ô 7ð Að A‘��fØ×%Ò% k k°$¸Ñ&?Ô&?Ñ@Ô@Ð@Ð@Ø'Ð'ØÕ.>Ñ.@Ô.@ðñ ô ð ð Ð'Ò'Ð'ØŒIÔ(×,Ò,­Z¸¼À]Ñ-SÔ-SÑTÔTÐTØ68ÐØ6˜vÔ6ð  ð  Ø�*˜X yÑ1Ô1ð ð  ð Bð B‘��eð !×'Ò'¨¨°D¸%Ñ(@Ô(@ÑAÔAÐAÐAØ'Ð'Ø Õ0@Ñ0BÔ0Bðñ ô ð ð �_Ò$Ð$ØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØ35ˆMØ 4 Ô 4ð !ð !Ø�*˜X yÐ2DÑEÔEð!ð !ð @ð @‘��fð ×$Ò$ [ [°°vÑ%>Ô%>Ñ?Ô?Ð?Ð?Ø'Ð'¨ÕEUÑEWÔEWÐXÑXÔXÐXØ�_Ò$Ð$ØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØ8:ÐØ 4 Ô 4ð !ð !Ø�*˜V XÐ/AÑBÔBð!ð !ð Eð E‘��fð #×)Ò)¨+¨+°d¸FÑ*CÔ*CÑDÔDÐDÐDØ'Ð'Ø"Õ2BÑ2DÔ2Dðñ ô ð ð �ZÒÐØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØð �vð Ý#ØØØ)Ý˜4‘y”yÐ@Ð@­C°©K¬KÐ@Ð@Ð@ñ	ô ð ð �;˜v×4Ò4Ñ6Ô6Ñ7Ô7Ð7Ø�YÒÐØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØ�;˜v×3Ò3Ñ5Ô5Ñ6Ô6Ð6Ø�\Ò!Ð!ØŒIÔ(×,Ò,­Z¸¼À]Ñ-SÔ-SÑTÔTÐTØ�;Ð6˜vÔ6ÐOÐO¸¸ÀIÑ9NÔ9NÐOÐOÑPÔPÐPØ�YÒÐØŒIÔ(×,Ò,­Z¸¼ÀZÑ-PÔ-PÑQÔQÐQØ�;Ð3˜vÔ3ÐLÐL°j°jÀÑ6KÔ6KÐLÐLÑMÔMÐMØ�VŠ^ˆ^Øð �vð Ý#ØØØ)Ý˜4‘y”yÐ@Ð@­C°©K¬KÐ@Ð@Ð@ñ	ô ð ð ˆFàð >ð >�Ø—’�oÔ3°B¸Ñ<Ô<Ñ=Ô=Ð=Ð=Ø'Ð'¨Õ>NÑ>PÔ>PÐQÑQÔQÐQØ�XÒÐØð �vð Ý#ØØØ)Ý˜4‘y”yÐ@Ð@­C°©K¬KÐ@Ð@Ð@ñ	ô ð ð �;˜vŸ|š|™~œ~Ñ.Ô.Ð.Ø�WŠ_ˆ_Øð �vð Ý#ØØØ)Ý˜4‘y”yÐ@Ð@­C°©K¬KÐ@Ð@Ð@ñ	ô ð ð 35ˆLØ &§¢¡¤ð ?ð ?‘��fØ×#Ò# K K°°fÑ$=Ô$=Ñ>Ô>Ð>Ð>Ø'Ð'¨ÕDTÑDVÔDVÐWÑWÔWÐWØ�ZÒÐØ×$Ò$ RÑ(Ô(Ð(à�NÒ"Ð"Ý˜6¥E¤HÔ$7½¼Ô9OÐ#PÑQÔQð #àð #ð �Q”×*Ò*Ñ,Ô,ð #õ
 #Ô(Ø�D˜”G×.Ò.Ñ0Ô0°F´OÐCñô ð ð Ð+Ò+Ð+å˜6¥5¤8Ô#3Ô#8Ô#@ÑAÔAð ,ð ˜OÒ+Ð+õ ˜6¥5¤8Ô#3Ô#8Ô#IÑJÔJð ,ð Ð-Ò-Ð-õ ˜ Ñ&Ô&Ô/ˆBÝ"¥:¨d¬k¸4Ñ#@Ô#@À*ÑMÔMˆIØ×1Ò1ÝÔ.¨r¸)ÐDÑDÔDØ��˜d™œÑ#Øñô ð ð �FÔ$Ô-Ð-Ð-Ý˜Ô)Ô2°4Ô8Ñ9Ô9ð .åÐRÐR­9¬?¸4ÀÇÂÁÄÑ+QÔ+QÐRÑRÔRÑRÔRð .ð .Ð-¨dÑ3Ô3Ð3å‘7”7×&Ò& r¨4µ°d±´¸VÑDÔDÐDs   ÂB6Â6B:Â=B:c                 ó„   — |j                              | j        ¦  «        }t          j        |t          |¦  «        ¦  «        S )z<Sequence length for container modules (e.g., nn.Sequential).)r§   r¨   ri   r0   r±   r  )r�   r8   r0  s      rH   Ú	sq_lengthzNNModuleVariable.sq_lengthê  s2   € à”×(Ò(¨¬Ñ9Ô9ˆÝÔ$ R­¨V©¬Ñ5Ô5Ð5rJ   )r8   r4   r<   r7   )r8   r4   r<   N)r8   r4   r!  r0   r<   r0   )F)r8   r4   r<   r0   )'rù   r  Ú__qualname__r0   Ú_nonvar_fieldsrQ   r+  rX   r¼   ÚModuler   rŽ   r”   r   r›   r    r¤   r,  r©   rô   r«   r¯   r´   r¹   rU   rÈ   rË   r®   rÏ   rÕ   rë   r   rS   rå   r6  r<  rA  rŠ  Ú__classcell__©rr   s   @rH   rˆ   rˆ   »   s7  ø€ € € € € àØØØ ð	ð
 
Ô	'ð€Nð2Øð2Ø-0ð2Ø9>¼¼ð2ØTWð2à	ð2ð 2ð 2ð 2ð 2ð 2ðð ð ð ð
¨Fð ð ð ð ð-°ð -¸Dð -ð -ð -ð -ð ˜Tð  ð  ð  ð  ð<Ð4ð <¸¸t¹ð <ð <ð <ð <ð¨fð ð ð ð ð2Ð7ð 2¸Oð 2ð 2ð 2ð 2ð4Ð7ð 4¸Oð 4ð 4ð 4ð 4ðà'ðð ðð ””ð	ð
 ðð ðð 
ðð ð ð ð!Ø-ð!à	ˆoÔ	ð!ð !ð !ð !ðF1Ø-ð1Ø58ð1à	ð1ð 1ð 1ð 1ð/Ð9ð /¸dð /ð /ð /ð /ð*ð *ð *ð *ð=
àŒhŒoð=
ð (ð=
ð ð	=
ð
 ð=
ð 
˜4Ñ	ð=
ð =
ð =
ð =
ð~u-Ø-ðu-Ø58ðu-à	ðu-ð u-ð u-ð u-ð u-ð u-ðnnà'ðnð �?Ô#ðnð �S˜/Ð)Ô*ð	nð
 
ðnð nð nð nð``
à'ð`
ð ð`
ð 
ð	`
ð `
ð `
ð `
ðD
Ð:ð 
¸ð 
ð 
ð 
ð 
ð ð[Eð [Eà'ð[Eð ð[Eð �?Ô#ð	[Eð
 �S˜/Ð)Ô*ð[Eð ð[Eð 
ð[Eð [Eð [Eð [Eð [Eð [Eðz6ð 6ð 6ð 6ð 6ð 6ð 6ð 6rJ   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          ¦   «         j        dd|i|¤Ž d| _        | j        | _        d S )Nr‘  r  rŠ   FrC   )rÎ   rQ   r�   rŽ   r’  rj   r‹   )r�   rŠ   r;   Úlazy_value_to_becomerr   s       €rH   rŽ   z&UnspecializedNNModuleVariable.__init__   s†   ø€ Ø˜6Ð!Ð!Ý#*¨6°,Ô+?ÀÐRVÑ#WÔ#WÐ Ý�E‰{Œ{Ð2Ð2Ð2õ
 (,¨E¡{¤{��|Ñ$à�‰ŒÔÐ/Ð/˜uÐ/¨Ð/Ð/Ð/Ø %ˆÔð '+¤kˆÔ#Ð#Ð#rJ   Úattr_sourcec                 ó   — |S rB   rC   ©r�   r•  s     rH   Ú_wrap_sourcez*UnspecializedNNModuleVariable._wrap_source  ó   € àÐrJ   c                 óD   — | j         p| j        }|st          d¦  «        ‚|S r–   r—   r™   s     rH   r›   z8UnspecializedNNModuleVariable.get_nn_module_stack_source  rœ   rJ   rj   c                 ó   — || _         d S rB   rž   rŸ   s     rH   r    z8UnspecializedNNModuleVariable.set_nn_module_stack_source  r¡   rJ   c                  óî   ‡ — t           j        j        j        t           j        j        j        t           j        j        j        hŠ ˆ fd„t           j        j        j                             ¦   «         D ¦   «         S )Nc                 ó`   •— h | ]*}t          |d ¦  «        r|‰v¯t          |j        ¦  «        ’Œ+S )Ú__code__)ra   r¦   rž  )rE   r?   Ú	supporteds     €rH   ú	<setcomp>zFUnspecializedNNModuleVariable._nn_module_method_ids.<locals>.<setcomp>*  sJ   ø€ ð 
ð 
ð 
àÝ�q˜*Ñ%Ô%ð
ð +,°9Ð*<Ð*<õ ˆqŒz‰NŒNà*<Ð*<Ð*<rJ   )rX   r¼   r�  Ú__setattr__rŽ   Ú__delattr__r{   rQ  )rŸ  s   @rH   Ú_nn_module_method_idsz3UnspecializedNNModuleVariable._nn_module_method_ids!  sh   ø€ õ
 ŒHŒOÔ'ÝŒHŒOÔ$ÝŒHŒOÔ'ð
ˆ	ð

ð 
ð 
ð 
å”X”_Ô-×4Ò4Ñ6Ô6ð
ñ 
ô 
ð 	
rJ   r8   r4   c                 ó´  •— 	 t          j        | j        d¦  «        }n# t          $ r}t          |‚d }~ww xY w|t
          j        j        j        t
          j        j	        j        t
          j        j
        j        fv r>|                     t          j        ||¦  «        | gi ¦  «                             |¦  «        S t          ¦   «                              |¦  «        S )Nru  )râ   rã   r‘  rc   ÚNotImplementedErrorrX   r¼   rÀ   ru  rÁ   rÂ   r  r0   r±   rÈ   r�   )r�   r8   r  Úerr   s       €rH   rÈ   z1UnspecializedNNModuleVariable.unpack_var_sequence0  sÛ   ø€ ð	-ÝÔ'¨¬¸ÑDÔDˆBˆBøÝð 	-ð 	-ð 	-Ý%¨1Ð,øøøøð	-øøøð ÝŒHÔÔ(ÝŒHÔ"Ô+ÝŒHÔÔ(ð
ð 
ð 
ð ×1Ò1ÝÔ% b¨"Ñ-Ô-àðð ñô ÷ "Ò! "Ñ%Ô%ð&õ ‰wŒw×*Ò*¨2Ñ.Ô.Ð.s   ƒ ž
5¨0°5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¯‰                      ‰d¦  «        s™t'          j        |d¦  «        }t          |t          j        ¦  «        rj‰j        Šdt.          dt0          dt2          fˆfd„Št5          ˆˆ fd„d	D ¦   «         ¦  «        pt5          ˆˆfd
„dD ¦   «         ¦  «        }|sd}‰ j        j        }‰ j        r‰                      ‰|¦  «        }	nd }	t=          ‰ j        |¦  «         ‰ j        r>t?          t1          tA          |¦  «        ¦  «        ‰  !                    ¦   «         ‰|¦  «        ntE          ¦   «         }
|
5  t          |t          j        t          j#        j$        f¦  «        sLt/          j%        ‰||	d¬¦  «        }| &                    ‰‰ gtO          |¦  «        z   |¦  «        cd d d ¦  «         S tQ          j)        ||	¬¦  «         &                    ‰‰ gtO          |¦  «        z   |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NÚ__call__r  rw   rc  rz   r<   c                 ó¤   •— |                       ‰|¦  «        }t          |d¦  «        r|                     ¦   «         n|}|                     ¦   «         S )NÚrealize)r   ra   rª  r  )rc  rz   Úvtr8   s      €rH   Ú_hooks_dict_lenzDUnspecializedNNModuleVariable.call_function.<locals>._hooks_dict_lenm  sC   ø€ ØŸš¨¨TÑ2Ô2�BÝ)0°°YÑ)?Ô)?ÐG˜Ÿš™œ˜ÀR�BØŸ6š6™8œ8�OrJ   c              3   ó0   •K  — | ]} ‰‰|¦  «        V — Œd S rB   rC   )rE   rz   r¬  r�   s     €€rH   rI   z>UnspecializedNNModuleVariable.call_function.<locals>.<genexpr>r  sC   øè è € ð 
 ð 
 àð $�O D¨$Ñ/Ô/ð
 ð 
 ð 
 ð 
 ð 
 ð 
 rJ   )Ú_backward_hooksÚ_backward_pre_hooksÚ_forward_hooksÚ_forward_hooks_with_kwargsÚ_forward_pre_hooksÚ_forward_pre_hooks_with_kwargsc              3   ó0   •K  — | ]} ‰‰|¦  «        V — Œd S rB   rC   )rE   rz   r¬  Ú
globals_vts     €€rH   rI   z>UnspecializedNNModuleVariable.call_function.<locals>.<genexpr>|  sC   øè è € ð ð àð $�O J°Ñ5Ô5ðð ð ð ð ð rJ   )Ú_global_backward_pre_hooksÚ_global_backward_hooksÚ_global_forward_hooksÚ_global_forward_pre_hooksT©rj   rª  r»   )*rŠ   r!   r  r‘  rh   rR   rX   rY   r  rÎ   r%   r¨  r}   r~   r  rx   r+   r,   Úhas_key_in_generic_dictrâ   rã   rç   Únn_modules_globals_vtr0   r+  r,  Úanyrw   rj   Úget_source_by_walking_mror†   ru   r¦   r›   r   ÚjitÚScriptFunctionr±   rå   rU   r   rü   )r�   r8   r:   r;   r9   rm   r  Úforward_methodÚ	has_hooksrj   ÚctxÚfn_vtr¬  rµ  s   ``          @@rH   rå   z+UnspecializedNNModuleVariable.call_functionJ  s¨  øøøø€ ð Œjˆå˜#ÑÔð 	:ØÔ Ð,Ø"%Ô"3�”Ý" 2 s¨D°&Ñ9Ô9Ð9å˜#�uœxÔ3Ñ4Ô4ð 	0ØˆDÝ˜œ¨$Ñ/Ô/ˆBˆBàˆDÝ˜œ¨$Ñ/Ô/ˆBõ
 �3”<¥Ô!1Ñ2Ô2ð(	1å�s”~¥uÔ'7Ñ8Ô8ð(	1ð ”Ô%Õ)AÐAÐAØ”Ô'Õ+HÐHÐHð ×0Ò0°°YÑ?Ô?ð Iõ
 %Ô3°C¸ÑCÔCˆNÝ˜.­%Ô*<Ñ=Ô=ð 1ØÔ5�
ð$­ð $Åð $Íð $ð $ð $ð $ð $ð $õ
  ð 
 ð 
 ð 
 ð 
 ð 
 ð!ð
 ñ 
 ô 
 ñ 
ô 
ð õ ð ð ð ð ð ð!ðñ ô ñ ô ð ð( !ð 1Ø$�DØœÔ0�BàŒ;ð 	Ø×3Ò3°B¸Ñ=Ô=ˆFˆFàˆFå.¨t¬{¸CÑ@Ô@Ð@ð Œ{ðÕ"Ý•B�s‘G”G‘”Ø×/Ò/Ñ1Ô1ØØñ	ô ð õ ‘”ð 	ð ð 	ð 	Ý˜b¥5Ô#5µu´yÔ7OÐ"PÑQÔQð 
Ý'Ô-¨b°"¸VÈTÐRÑRÔR�Ø×*Ò*¨2°¨v½¸T¹
¼
Ñ/BÀFÑKÔKð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ !Ô5°bÀÐHÑHÔH×VÒVØ˜˜¥ d¡¤Ñ+¨Vñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   È+A+K+Ê#;K+Ë+K/Ë2K/rm   c                 ó´  •— |dv rut          | j        |¦  «        }| j        r|                      ||¦  «        }nd }t	          j        |||d¬¦  «        }|                     || gt          |¦  «        z   |¦  «        S |                      ||¦  «        �s—	 t          j
        t          | j        ¦  «        |¦  «        }n# t          $ r d }Y nw xY wt          |t          ¦  «        rXt!          |                      ||¦  «        d¦  «        }t	          j        ||j        |d¬¦  «        }|                     |||¦  «        S t%          |d¦  «        r_t'          |j        ¦  «        |                      ¦   «         v r7t-          dd| › d|› d|› d|› �d	|› d
| j        › �dgt.          j        ¢¬¦  «         |dk    râd| j        j        v rÔ|d                              ¦   «         }	|d         }
|
                     ¦   «         r%|
                     ¦   «         t:          j        j        u s|	| j        j        d         v rd| _         n]|	| j        j        d         v rd| _         nAt          |
tB          j"        tB          j#        f¦  «        s|	| j        j        d         v rd| _         |t:          j        j$        j%        u r t          |d         tB          j&        ¦  «        s|t:          j        j$        j'        u rHt	          j        |t:          j        j$        j'        ¦  «        }|                     || |d         g|¦  «        S tQ          ¦   «          )                    ||t          |¦  «        |¦  «        S )NrD  Trº  rx   rž  z,UnspecializedNNModuleVariable missing methodrM  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‘  rj   r¾  r0   r±   rå   rU   r»  râ   rã   rQ   rŠ   rc   rR   rþ   r   rx   ra   r¦   rž  r£  r   r
   Ú	DIFFICULTr{   r*  r{  r¤   rX   r¼   Ú	Parameterr’  r   rˆ   rú   r�  r¡  ÚDeletedVariabler¢  r�   rA  )r�   r8   rm   r:   r;   r  rj   rÄ  ÚmethodÚ	attr_namerŠ   rr   s              €rH   rA  z)UnspecializedNNModuleVariable.call_method¨  sŠ  ø€ ð Ð7Ð7Ð7Ý˜œ¨$Ñ/Ô/ˆBØŒ{ð Ø×7Ò7¸¸DÑAÔA��à�å#Ô)¨"¨b¸ÈÐNÑNÔNˆEØ×&Ò& r¨D¨6µD¸±J´JÑ+>ÀÑGÔGÐGà×+Ò+¨B°Ñ5Ô5ñ I	HðÝ Ô/µ°T´ZÑ0@Ô0@À$ÑGÔG��øÝ!ð ð ð Ø���ðøøøõ ˜&¥,Ñ/Ô/ð =Ý#Ø×2Ò2°2°tÑ<Ô<¸jñô �õ (Ô-Ø˜œ°Àðñ ô �ð ×*Ò*¨2¨t°VÑ<Ô<Ð<õ ˜ 
Ñ+Ô+ðå�v”Ñ'Ô'¨4×+EÒ+EÑ+GÔ+GÐGÐGåØJØI¨DÐIÐI°4ÐIÐI¸$ÐIÐIÀÐIÐIØ jÈ$Ð jÐ jÐ^bÔ^hÐ jÐ jàZðå*Ô4ðð	ñ ô ð ð �}Ò$Ð$¨¸$¼*Ô:MÐ)MÐ)Mð ! œG×6Ò6Ñ8Ô8�	Ø˜Qœ�ð
 —O’OÑ%Ô%ð1Ø*/×*;Ò*;Ñ*=Ô*=ÅÄÔASÐ*SÐ*SØ $¤*Ô"5°mÔ"DÐDÐDà,0�DÔ)Ð)Ø $¤*Ô"5°jÔ"AÐAÐAà,0�DÔ)Ð)åØå%Ô6Ý%ÔCðñô ð1ð ! D¤JÔ$7¸
Ô$CÐCÐCð -1�DÔ)ð �%œ(œ/Ô5Ð5Ð5Ý˜t Aœw­	Ô(AÑBÔBð 6à�5œ8œ?Ô6Ð6Ð6õ (Ô-¨bµ%´(´/Ô2MÑNÔN�Ø×*Ò*¨2°°d¸1´g¨ÀÑGÔGÐGå‰wŒw×"Ò" 2 t­T°$©Z¬Z¸Ñ@Ô@Ð@s   Â'B; Â;C
Ã	C
ÚfieldÚname_vtc                 óÒ   — |                       ||¦  «        }t          |t          j        ¦  «        r|j        }t          |t          j        ¦  «        r|                     |¦  «        S d S rB   )r   rR   r   ÚUserDefinedDictVariableÚ_base_vtÚConstDictVariableÚmaybe_getitem_const)r�   r8   rË  rÌ  r‘   s        rH   Úgetattr_helperz,UnspecializedNNModuleVariable.getattr_helper  sd   € ð ×"Ò" 2 uÑ-Ô-ˆÝ�g�yÔ@ÑAÔAð 	'ØÔ&ˆGÝ�g�yÔ:Ñ;Ô;ð 	8Ø×.Ò.¨wÑ7Ô7Ð7ØˆtrJ   c           
      ó  •‡‡‡— |dv r¹‰j         j                             | |¦  «        s™t          | j        |¦  «        }t          |t          ¦  «        rot          |¦  «        dk    r\| j        rAt          | j        |¦  «        }t          |                     t          j        ¦  «        ¦  «         t          j        i ¦  «        S | j        �r|dv �r‰j         j                             | |¦  «        söt          | j        |¦  «        }t          | j        |¦  «        Št          ‰                     t          j        ¦  «        ¦  «         ‰j         j                             ‰¦  «         dt&          dt(          dt(          dt*          t,          t,          f         fˆˆfd„Št          ˆfd	„t/          |¦  «        D ¦   «         ¦  «        }t          j        |t3          |¦  «        ‰¬
¦  «        S t5          ¦   «                              ‰|¦  «        S )N)r®  r¯  r±  r°  r³  r²  r   )r³  r²  r±  r°  ÚirM   rN   r<   c                 ó¤   •— t          j        ‰|¦  «        }t          ‰| ¦  «        }t          ‰|¦  «        }t	          j        ||‰¬¦  «        }||fS )N)r8   )r0   r±   r   r   r2   r’   )	rÔ  rM   rN   r!  Ú
source_keyÚsource_valuerŠ   Úhooks_dict_sourcer8   s	          €€rH   Úbuild_key_valuezBUnspecializedNNModuleVariable.var_getattr.<locals>.build_key_value?  sZ   ø€ õ &Ô+¨B°Ñ2Ô2�õ 0Ð0AÀ1ÑEÔE�
Ý0Ð1BÀJÑOÔO�Ý+Ô2°1°lÀrÐJÑJÔJ�Ø˜E�zÐ!rJ   c              3   ó:   •K  — | ]\  }}} ‰|||¦  «        V — Œd S rB   rC   )rE   rÔ  rM   rN   rÙ  s       €rH   rI   z<UnspecializedNNModuleVariable.var_getattr.<locals>.<genexpr>L  sK   øè è € ð ð á�A�q˜!ð  �  1 aÑ(Ô(ðð ð ð ð ð rJ   r»   )r§   Úside_effectsÚhas_pending_mutation_of_attrrÎ   rŠ   rR   rS   r  rj   r   r   r   r   ÚEMPTY_NN_MODULE_HOOKS_DICTr   rÐ  ÚSEQUENCE_LENGTHr~  r  r,  r   rV   r0   r   ÚNNModuleHooksDictVariablerQ   r�   r   )	r�   r8   rm   Ú
hooks_dictÚhooks_sourcerÅ   rÙ  rØ  rr   s	    `    @@€rH   r   z)UnspecializedNNModuleVariable.var_getattr  s5  øøøø€ ð ð 
ð 
ð 
ð ”9Ô)×FÒFÀtÈTÑRÔRð 
;Ý$ T¤Z°Ñ6Ô6�
Ý˜j­$Ñ/Ô/ð ;µC¸
±O´OÀqÒ4HÐ4HØ”{ð Ý'1°$´+¸tÑ'DÔ'D˜Ý%Ø(×3Ò3Ý ,Ô Gñô ñô ð õ
 %Ô6°rÑ:Ô:Ð:ð ŒKñ$	àððñ ð ”IÔ*×GÒGÈÈdÑSÔSðõ ! ¤¨TÑ2Ô2ˆJÝ *¨4¬;¸Ñ =Ô =ÐÝÐ+×6Ò6µ|Ô7SÑTÔTÑUÔUÐUØŒIÔ(×,Ò,Ð->Ñ?Ô?Ð?ð"Ýð"Ýð"Ý#&ð"å•­Ð7Ô8ð"ð "ð "ð "ð "ð "ð "õ ð ð ð ð åAÀ*ÑMÔMðñ ô ñ ô ˆFõ
 Ô6Ø�˜ZÑ(Ô(Ð1Bðñ ô ð õ ‰wŒw×"Ò" 2 tÑ,Ô,Ð,rJ   c           	      ój  — ddl m} |                     ||¦  «        }|                      |d|¦  «        }|€|                      |d|¦  «        }|€|                      |d|¦  «        }|€6t	          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î   Nrí   rï   rð   rñ   r`   z;manually_trace_nn_module_getattr failed to find attribute ')
r  rã  r’   rÒ  r   rc   rQ   rŠ   rù   r˜   )r�   r8   rm   rã  rÌ  r  s         rH   Ú manually_trace_nn_module_getattrz>UnspecializedNNModuleVariable.manually_trace_nn_module_getattrV  sò   € ð 	/Ð.Ð.Ð.Ð.Ð.à#×*Ò*¨2¨tÑ4Ô4ˆØ×!Ò! " m°WÑ=Ô=ˆØˆ;Ø×%Ò% b¨*°gÑ>Ô>ˆCØˆ;Ø×%Ò% b¨*°gÑ>Ô>ˆCØˆ;Ý$ÝØàU�˜TœZÑ(Ô(Ô1ÐUÐUÈdÐUÐUÐUððñ ô ð ð ˆ;Ý ØUÈdÐUÐUÐUñô ð ð ˆ
rJ   )rù   r  r‹  r3   rŒ  rX   r¼   r�  r   rŽ   r   r˜  r›   r    rþ   r�   ÚcacherW   r,  r£  rU   r0   rÈ   rS   r+  rå   rA  rÒ  r   rä  rŽ  r�  s   @rH   rú   rú   ð  s¬  ø€ € € € € àØØ ðð 
#Ô	1ð	€Nðð2˜eœhœoð 2¸ð 2Àð 2ð 2ð 2ð 2ð 2ð 2ð(¨ð °6ð ð ð ð ð¨Fð ð ð ð ð-°ð -¸Dð -ð -ð -ð -ð Ø„_ð
 3 s¤8ð 
ð 
ð 
ñ „_ñ „\ð
ð/Ø-ð/à	ˆoÔ	ð/ð /ð /ð /ð /ð /ð4\à'ð\ð �?Ô#ð\ð �S˜/Ð)Ô*ð	\ð
 
ð\ð \ð \ð \ð|\Aà'ð\Að ð\Að �?Ô#ð	\Að
 �S˜/Ð)Ô*ð\Að 
ð\Að \Að \Að \Að \Að \Að|Ø-ðØ69ðØDSðà	˜4Ñ	ðð ð ð ðD-Ø-ðD-Ø58ðD-à	ðD-ð D-ð D-ð D-ð D-ð D-ðLØ-ðØ58ðà	ðð ð ð ð ð ð ð rJ   rú   c                   ó"   — e Zd ZdZdedefd„ZdS )Ú$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™  rJ   N)rù   r  r‹  Ú__doc__r   r˜  rC   rJ   rH   rç  rç  v  s@   € € € € € ðð ð¨ð °6ð ð ð ð ð ð rJ   rç  c                   óT   ‡ — 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                 ó˜   •— |                      d¦  «        }|€t          d¦  «        ‚ t          ¦   «         j        dd|i|¤Ž || _        d S )Nrj   zMFSDPManagedNNModule depends on having an accurate source to control guarding.rŠ   rC   )rq   r˜   r�   rŽ   rj   )r�   rŠ   r;   rj   rr   s       €rH   rŽ   z$FSDPManagedNNModuleVariable.__init__Œ  s]   ø€ Ø—’˜HÑ%Ô%ˆØˆ>Ý Ø_ñô ð ð 	�‰ŒÔÐ/Ð/˜uÐ/¨Ð/Ð/Ð/ØˆŒˆˆrJ   r•  c                 ó¦   — t          |t          t          f¦  «        s4t          j        j        j        rt          |¦  «        S t          |¦  «        S |S rB   )rR   r   r   rX   Ú_dynamoÚconfigÚskip_fsdp_guardsr—  s     rH   r˜  z(FSDPManagedNNModuleVariable._wrap_source–  sV   € ÝØÕ,Õ.IÐJñ
ô 
ð 	@õ Œ}Ô#Ô4ð @Ý)¨+Ñ6Ô6Ð6å2°;Ñ?Ô?Ð?ØÐrJ   )rù   r  r‹  ré  rX   r¼   r�  r   rŽ   r˜  rŽ  r�  s   @rH   rë  rë  €  s‚   ø€ € € € € ð	ð 	ð˜eœhœoð ¸ð Àð ð ð ð ð ð ð¨ð °ð ð ð ð ð ð ð ð rJ   rë  )Wré  r�   râ   rO  rn   r}   Úcollections.abcr   Ú
contextlibr   r   Útypingr   r   Útorch.nnrX   Útorch._guardsr   r;  r
   r   r   Úexcr   r   r   r   r   r   r   Úguardsr   r   Úmutation_guardr   rj   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�  rU   rS   r+  rh   ru   r†   rˆ   rú   rç  rë  rC   rJ   rH   ú<module>rÿ     sƒ  ððð ð. Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€Ø  Ð  Ð  Ð  Ð  Ð  à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" =Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø %Ð %Ð %Ð %Ð %Ð %Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ð *ØHÐHÐHÐHÐHÐHà*Ð*Ð*Ð*Ð*Ð*Ø)Ð)Ð)Ð)Ð)Ð)ð&Ø#ð&à	ŒŒð&ð ˆÔ
ð&ð ��oÐ%Ô&ð	&ð
 
ð&ð &ð &ð &ðR ð+Øð+àð+ð 	$ð+ð 
ŒŒð	+ð
 	ð+ð +ð +ñ „ð+ð. Ø�T‰Mð Ø %¤¤ð à	ð ð  ð  ð  ðFr6ð r6ð r6ð r6ð r6�ñ r6ô r6ð r6ðjCð Cð Cð Cð CÐ$=ñ Cô Cð CðLð ð ð ð Ð+Hñ ô ð ðð ð ð ð Ð"?ñ ô ð ð ð rJ   