Ë
    g^(h ¿  ã                   óø  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
ZddlmZmZmZ ddl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"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= e	rddl>m?Z? d d„Z@edeAdej„                  j†                  fd„«       ZDd„ ZE G d„ de5«      ZF G d„ de=«      ZG G d„ deG«      ZH G d„ deG«      ZIy)!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)ÚcontextmanagerÚnullcontext)ÚTYPE_CHECKINGé   )Úgraph_break_hintsÚtrace_rulesÚ	variables)Úraise_observed_exceptionÚunimplementedÚunimplemented_v2ÚUnspecializeRestartAnalysisÚUnsupported)ÚGuardBuilderÚinstall_guard)ÚGenerationTracker)Ú
AttrSourceÚConstDictKeySourceÚDictGetItemSourceÚFSDPNNModuleSourceÚGetItemSourceÚNNModuleSourceÚ"UnspecializedBuiltinNNModuleSourceÚUnspecializedNNModuleSource)Ú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Úset_example_valueÚunpatched_nn_module_callÚunpatched_nn_module_call_implé   )ÚtypestrÚValueMutationNewÚVariableTracker)Úinvoke_and_store_as_constant)ÚLazyVariableTracker)ÚSliceVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslatorc                 ó  ‡ ‡— t        |d«      rgˆˆ fd„Št        ||«      \  }}|D �cg c]
  } ‰|«      ‘Œ }}|j                  «       D ��	ci c]  \  }}	| ‰|	«      “Œ }
}}	|j                  |||
«       yyc c}w c c}	}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_hookc                 óª  •— 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     €ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/variables/nn_module.pyú	<genexpr>zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>]   s   øè ø€ Ò E¸4¡°×!6Ñ Eùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr4   r5   r6   s     €r:   r;   zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>a   s   øè ø€ ÒC¸™¨t×4ÑCùr<   )r   ÚtypeÚ
isinstanceÚdictÚitemsÚlistÚtupleÚsetÚtorchÚfxÚProxyr   Únode)ÚxÚkÚvr9   Útxs      €€r:   r9   z/initialize_lazy_module.<locals>.convert_to_fake[   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N)Úhasattrr#   rA   Ú_infer_parameters)rL   ÚmodÚargsÚkwargsÚ
proxy_argsÚproxy_kwargsÚargÚ	fake_argsrJ   rK   Úfake_kwargsr9   s   `          @r:   Úinitialize_lazy_modulerW   Q   sŠ   ù€ ô ˆsÐ&Ô'õ
	ô $5°T¸6Ó#BÑ ˆ
�LØ5?Ö@¨c‘_ SÕ)Ð@ˆ	Ð@Ø9E×9KÑ9KÓ9M×N±°°A�q™/¨!Ó,Ñ,ÐNˆÑNØ×Ñ˜c 9¨kÕ:ð# (ùò AùÛNs   ¨A7ÁA<Ú
module_keyrO   c              #   ó"  K  — |j                  «       }|j                  j                  |d«      }|dkD  r| › d|› �n| } 	 ||j                  f|j                  | <   |dz   |j                  |<   d –— |j                  | = y # |j                  | = w xY w­w)Nr   ú@r'   )ÚnameÚ	num_callsÚgetÚ	__class__Únn_module_stack)rX   ÚsourcerL   rO   Úfully_qualified_namer\   s         r:   Úrecord_nn_module_stackrb   m   s‘   è ø€ à!Ÿ;™;›=ÐØ—‘× Ñ Ð!5°qÓ9€IØ09¸A²�J�<˜q  Ñ,À:€Jð+Ø*>ÀÇÁÐ)Nˆ×Ñ˜:Ñ&Ø-6¸©]ˆ�‰Ð)Ñ*Ûà×Ñ˜zÑ*øˆB×Ñ˜zÑ*üs   ‚;B¾1A= Á/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   r>   ÚtypesÚ
MethodTyper   Ú
make_guardr   ÚCLOSURE_MATCHÚ	functoolsÚpartialÚNOT_PRESENT_IN_GENERIC_DICT)r`   rO   ÚfwdÚforward_sources       r:   Ú&guard_to_detect_forward_monkeypatchingrr   z   sª   € ñ Ø˜Ÿ™Ñ$¬°#·,±,¸yÑ2IÔ)Jà—,‘,˜yÑ)ˆCÜ'¨°	Ó:ˆNÜ�C‹yœE×,Ñ,Ñ,Ü!+¨N¸JÓ!G�Ü˜.×3Ñ3´L×4NÑ4NÓOÕPô Ø×!Ñ!Ü×%Ñ%Ü$×@Ñ@Àyôóõð ó    c                   ó  ‡ — e Zd Zddddhej                  £Zdededej                  j                  ddfˆ fd„Z
d„ Zd	„ Zd
„ Z	 	 dd„Zd„ Zdddeddfd„Zd„ Zd„ Zdd„Zd„ Zdd„Z	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dˆ fd„Zˆ xZS )ÚNNModuleVariableÚmodule_typerX   ÚvalueÚnn_module_stack_sourceÚreturnNc                 óŒ   •— t        ‰| �  di |¤Ž || _        || _        || _        | j
                  sJ ‚| j
                  | _        y )Nr5   )ÚsuperÚ__init__rv   rX   rw   r`   rx   )Úselfrv   rX   rw   rQ   r^   s        €r:   r|   zNNModuleVariable.__init__¤   sC   ø€ ô 	‰ÑÑ"˜6Ò"Ø&ˆÔØ$ˆŒØˆŒ
Ø�{Š{Ðˆ{Ø&*§k¡kˆÕ#rs   c                 ó6   — | j                   xs | j                  S r4   ©rx   r`   ©r}   s    r:   Úget_nn_module_stack_sourcez+NNModuleVariable.get_nn_module_stack_source®   ó   € Ø×*Ñ*Ò9¨d¯k©kÐ9rs   c                 ó   — || _         y r4   ©rx   ©r}   r`   s     r:   Úset_nn_module_stack_sourcez+NNModuleVariable.set_nn_module_stack_source±   ó
   € Ø&,ˆÕ#rs   c                 ó   — | j                   S r4   )rv   r€   s    r:   Úpython_typezNNModuleVariable.python_type´   s   € Ø×ÑÐrs   rL   r/   c                  ó   — y r4   r5   )r}   rL   r`   ÚsubmodÚ	key_extraÚoptionss         r:   Ú_wrap_submodulez NNModuleVariable._wrap_submodule·   s   € ð 	rs   c                 óz  — |j                   j                  | j                  «      }t        |t        j
                  j                  «      r’g }|j                  «       D ]{  \  }}t        j                  j                  |«      }|j                   j                  || j                  |t        t        | j                  |«      «      ¬«       |j                  |«       Œ} |S t        |t        j
                  j                   t        j
                  j"                  t        j
                  j$                  f«      sJ t'        |«      «       ‚| j                  sJ ‚g }t)        |«      D ]Z  \  }}|j                  |j                   j                  || j                  |t        t        | j                  |«      «      ¬«      «       Œ\ |S ©N©r`   )ÚoutputÚget_submodulerX   r?   rE   ÚnnÚ
ModuleDictrA   r	   ÚConstantVariableÚcreateÚregister_attr_or_moduler   r   r`   ÚappendÚ
ModuleListÚParameterListÚ
Sequentialr(   Ú	enumerate)r}   rL   ÚbaseÚresultr[   r‹   Úname_varÚidxs           r:   Úunpack_var_sequencez$NNModuleVariable.unpack_var_sequence¼   sj  € à�y‰y×&Ñ& t§¡Ó7ˆÜ�dœEŸH™H×/Ñ/Ô0ØˆFØ $§
¡
£ò (‘��fÜ$×5Ñ5×<Ñ<¸TÓB�Ø—	‘	×1Ñ1ØØ—O‘OØÜ)¬-¸¿¹ÀTÓ*JÓKð	 2ô ð —‘˜hÕ'ð(ð ˆMäØ”5—8‘8×&Ñ&¬¯©×(>Ñ(>ÄÇÁ×@SÑ@SÐTô
ð 	ä�4‹=ó	ð 
ð �{Š{Ðˆ{ØˆÜ$ T›?ò 	‰KˆC�Ø�M‰MØ—	‘	×1Ñ1ØØ—O‘OØÜ)¬-¸¿¹ÀSÓ*IÓJð	 2ó õð	ð ˆrs   r[   r*   c                 ó,  — |j                   j                  | j                  «      }t        ||«      }t	        t        t        | j                  |«      «      j                  t        j                  «      «       t        j                  j                  |«      S r4   )r’   r“   rX   rM   r   r   r   r`   rk   r   ÚHASATTRr	   r–   r—   )r}   rL   r[   rO   rŸ   s        r:   Úcall_obj_hasattrz!NNModuleVariable.call_obj_hasattrÜ   sp   € ð �i‰i×%Ñ% d§o¡oÓ6ˆÜ˜˜dÓ#ˆÜÜœ: d§k¡k°4Ó8Ó9×DÑDÜ×$Ñ$óô	
ô
 ×)Ñ)×0Ñ0°Ó8Ð8rs   c                 óf   — |j                   j                  | j                  «      }t        |dd«      S )NÚtrainingF)r’   r“   rX   Úgetattr©r}   rL   rO   s      r:   Úis_trainingzNNModuleVariable.is_trainingè   s)   € Ø�i‰i×%Ñ% d§o¡oÓ6ˆÜ�s˜J¨Ó.Ð.rs   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“   rX   r   ÚtagÚf_codeÚco_nameÚmark_class_dynamicr>   r   r©   s      r:   Úconvert_to_unspecializedz)NNModuleVariable.convert_to_unspecializedì   sT   € à�i‰i×%Ñ% d§o¡oÓ6ˆÜ×Ñ˜cÔ"ð �9‰9×Ñ 
Ò*Ü×0Ñ0´°c³Ô;Ü)Ð)rs   c                 ó~  — |j                   j                  | j                  «      }t        |«      rt	        d«       |j                   j
                  j                  | |«      rC|j                   j
                  j                  | |d¬«      }t        |t        j                  «       S t        j                  |d«      }||v S )Nz-NNModuleVariable with custom __getattribute__T)Ú
deleted_okrg   )r’   r“   rX   r"   r   Úside_effectsÚhas_pending_mutation_of_attrÚ	load_attrr?   r	   ÚDeletedVariableÚobjectÚ__getattribute__)r}   rL   Úkeyrž   Úmutated_attrÚ	base_dicts         r:   Úhas_key_in_generic_dictz(NNModuleVariable.has_key_in_generic_dictö   sš   € Ø�y‰y×&Ñ& t§¡Ó7ˆä" 4Ô(ÜÐIÔJà�9‰9×!Ñ!×>Ñ>¸tÀSÔIØŸ9™9×1Ñ1×;Ñ;¸DÀ#ÐRVÐ;ÓWˆLÜ! ,´	×0IÑ0IÓJÐJÐJä×+Ñ+¨D°*Ó=ˆ	Ø�iÐÐrs   c                 ó@  — t        |«      rt        d«       t        |d¬«      }|€yt        |t        j
                  «      st        d«       dt        |d«      i}t        j                  || fi |¤Žj                  |t        j                  j                  |«      gi «      S )zDCheck for a __getattr__ and handle it specially if it is implementedz6torch.nn.Module with a custom __getattribute__ definedT)Úignore_nn_module_getattrNz6torch.nn.Module with a non-function custom __getattr__r`   Ú__getattr__)r"   r   r   r?   ri   ÚFunctionTyper   r	   ÚUserMethodVariableÚcall_functionr–   r—   )r}   rž   rL   r[   Ú
obj_sourceÚ
getattr_fnr�   s          r:   Ú_custom_getattr_fallbackz)NNModuleVariable._custom_getattr_fallback  s’   € ä" 4Ô(ÜÐRÔSä'¨ÀtÔLˆ
ØÐØä˜*¤e×&8Ñ&8Ô9ÜÐRÔSàœZ¨
°MÓBÐCˆÜ×+Ñ+¨J¸ÑHÀÑH×VÑVØ”×+Ñ+×2Ñ2°4Ó8Ð9¸2ó
ð 	
rs   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k(  rt        j                   | ||¬«      S ||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t+        | j                   |«       |dk(  r#|s!t        j,                  |j                  |¬«      S |rat/        j0                  |	t3        |«      «      }t5        |t6        t8        f«      r)|j;                  t        | j=                  «       |«      «       |S t?        	t@        «      rk| j                   r,t        t        | j                   d«      |«      }t        |d«      }t        jB                  |	jD                  |¬«      jG                  || gi «      S t?        |	tH        «      r>t        jJ                  |	jL                  t        jN                  tQ        |«      «      |¬«      S t?        |	tR        «      r&t        jB                  |	jU                  |«      |¬«      S t?        |	tV        jX                  «      rt        jJ                  |	| |¬«      S t[        |	«      st]        |	«      r t/        j0                  ||	t3        |«      «      S t_        ddta        |«      › d|› dta        |	«      › �dta        |	«      › d�d|› dta        |	«      › dta        |«      › d�dgtb        jd                  ¢¬«       t        j                   | ||¬«      S # t$        $ r9 | j'                  |||| j                   ¬	«      }
|
�|
cY S t)        t$        |«       Y �ŒËw xY w)Nrg   TzGETATTR with no sourcer‘   Ú_modulesÚ_parametersÚ_buffersF)rž   rL   r[   rÃ   rd   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.)Úgb_typeÚcontextÚexplanationÚhints)3r`   r   r’   r“   rX   r·   r¸   rD   ÚinspectÚgetmror^   Úupdaterg   Úkeysr   r	   ÚGetAttrVariableÚgetattr_staticÚAttributeErrorrÅ   r
   rr   ÚUserDefinedClassVariabler*   Úbuildr   r?   ru   ÚUnspecializedNNModuleVariabler†   r�   r    ÚpropertyÚUserFunctionVariablerÊ   rÂ   ÚclassmethodrÁ   re   r.   r>   ÚstaticmethodÚ__get__ri   rÀ   r   r   r   r(   r   ÚSUPPORTABLE)r}   rL   r[   r`   rž   r»   Úobject_memberÚall_class_attribute_namesrI   ÚsubobjrŸ   Úouts               r:   Úvar_getattrzNNModuleVariable.var_getattr  sú  € Ø—‘Ò>¤¨D¯K©K¸Ó!>ˆà�y‰y×&Ñ& t§¡Ó7ˆÜ×+Ñ+¨D°*Ó=ˆ	ØˆÜ$'£EÐ!Ü—‘ §¡Ó/ò 	@ˆAØ%×,Ñ,¨Q¯Z©Z¯_©_Ó->Õ?ð	@ð �{Š{ÜÐ2Ô3à�:ÒÜ×,Ñ,¨T°4ÀÔGÐGà�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à�;Ò¡}Ü×5Ñ5°d·n±nÈVÔTÐTáÜ!×'Ñ'¨¨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ð	õ	
ô ×(Ñ(¨¨t¸FÔCÐCøôM "ò à×6Ñ6Ø "¨4¸D¿K¹Kð 7ó �ð Ð%Ø!’Mä(Ü"Ø÷ðús   Ä8O Ï,PÐPÐP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J d«       ‚|rJ ‚|\  }|j                  j                  «       D ]m  \  }}|j!                  |j                   j#                  || j                  |t%        t'        | j(                  |«      «      ¬«      |gi «       |j+                  «       }Œo |cd d d «       S |r+|j,                  �|j,                  | _        t1        ||||«       |j                   j3                  «       r’|j4                  j7                  d«      rw|j4                  dk7  rht        |dd¬«      r| j                  |«       ddlm}	  |	| |j                   j<                  d	| j                  gt?        ||«      ¢­Ž ¬
«      cd d d «       S | j(                  sJ d«       ‚t        |t        j@                  jB                  «      r#|j                  }
t'        | j(                  d«      }n"|jD                  }
t'        | j(                  d«      }tG        |
tH        jJ                  «      r|
jL                  }
t'        |d«      }| g|z   }ntG        |
tH        jN                  «      sJ ‚|jQ                  tS        jT                  |
|¬«      ||«      cd d d «       S # 1 sw Y   y xY w)Nz3Expected lazy sequential isn't a valid combination?r‘   )z	torch.nn.z	torch.ao.ztorch.nn.utils.parametrizeT)Úcheck_forward_hooksÚcheck_backward_hooksr'   ©Úwrap_fx_proxyÚcall_module©rL   ÚproxyzsMust provide a valid source in order to inline, since inlined function may have default args which must be guarded.rd   Ú
_call_implre   )+r’   r“   rX   rb   r�   r   r?   rE   r”   rœ   r^   rd   r!   r°   rÇ   rA   rÂ   r˜   r   r   r`   ÚpopÚcls_to_becomerv   rW   Úis_root_tracerÚ
__module__Ú
startswithÚbuilderré   Úcreate_proxyr#   rF   ÚGraphModulerí   r    ri   rj   re   rÀ   Úinline_user_function_returnr	   rÛ   )r}   rL   rP   rQ   rO   Úis_lazyrT   Ú
child_namer‹   ré   ÚfnÚ	fn_sources               r:   rÂ   zNNModuleVariable.call_function|  sý  € ð �i‰i×%Ñ% d§o¡oÓ6ˆä#Ø�O‰O˜T×<Ñ<Ó>ÀÀCó
ñ a	ô % SÓ)ˆGä˜3¤§¡× 3Ñ 3Ô4Ø—M‘M×)Ñ)¬U¯X©X×-@Ñ-@×-HÑ-HÑHä% cÔ*ð ×1Ñ1°"Ô5ñ #ð ØIó�{ñ "Ð!�zØ‘�à*-¯,©,×*<Ñ*<Ó*>ò #Ñ&�J Ø×$Ñ$ØŸ	™	×9Ñ9Ø"Ø ŸO™OØ&Ü#1´*¸T¿[¹[È*Ó2UÓ#Vð	 :ó ð ˜Øô	ð Ÿ&™&›(‘Cð#ð ÷Ca	ñ a	ñF à×$Ñ$Ð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òô÷Ca	ñ a	ðT —{’{ð ðZó�{ô ˜c¤5§8¡8×#7Ñ#7Ô8ð Ÿ™�BÜ *¨4¯;©;¸	Ó B‘IàŸ™�BÜ *¨4¯;©;¸Ó E�IÜ˜"œe×.Ñ.Ô/ØŸ™�BÜ *¨9°jÓ A�IØ ˜6 D™=‘Dä! "¤e×&8Ñ&8Ô9Ð9Ð9Ø×5Ñ5Ü×2Ñ2°2¸iÔHØØó÷{a	÷ a	ò a	ús   ÁD"MÅ8CMÉC8MÍMc                 ó�  •‡ ‡‡‡‡‡‡‡‡‡‡‡— ddl mŠmŠmŠ ‰ j                  Š‰j
                  j                  ‰«      Šˆˆˆˆ ˆfd„}‰dv r‰ j                  ‰‰‰«      S ‰dk(  r8t        ‰ j                  ‰ j                  «       ‰‰«      5   |‰«      cd d d «       S ‰dk(  rMt        j                  t        j                  ‰j                  j                  «      «      r‰j!                  d«      S ‰dk(  rº‰d   j#                  «       sJ ‚t%        ‰d	   ‰«      sJ ‚‰d	   j&                  ‰d   j(                     }t%        |t*        «      r|S |j                  Š‰j
                  j                  ‰«      }‰j
                  j-                  |‰‰t/        t1        ‰ j2                  ‰«      «      ¬
«      S |r7t5        ‰‰«      }	‰j                  j6                  › d‰› d�Št9        ‰|	‰‰‰«      S ˆˆˆfd„Šˆˆˆˆˆfd„}
ˆˆˆˆ ˆfd„}ˆˆˆˆˆ ˆfd„}d„ Š‰dk(  r‘‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «       ‰s‰rJ ‚g }‰jC                  «       D ]  \  Š}|jE                   |‰|«      «       Œ  ‰|tG        «       ¬«      S ‰dk(  r”‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «       g } ‰jH                  d0i  |
dd«      ¤ŽD ]  \  Š}|jE                   |‰|«      «       Œ  ‰|tG        «       ¬«      S ‰dk(  r•‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «       g } ‰jJ                  d0i  |
ddd«      ¤ŽD ]  \  Š}|jE                   |‰|«      «       Œ  ‰|tG        «       ¬«      S ‰dk(  r•‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «       g } ‰jL                  d0i  |
ddd«      ¤ŽD ]  \  Š}|jE                   |‰|«      «       Œ  ‰|tG        «       ¬«      S ‰dk(  rc‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «       ‰s‰rJ ‚ |‰jC                  «       «      S ‰dk(  r]‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «        |‰jM                  «       «      S ‰d k(  re‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «        | ‰jH                  d0i  |
d«      ¤Ž«      S ‰d!k(  re‰j
                  j:                  j=                  t?        ‰ j2                  d«      jA                  «       «        | ‰jJ                  d0i  |
d«      ¤Ž«      S ‰d"k(  rO‰s‰rJ ‚g }‰jO                  «       D ]"  Š|jE                  ‰j!                  ‰«      «       Œ$  ‰|tG        «       ¬«      S ‰d#k(  r‰s‰rJ ‚ |‰j'                  «       «      S ‰d$k(  rJ‰s‰rJ ‚g }‰j'                  «       D ]  \  Š}|jE                   |‰|«      «       Œ  ‰|tG        «       ¬«      S ‰d%k(  r ‰s‰rJ ‚‰j!                  tQ        ‰«      «      S ‰d&k(  r�t%        ‰tR        jT                  jV                  tR        jT                  jX                  f«      rC‰rA‰d	   j#                  «       r.‰j!                  ‰d	   j[                  «       ‰j\                  v «      S ‰d'k(  �rÏ‰stQ        ‰«      dk(  sJ ‚tR        jT                  jV                  j^                  tR        jT                  j`                  j^                  tR        jT                  jX                  j^                  tR        jT                  jb                  j^                  tR        jT                  jd                  j^                  f}tg        ‰«      j^                  |vrât%        ‰d	   th        j                  «      sJ tk        ‰d	   «      «       ‚‰d	   j[                  «       Št%        ‰tl        tn        f«      sJ ‚t5        ‰‰«      jp                  }	t%        |	tr        jt                  «      sJ ‚t?        t?        ‰ j2                  ‰«      d(«      }‰jw                  ti        jx                  |	|¬
«      ‰ gt{        ‰«      z   ‰«      S ‰ j2                  sJ ‚t%        ‰d	   t|        «      �r:‰j
                  j~                  �rg }t{        t�        tQ        ‰«      «      «      ‰d	   j[                  «          }tƒ        ‰‰d	   j[                  «          «      D ]V  \  }}||   Št/        t1        ‰ j2                  ‰«      «      }|jE                  ‰j
                  j-                  |‰|¬
«      «       ŒX ‰‰d	   j[                  «          }‰j
                  j-                  |‰ › d)�t/        t1        ‰ j2                  ‰d	   j[                  «       «      «      ¬
«      }|S ‰ j…                  ‰«       dd*lCmD} t%        ‰d	   |«      r‰d	   j‹                  ‰j
                  «      Šn8‰d	   j#                  «       r‰d	   j[                  «       Šnt�        d+‰d	   › �«       ‰‰   }‰j
                  j-                  |‰ j                  ‰t/        t1        ‰ j2                  ‰«      «      ¬
«      S ‰d,k(  szt%        ‰tR        jT                  jŽ                  j�                  j’                  «      r‰d-k(  s=t%        ‰tR        jT                  jŽ                  j�                  j”                  «      rg‰d.k(  rbt5        ‰‰«      jp                  }	t?        t?        ‰ j2                  ‰«      d(«      }‰jw                  ti        jx                  |	|¬
«      ‰ g‰z   ‰«      S ‰‰j                  j–                  v r^t™        ‰j                  j–                  ‰   «      r<t›        d/„ t�        jž                  ‰‰j¡                  «       «      D «       «      r |‰«      S t¢        ‰‰ ��I  ‰‰‰‰«      S # 1 sw Y   �Œ)xY w)1Nr'   )r–   ÚListIteratorVariableÚTupleVariablec           	      ó   •— ‰	j                   j                  d‰j                  di «      }t        |j                  ‰«       t        ‰‰«      \  }}ddlm}  |‰	‰	j                   j                  d| |g|¢­|¬«      ¬«      S )NÚget_attrr5   r'   rè   Úcall_method)rP   rQ   rë   )r’   rô   rX   r$   rH   r#   ró   ré   )
r[   Ú	mod_proxyrR   rS   ré   rP   rQ   Úmoduler}   rL   s
        €€€€€r:   Ú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Ø'ð	 -ó ôð rs   ©rí   Ú_wrapped_call_implrd   Ú_check_input_dimTÚ_get_item_by_idxr   r‘   Ú_Ú_resultc                  óŒ   •— t        d„ t        j                  ‰ ‰j                  «       «      D «       «      st	        d‰› �«       y y )Nc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr4   )Úis_python_constant©r7   rI   s     r:   r;   zUNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const.<locals>.<genexpr>5  s   è ø€ ò Ø+,�×$Ñ$×&ñùs   ‚znon-const NNModule method )ÚallÚ	itertoolsÚchainÚvaluesr   )rP   rQ   r[   s   €€€r:   Úassert_all_args_kwargs_constzBNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const4  s@   ø€ Üñ Ü09·±ÀÀfÇmÁmÃoÓ0Vôô ô Ð :¸4¸&ÐAÕBðrs   c                  óŒ  •—  ‰«        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 r4   )r¨   rÐ   Ú	signatureÚbindÚas_python_constantrA   Úapply_defaultsÚ	arguments)Únamesrù   rI   rJ   rK   Ú
bound_argsrP   r  rQ   r  r[   s         €€€€€r:   Ú
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c                 óÐ   •— g }| D ]M  \  }}|j                  ‰j                  j                  |‰|t         ‰‰j                  |«      «      ¬«      «       ŒO  ‰|t        «       ¬«      S )Nr‘   ©Úmutation_type)r™   r’   r˜   r   r`   r)   )	rA   rŸ   r[   r‹   rü   Ú
gen_sourcer¹   r}   rL   s	       €€€€€r:   Úwrap_valuesz1NNModuleVariable.call_method.<locals>.wrap_valuesE  sm   ø€ ØˆFØ %ò ‘��fØ—‘Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó õðñ (¨Ô>NÓ>PÔQÐQrs   c                 ó¤   •—  ‰‰j                  | «      ‰j                  j                  |‰| t         ‰‰j                  | «      «      ¬«      g«      S r�   )r—   r’   r˜   r   r`   )r[   Úobjr–   rý   r  r¹   r}   rL   s     €€€€€€r:   Únamed_embedz1NNModuleVariable.call_method.<locals>.named_embedR  sV   ø€ Ù à$×+Ñ+¨DÓ1Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó ðó
ð 
rs   c                 ó°   — |j                  d«      }|d   dk(  r| S t        |«      dkD  r,|j                  d«      }t        | |«      } t        |«      dkD  rŒ,| S )Nú.r   Ú )ÚsplitÚlenrî   r   )r`   r[   Ú
name_splitrI   s       r:   r  z0NNModuleVariable.call_method.<locals>.gen_source_  s[   € ØŸ™ C›ˆJØ˜!‰} Ò"Ø�Ü�j“/ AÒ%Ø—N‘N 1Ó%�Ü# F¨AÓ.�ô �j“/ AÓ%ð ˆMrs   Únamed_childrenrÇ   r  Únamed_parametersrÈ   ÚprefixÚrecurseÚnamed_buffersrÉ   Úremove_duplicateÚnamed_modulesÚmemoÚchildrenÚmodulesÚ
parametersÚbuffersrÓ   r  rA   Ú__len__Ú__contains__Ú__getitem__re   z.__getitem__(slice))ÚSymNodeVariablez%getitem on NNModuleVariable with key Ú_get_abs_string_indexÚ_conv_forwardÚ_output_paddingc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr4   )r?   r	   ÚTensorVariabler  s     r:   r;   z/NNModuleVariable.call_method.<locals>.<genexpr>  s%   è ø€ ò àô ˜1œi×6Ñ6×7ñùs   ‚$&r5   )Sr&  r–   rü   rý   rX   r’   r“   rÂ   rb   r�   r   Úis_torch_inline_allowedrÐ   Úgetfiler^   r  r—   r  r?   rA   rw   rÙ   r˜   r   r   r`   r¨   Ú__name__r+   Úguard_on_key_orderÚaddr   r[   r*  r™   r)   r+  r.  r0  rÓ   r(  rE   r”   r•   ÚParameterDictr  rÇ   r8  rš   r›   rœ   r>   r	   r(   ÚstrÚintre   ri   rÀ   rö   rÛ   rB   r-   ÚexportÚranger�   r°   Útensorr9  Úevaluate_exprr   r3  ÚconvÚ_ConvNdÚ_ConvTransposeNdrg   rh   r  r  r  r  r{   r   ) r}   rL   r[   rP   rQ   Úconstantr  Úmod_varr‹   rù   r  r   r#  rŸ   ÚparamÚbufferÚbuiltin_supportedÚsrcrÓ   r¡   Ú
new_moduleÚnew_module_variabler9  rú   r–   rü   rý   r  r  r¹   r  r^   s    `````                   @@@@@@@€r:   r   zNNModuleVariable.call_methodç  sm  ÿü€ ÷ 	LÑKà�o‰oˆØ—‘×(Ñ(¨Ó-ˆ÷	ð 	ð2 Ð7Ñ7ð ×%Ñ% b¨$°Ó7Ð7Ø�YÒô (Ø—‘ ×!@Ñ!@Ó!BÀBÈóñ 8ñ 2°$Ó7÷8ñ 8ð
 Ð%Ò%¬+×*MÑ*MÜ�O‰O˜F×,Ñ,×=Ñ=Ó>ô+
ð $×*Ñ*¨4Ó0Ð0àÐ%Ò%Ø˜‘7×-Ñ-Ô/Ð/Ð/Ü˜d 1™g }Ô5Ð5Ð5Ø˜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ö	C÷		5ð 		5÷	Rð 	R÷	ñ 	ò	ð Ð#Ò#Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXÙ¡Ð'Ð'ØˆFØ &× 5Ñ 5Ó 7ò 9‘��fØ—‘™k¨$°Ó7Õ8ð9á'¨Ô>NÓ>PÔQÐQØÐ'Ò'Ø�I‰I×(Ñ(×,Ñ,Ü˜4Ÿ;™;¨Ó6×;Ñ;Ó=ôð ˆFØ6˜v×6Ñ6ñ  Ù˜X yÓ1ñ ò 8‘��eð —‘™k¨$°Ó6Õ7ð8ñ (¨Ô>NÓ>PÔQÐQØ�_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXØˆFØ 4 × 4Ñ 4ñ !Ù˜X yÐ2DÓEñ!ò 9‘��fð —‘™k¨$°Ó7Õ8ð9ñ (¨Ô>NÓ>PÔQÐQØ�_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXØˆFØ 4 × 4Ñ 4ñ !Ù˜V XÐ/AÓBñ!ò 9‘��fð —‘™k¨$°Ó7Õ8ð9ñ (¨Ô>NÓ>PÔQÐQØ�ZÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXÙ¡Ð'Ð'Ù˜v×4Ñ4Ó6Ó7Ð7Ø�YÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXÙ˜v×3Ñ3Ó5Ó6Ð6Ø�\Ò!Ø�I‰I×(Ñ(×,Ñ,Ü˜4Ÿ;™;¨Ó6×;Ñ;Ó=ôñ Ð6˜v×6Ñ6ÑO¹ÀIÓ9NÑOÓPÐPØ�YÒØ�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXÙÐ3˜v×3Ñ3ÑL±jÀÓ6KÑLÓMÐMØ�VŠ^Ù¡Ð'Ð'ØˆFØŸ™›ò =�Ø—‘Ð.×5Ñ5°dÓ;Õ<ð=á'¨Ô>NÓ>PÔQÐQØ�XÒÙ¡Ð'Ð'Ù˜vŸ|™|›~Ó.Ð.Ø�WŠ_Ù¡Ð'Ð'ØˆFØ &§¡£ò 9‘��fØ—‘™k¨$°Ó7Õ8ð9á'¨Ô>NÓ>PÔQÐQØ�YÒÙ¡Ð'Ð'Ø#×*Ñ*¬3¨v«;Ó7Ð7à�NÒ"Ü˜6¤E§H¡H×$7Ñ$7¼¿¹×9OÑ9OÐ#PÔQÙØ�Q‘×*Ñ*Ô,à#×*Ñ*Ø�Q‘×*Ñ*Ó,°·±Ð?óð ð �]Ó"Ù¤# d£)¨q¢.Ð0Ð0ä—‘×#Ñ#×/Ñ/Ü—‘×#Ñ#×/Ñ/Ü—‘×&Ñ&×2Ñ2Ü—‘×&Ñ&×2Ñ2Ü—‘×#Ñ#×/Ñ/ð!Ðô �F‹|×'Ñ'Ð/@Ñ@Ü! $ q¡'¬9×+EÑ+EÔFÐXÌÐPTÐUVÑPWÓHXÓXÐFØ˜1‘g×0Ñ0Ó2�Ü! #¬¬S zÔ2Ð2Ð2Ü˜V TÓ*×3Ñ3�ä! "¤e×&8Ñ&8Ô9Ð9Ð9ä ¤¨D¯K©K¸Ó!>À
ÓK�Ø×5Ñ5Ü×2Ñ2°2¸cÔBØ�FœT $›ZÑ'Øóð ð —;’;Ð�;ä˜$˜q™'¤=Õ1ð —9‘9×#Ó#à�Fô  ¤¤c¨&£kÓ 2Ó3°D¸±G×4NÑ4NÓ4PÑQ�DÜ'0°¸¸Q¹×8RÑ8RÓ8TÑ1UÓ'Vò 	™˜˜VØ" 3™i˜Ü,¬]¸4¿;¹;ÈÓ-LÓM˜ØŸ™ØŸI™I×=Ñ=Ø &Ø #Ø'*ð >ó õð	ð "(¨¨Q©×(BÑ(BÓ(DÑ!E�JØ*,¯)©)×*KÑ*KØ"Ø˜&Ð 3Ð4Ü-Ü)¨$¯+©+°t¸A±w×7QÑ7QÓ7SÓTó ð +Ló +Ð'ð /Ð.ð ×1Ñ1°"Ô5å/ä˜$˜q™' ?Ô3Ø˜1‘g×+Ñ+¨B¯I©IÓ6‘Ø�a‘×+Ñ+Ô-Ø˜1‘g×0Ñ0Ó2‘äÐ EÀdÈ1ÁgÀYÐOÔPà˜C‘[ˆFØ—9‘9×4Ñ4ØØ—‘ØÜ%¤m°D·K±KÀÓ&EÓFð	 5ó ð ð Ð+Ò+ä˜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Ø�˜‘Øóð ð �F×$Ñ$×-Ñ-Ñ-Ü˜×)Ñ)×2Ñ2°4Ñ8Ô9Üñ ä"Ÿ™¨¨v¯}©}«Ó?ôô ñ
 .¨dÓ3Ð3ä‘7Ò& r¨4°°vÓ>Ð>÷S8ñ 8ús   Â
r;ò;s©rL   r/   ©rP   úlist[VariableTracker]rQ   údict[str, VariableTracker]ry   r*   )F)rA  rñ   Ú__qualname__r*   Ú_nonvar_fieldsr>   rE  rE   r”   ÚModuler|   r�   r†   r‰   rŽ   r¢   r¥   rª   r°   r¼   rÅ   rä   rÂ   r   Ú__classcell__©r^   s   @r:   ru   ru   ›   s  ø„ àØØØ ð	ð
 
×	'Ñ	'ð€Nð2Øð2Ø-0ð2Ø9>¿¹¿¹ð2à	õ2ò:ò-ò ðØ)óò
ð@
9Ø)ð
9Ø14ð
9à	ó
9ò/ò*ó ò
ó"fDðPið &ðið -ð	ið
 
óiðb ðx?ð &ð	x?ð
 -ðx?ð 
÷x?ñ x?rs   ru   c                   óæ   ‡ — e Zd Zdddhej                  £Z	 dˆ fd„Zd„ Zd„ Zd„ Ze	 e
j                  d«      d	„ «       «       Zˆ fd
„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dˆ fd„Zdd„Zdˆ fd„Zdd„Zˆ xZS )rÙ   Ú
value_typeÚis_state_mutatedrx   Nc                 ó*  •— t        |«      t        j                  j                  j                  u rt        d«      ‚d|v r+t        |d   dd «      }t        |«      |u rt        |«      |d<   t        ‰| �   dd|i|¤Ž d| _	        | j                  | _        y )NzƒScriptModules aren't supported in UnspecializedNNModuleVariable becuase their .forward function isn't a static member of their typer`  rï   rw   Fr5   )r>   rE   ÚjitÚ_scriptÚRecursiveScriptModuler   r¨   r{   r|   ra  r`   rx   )r}   rw   rQ   Úlazy_value_to_becomer^   s       €r:   r|   z&UnspecializedNNModuleVariable.__init__2  s™   ø€ Ü�‹;œ%Ÿ)™)×+Ñ+×AÑAÑAÜðWóð ð ˜6Ñ!Ü#*¨6°,Ñ+?ÀÐRVÓ#WÐ Ü�E‹{Ð2Ñ2ô
 (,¨E£{��|Ñ$ä‰ÑÑ/˜uÐ/¨Ò/Ø %ˆÔð '+§k¡kˆÕ#rs   c                 ó<   — t        |t        «      st        |«      S |S r4   )r?   r   ©r}   Úattr_sources     r:   Ú_wrap_sourcez*UnspecializedNNModuleVariable._wrap_sourceK  s   € Ü˜+Ô'BÔCÜ.¨{Ó;Ð;ØÐrs   c                 ó6   — | j                   xs | j                  S r4   r   r€   s    r:   r�   z8UnspecializedNNModuleVariable.get_nn_module_stack_sourceP  r‚   rs   c                 ó   — || _         y r4   r„   r…   s     r:   r†   z8UnspecializedNNModuleVariable.set_nn_module_stack_sourceS  r‡   rs   c                  ób  — 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__)
rE   r”   r\  Ú__setattr__r|   rg   r  rM   Úidrn  )Ú	supportedrI   s     r:   Ú_nn_module_method_idsz3UnspecializedNNModuleVariable._nn_module_method_idsV  s|   € ô —X‘X—_‘_×0Ñ0´%·(±(·/±/×2JÑ2JÐKˆ	ô —X‘X—_‘_×-Ñ-×4Ñ4Ó6ö
àÜ�q˜*Ô%¨!°9Ñ*<ô ˆq�z‰z�Nò
ð 	
ùò 
s   Á=,B,c                 óÚ  •— 	 t        j                  | j                  d«      }|t
        j                  j                  j                  t
        j                  j                  j                  t
        j                  j                  j                  fv r6|j                  t        j                  |«      | gi «      j                  |«      S t        ‰| �9  |«      S # t        $ r}t        |‚d }~ww xY w)NÚ__iter__)rÐ   rÕ   r`  rÖ   ÚNotImplementedErrorrE   r”   rš   rt  r›   rœ   rö   r	   rÛ   r¢   r{   )r}   rL   rù   Úer^   s       €r:   r¢   z1UnspecializedNNModuleVariable.unpack_var_sequencea  sÏ   ø€ ð	-Ü×'Ñ'¨¯©¸ÓDˆBð Ü�H‰H×Ñ×(Ñ(Ü�H‰H×"Ñ"×+Ñ+Ü�H‰H×Ñ×(Ñ(ð
ñ 
ð ×1Ñ1Ü×.Ñ.¨rÓ2àðð ó÷ "Ñ! "Ó%ð&ô ‰wÑ*¨2Ó.Ð.øô' ò 	-Ü%¨1Ð,ûð	-ús   ƒ C Ã	C*ÃC%Ã%C*c                 óV  — | j                   }t        |«      r+|j                  �|j                  | _        t	        ||||«       t        |t        j                  j                  «      s5|j                  j                  t        ur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|j$                  v�rŽt'        j(                  |d«      }t        |t        j*                  «      �r]|j,                  }| j/                  |d«      j1                  «       j3                  «       �s"| j/                  |d«      j1                  «       j3                  «       sô| j/                  |d«      j1                  «       j3                  «       sÆ| j/                  |d«      j1                  «       j3                  «       s˜|j/                  |d«      j3                  «       sx|j/                  |d	«      j3                  «       sX|j/                  |d
«      j3                  «       s8|j/                  |d«      j3                  «       sd}| j                  j4                  }| j6                  r!t9        t9        | j6                  d«      |«      }	nd }	t;        | j6                  |«       | j6                  r.t=        t?        tA        |«      «      | jC                  «       ||«      n	tE        «       }
|
5  tG        jH                  ||	¬«      jK                  || gtM        |«      z   |«      cd d d «       S # 1 sw Y   y xY w)NÚ__call__rí   rd   Ú_backward_hooksÚ_backward_pre_hooksÚ_forward_hooksÚ_forward_pre_hooksÚ_global_backward_pre_hooksÚ_global_backward_hooksÚ_global_forward_hooksÚ_global_forward_pre_hooksr^   r‘   )'rw   r   rï   r`  rW   r?   rE   rF   rõ   rx  re   r%   r¨   r    ri   rj   rí   r&   rg   rÐ   rÕ   rÀ   Únn_modules_globals_vträ   Úrealizer(  rd   r`   r   rr   rb   rE  rp  r�   r   r	   rÛ   rÂ   rB   )r}   rL   rP   rQ   rO   r[   rù   Úforward_methodÚ
globals_vtr`   Úctxs              r:   rÂ   z+UnspecializedNNModuleVariable.call_functiony  sÑ  € ð �j‰jˆä˜#ÔØ× Ñ Ð,Ø"%×"3Ñ"3�”Ü" 2 s¨D°&Ô9ô ˜3¤§¡× 4Ñ 4Ô5Ø—‘×%Ñ%Ô-EÑEàˆDÜ˜Ÿ™¨$Ó/‰BàˆDÜ˜Ÿ™¨$Ó/ˆBô
 �3—<‘<¤×!1Ñ!1Õ2Ü�s—~‘~¤u×'7Ñ'7Õ8Ø—‘×%Ñ%Ô)AÒAØ—‘×'Ñ'Ô+HÒHØ §¡Ò-ä$×3Ñ3°C¸ÓCˆNÜ˜.¬%×*<Ñ*<Õ=Ø×5Ñ5�
à×$Ñ$ RÐ):Ó;×CÑCÓE×IÑIÕKØ×'Ñ'¨Ð,AÓB×JÑJÓL×PÑPÔRØ×'Ñ'¨Ð,<Ó=×EÑEÓG×KÑKÔMØ×'Ñ'¨Ð,@ÓA×IÑIÓK×OÑOÔQØ!×-Ñ-¨bÐ2NÓO×SÑSÔUØ!×-Ñ-¨bÐ2JÓK×OÑOÔQØ!×-Ñ-¨bÐ2IÓJ×NÑNÔPØ!×-Ñ-¨bÐ2MÓN×RÑRÔTà$�DØŸ™×0Ñ0�Bà�;Š;Ü¤
¨4¯;©;¸Ó DÀdÓK‰FàˆFä.¨t¯{©{¸CÔ@ð �{Š{ô #Ü”B�s“G“˜d×=Ñ=Ó?ÀÀSôô “ð 	ð ñ 	Ü×1Ñ1°"¸VÔD×RÑRØ�T�FœT $›ZÑ'¨ó÷	÷ 	ò 	ús   Í 5NÎN(c                 ó^  •— |dv rzt        | j                  |«      }| j                  r!t        t        | j                  d«      |«      }nd }t	        j
                  ||¬«      j                  || gt        |«      z   |«      S |t        | j                  di «      v�rq	 t        j                  t        | j                  «      |«      }t        |t        «      r\t        t        t        | j                  d«      |«      d«      }|j                  t	        j
                  |j                   |¬«      ||«      S t#        |d«      r3t%        |j&                  «      | j)                  «       v rt+        d|› �«       |dk(  �rd	| j                  j,                  v rî|d
   j/                  «       }|d   }	t        |	t        j0                  «      r*|	j3                  «       t4        j6                  j8                  u s|| j                  j,                  d	   v rd| _        no|| j                  j,                  d   v rd| _        nLt        |	t        j<                  t        j>                  f«      s|| j                  j,                  d   v rd| _        |t4        j6                  j@                  jB                  u rjt        |d   t        jD                  «      rM|j                  t	        j
                  t4        j6                  j@                  jF                  «      | |d
   g|«      S tH        ‰
| �•  ||||«      S # t        $ r d }Y �Œgw xY w)Nr  r^   r‘   rg   re   rn  z&UnspecializedNNModuleVariable missing ro  rÈ   r   r'   TrÉ   rÇ   )&r¨   r`  r`   r   r	   rÛ   rÂ   rB   rw   rÐ   rÕ   r>   rÖ   r?   rÝ   rö   re   rM   rp  rn  rr  r   rg   r  r>  r‰   rE   r”   Ú	Parameterra  ru   rÙ   r\  ro  r¶   Ú__delattr__r{   r   )r}   rL   r[   rP   rQ   rù   r`   ÚmethodÚ	attr_namerw   r^   s             €r:   r   z)UnspecializedNNModuleVariable.call_method¼  s¾  ø€ ð Ð7Ñ7Ü˜Ÿ™¨$Ó/ˆBØ�{Š{Ü#¤J¨t¯{©{¸KÓ$HÈ$ÓO‘à�ä×1Ñ1°"¸VÔD×RÑRØ�T�FœT $›ZÑ'¨óð ð ”w˜tŸz™z¨:°rÓ:Ò:ðÜ ×/Ñ/´°T·Z±ZÓ0@À$ÓG�ô ˜&¤,Ô/Ü#Üœz¨$¯+©+°{ÓCÀTÓJÈJó�ð ×5Ñ5Ü×2Ñ2°6·?±?È6ÔRØØóð ô ˜ 
Ô+Ü�v—‘Ó'¨4×+EÑ+EÓ+GÑGäÐ FÀtÀfÐMÔNð �}Ó$¨¸$¿*¹*×:MÑ:MÑ)Mð ! ™G×6Ñ6Ó8�	Ø˜Q™�ô
 ˜u¤i×&>Ñ&>Ô?Ø×)Ñ)Ó+¬u¯x©x×/AÑ/AÑAØ $§*¡*×"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Ô)àœŸ™Ÿ™×4Ñ4Ñ4¼Ø�Q‘œ×2Ñ2ô:ð
 ×5Ñ5Ü×2Ñ2´5·8±8·?±?×3NÑ3NÓOØ˜4 ™7�OØóð ô ‰wÑ" 2 t¨T°6Ó:Ð:øôI "ò Ø“ðús   Â)L ÌL,Ì+L,c                 ó~   — | j                  ||«      }t        |t        j                  «      r|j	                  |«      S y r4   )rä   r?   r	   ÚConstDictVariableÚmaybe_getitem_const)r}   rL   ÚfieldÚname_vtÚdict_vts        r:   Úgetattr_helperz,UnspecializedNNModuleVariable.getattr_helper  s8   € Ø×"Ñ" 2 uÓ-ˆÜ�gœy×:Ñ:Ô;Ø×.Ñ.¨wÓ7Ð7Ørs   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%                  ‰j'                  «       «       ˆfd„Št        ˆfd„t)        |j+                  «       «      D «       «      }t        j,                  |t/        |«      ‰¬«      S t0        ‰| �e  ||«      S )N)ry  rz  r{  r|  r   )r|  r{  c                 ó¦   •— t         j                  j                  |«      }t        ‰| «      }t	        ‰|«      }t        j                  ||«      }||fS r4   )r	   r–   r—   r   r   r,   )ÚirJ   rK   r¹   Ú
source_keyÚsource_valuerw   Úhooks_dict_sources          €r:   Úbuild_key_valuezBUnspecializedNNModuleVariable.var_getattr.<locals>.build_key_valueF  sQ   ø€ ä×0Ñ0×7Ñ7¸Ó:�ô 0Ð0AÀ1ÓE�
Ü0Ð1BÀJÓO�Ü+×2Ñ2°1°lÓC�Ø˜E�zÐ!rs   c              3   ó>   •K  — | ]  \  }\  }} ‰|||«      –— Œ y ­wr4   r5   )r7   r”  rJ   rK   r˜  s       €r:   r;   z<UnspecializedNNModuleVariable.var_getattr.<locals>.<genexpr>Q  s'   øè ø€ ò Ù-6¨Q±°°A‘  1 a×(ñùs   ƒr‘   )r’   r³   r´   r¨   rw   r?   r@   r(  r`   r   r   rk   r   ÚEMPTY_NN_MODULE_HOOKS_DICTr	   rŒ  ÚSEQUENCE_LENGTHrB  rC  r[   r�   rA   ÚNNModuleHooksDictVariabler>   r{   rä   )	r}   rL   r[   Ú
hooks_dictÚhooks_sourcerŸ   r˜  r—  r^   s	         @@€r:   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×(Ñ(×,Ñ,Ð->×-CÑ-CÓ-EÔFô	"ô ó Ü:CÀJ×DTÑDTÓDVÓ:Wôó ˆFô ×6Ñ6Øœ˜ZÓ(Ð1Bôð ô ‰wÑ" 2 tÓ,Ð,rs   c                 óÎ   — t        j                  |«      }| j                  |d|«      }|€| j                  |d|«      }|€| j                  |d|«      }|€t        t        |«       |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È   rÇ   rÉ   )r	   r–   r‘  r
   rÖ   )r}   rL   r[   r�  rã   s        r:   Ú manually_trace_nn_module_getattrz>UnspecializedNNModuleVariable.manually_trace_nn_module_getattrZ  sn   € ô ×,Ñ,¨TÓ2ˆØ×!Ñ! " m°WÓ=ˆØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ü$¤^°RÔ8Øˆ
rs   ©ry   N)rL   r/   rP   rX  rQ   rY  ry   r*   rW  rV  )rA  rñ   rZ  r.   r[  r|   rj  r�   r†   rÝ   rm   Ú	lru_cacherr  r¢   rÂ   r   r‘  rä   r   r]  r^  s   @r:   rÙ   rÙ   "  sÓ   ø„ àØØ ðð 
#×	1Ñ	1ð	€Nðõ2ò2ò
:ò-ð Ø€Y×Ñ˜Óñ
ó ó ð
ô/ð0Aà#ðAð &ðAð -ð	Að
 
óAðFY;ð &ð	Y;ð
 -ðY;ð 
õY;óvõ;-÷zrs   rÙ   c                   ó   — e Zd ZdZd„ Zy)Ú$UnspecializedBuiltinNNModuleVariablezg
    Differentiates between builtin nn modules (e.g. torch.nn.Linear) and user defined nn modules.
    c                 ó<   — t        |t        «      st        |«      S |S r4   )r?   r   rh  s     r:   rj  z1UnspecializedBuiltinNNModuleVariable._wrap_sourceq  s   € Ü˜+Ô'IÔJÜ5°kÓBÐBØÐrs   N)rA  rñ   rZ  Ú__doc__rj  r5   rs   r:   r¤  r¤  l  s   „ ñórs   r¤  c                   ó*   ‡ — e Zd ZdZdˆ fd„Z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.
    c                 ól   •— |j                  dd «      }|€J d«       ‚t        ‰| �  dd|i|¤Ž || _        y )Nr`   zMFSDPManagedNNModule depends on having an accurate source to control guarding.rw   r5   )r]   r{   r|   r`   )r}   rw   rQ   r`   r^   s       €r:   r|   z$FSDPManagedNNModuleVariable.__init__ƒ  sG   ø€ Ø—‘˜H dÓ+ˆØÐ!ð 	
Ø[ó	
Ð!ô 	‰ÑÑ/˜uÐ/¨Ò/Øˆ�rs   c                 ó¦   — t        |t        t        f«      s:t        j                  j
                  j                  rt        |«      S t        |«      S |S r4   )r?   r   r   rE   Ú_dynamoÚconfigÚskip_fsdp_guardsrh  s     r:   rj  z(FSDPManagedNNModuleVariable._wrap_sourceŒ  sG   € ÜØÔ,Ô.IÐJô
ô �}‰}×#Ñ#×4Ò4Ü)¨+Ó6Ð6ä2°;Ó?Ð?ØÐrs   r¡  )rA  rñ   rZ  r¦  r|   rj  r]  r^  s   @r:   r¨  r¨  w  s   ø„ ñ	õörs   r¨  rV  )Jr¦  rm   rÐ   r  ri   Ú
contextlibr   r   Útypingr   Útorch.nnrE   r&  r   r   r	   Úexcr
   r   r   r   r   Úguardsr   r   Úmutation_guardr   r`   r   r   r   r   r   r   r   r   Úutilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   rž   r(   r)   r*   Ú	functionsr+   Úlazyr,   Úlistsr-   Úuser_definedr.   Útorch._dynamo.symbolic_convertr/   rW   rE  r”   r\  rb   rr   ru   rÙ   r¤  r¨  r5   rs   r:   ú<module>rº     sæ   ðñó. Û Û Û ß 2Ý  ã ç 8Ñ 8÷õ ÷ 1Ý .÷	÷ 	ó 	÷÷ ÷ õ ÷ =Ñ <Ý 3Ý %Ý  Ý 3ñ ÝDó;ð8 ð	+ sð 	+¸U¿X¹X¿_¹_ò 	+ó ð	+òôBD
?�ô D
?ôNGÐ$=ô GôT
Ð+Hô ôÐ"?õ rs   