Ë
    P/æj:¿  ã                   óè  — 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m	Z	m
Z
 d dlZddlmZmZ ddl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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 e
rd dl:m;Z; dd„Z<ede=dej|                  j~                  fd„«       Z@d„ ZA G d„ de1«      ZB G d„ de9«      ZC G d„ deC«      ZD G d„ deC«      ZEy) é    N)ÚcontextmanagerÚnullcontext)ÚDictÚListÚTYPE_CHECKINGé   )Útrace_rulesÚ	variables)Úraise_observed_exceptionÚunimplementedÚUnspecializeRestartAnalysisÚUnsupported)ÚGuardBuilderÚinstall_guard)ÚGenerationTracker)Ú
AttrSourceÚConstDictKeySourceÚ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é   )ÚMutableLocalÚtypestrÚ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     €úd/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/nn_module.pyú	<genexpr>zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>B   s   øè ø€ Ò E¸4¡°×!6Ñ Eùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr1   r2   r3   s     €r7   r8   zBinitialize_lazy_module.<locals>.convert_to_fake.<locals>.<genexpr>F   s   øè ø€ ÒC¸™¨t×4ÑCùr9   )r   ÚtypeÚ
isinstanceÚdictÚitemsÚlistÚtupleÚsetÚtorchÚfxÚProxyr   Únode)ÚxÚkÚvr6   Útxs      €€r7   r6   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"   r>   Ú_infer_parameters)rI   ÚmodÚargsÚkwargsÚ
proxy_argsÚproxy_kwargsÚargÚ	fake_argsrG   rH   Úfake_kwargsr6   s   `          @r7   Úinitialize_lazy_modulerT   6   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_keyrL   c              #   óª   K  — |j                  «       }	 ||j                  f|j                  | <   d –— |j                  | = y # |j                  | = w xY w­wr1   )ÚnameÚ	__class__Únn_module_stack)rU   ÚsourcerI   rL   Úfully_qualified_names        r7   Úrecord_nn_module_stackr\   R   sO   è ø€ à!Ÿ;™;›=Ðð+Ø*>ÀÇÁÐ)Nˆ×Ñ˜:Ñ&Ûà×Ñ˜zÑ*øˆB×Ñ˜zÑ*üs   ‚A”A ³AÁAÁA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)rZ   rL   ÚfwdÚforward_sources       r7   Ú&guard_to_detect_forward_monkeypatchingrl   \   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_typerU   ÚmoduleÚnn_module_stack_sourceÚreturnNc                 óŒ   •— t        ‰| �  di |¤Ž || _        || _        || _        | j
                  sJ ‚| j
                  | _        y )Nr2   )ÚsuperÚ__init__rp   rU   rq   rZ   rr   )Úselfrp   rU   rq   rN   rX   s        €r7   rv   zNNModuleVariable.__init__†   sC   ø€ ô 	‰ÑÑ"˜6Ò"Ø&ˆÔØ$ˆŒØˆŒØ�{Š{Ðˆ{Ø&*§k¡kˆÕ#rm   c                 ó6   — | j                   xs | j                  S r1   ©rr   rZ   ©rw   s    r7   Úget_nn_module_stack_sourcez+NNModuleVariable.get_nn_module_stack_source�   ó   € Ø×*Ñ*Ò9¨d¯k©kÐ9rm   c                 ó   — || _         y r1   ©rr   ©rw   rZ   s     r7   Úset_nn_module_stack_sourcez+NNModuleVariable.set_nn_module_stack_source“   ó
   € Ø&,ˆÕ#rm   c                 ó   — | j                   S r1   )rp   rz   s    r7   Úpython_typezNNModuleVariable.python_type–   s   € Ø×ÑÐrm   rI   r,   c                  ó   — y r1   r2   )rw   rI   rZ   ÚsubmodÚ	key_extraÚoptionss         r7   Ú_wrap_submodulez NNModuleVariable._wrap_submodule™   s   € ð 	rm   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©rZ   )ÚoutputÚget_submodulerU   r<   rB   ÚnnÚ
ModuleDictr>   r
   ÚConstantVariableÚcreateÚregister_attr_or_moduler   r   rZ   ÚappendÚ
ModuleListÚParameterListÚ
Sequentialr&   Ú	enumerate)rw   rI   ÚbaseÚresultrW   r…   Úname_varÚidxs           r7   Ú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ó õð	ð ˆrm   rW   r'   c                 ó,  — |j                   j                  | j                  «      }t        ||«      }t	        t        t        | j                  |«      «      j                  t        j                  «      «       t        j                  j                  |«      S r1   )rŒ   r�   rU   rJ   r   r   r   rZ   re   r   ÚHASATTRr
   r�   r‘   )rw   rI   rW   rL   r™   s        r7   Úcall_hasattrzNNModuleVariable.call_hasattr¾   sn   € Ø�i‰i×%Ñ% d§o¡oÓ6ˆÜ˜˜dÓ#ˆÜÜœ: d§k¡k°4Ó8Ó9×DÑDÜ×$Ñ$óô	
ô
 ×)Ñ)×0Ñ0°Ó8Ð8rm   c                 óf   — |j                   j                  | j                  «      }t        |dd«      S )NÚtrainingF)rŒ   r�   rU   Úgetattr©rw   rI   rL   s      r7   Úis_trainingzNNModuleVariable.is_trainingÈ   s)   € Ø�i‰i×%Ñ% d§o¡oÓ6ˆÜ�s˜J¨Ó.Ð.rm   c                 óð   — |j                   j                  | j                  «      }t        j                  |«       |j
                  j                  dk7  rt        j                  t        |«      «       t        ‚)zIRestart analysis treating this module as an UnspecializedNNModuleVariablerv   )
rŒ   r�   rU   r   ÚtagÚf_codeÚco_nameÚmark_class_dynamicr;   r   r£   s      r7   Úconvert_to_unspecializedz)NNModuleVariable.convert_to_unspecializedÌ   sT   € à�i‰i×%Ñ% d§o¡oÓ6ˆÜ×Ñ˜cÔ"ð �9‰9×Ñ 
Ò*Ü×0Ñ0´°c³Ô;Ü)Ð)rm   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_okra   )rŒ   r�   rU   r!   r   Úside_effectsÚhas_pending_mutation_of_attrÚ	load_attrr<   r
   ÚDeletedVariableÚobjectÚ__getattribute__)rw   rI   Úkeyr˜   Úmutated_attrÚ	base_dicts         r7   Ú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ÐÐrm   c                 ó$  — t        |«      rt        d«       t        |d¬«      }|€yt        |t        j
                  «      st        d«       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!   r   r   r<   rc   ÚFunctionTyper
   ÚUserMethodVariableÚcall_functionr�   r‘   )rw   r˜   rI   rW   r‡   Ú
getattr_fns         r7   Ú_custom_getattr_fallbackz)NNModuleVariable._custom_getattr_fallbackã   s�   € ä" 4Ô(ÜÐRÔSä'¨ÀtÔLˆ
ØÐØä˜*¤e×&8Ñ&8Ô9ÜÐRÔSä×+Ñ+¨J¸ÑHÀÑH×VÑVØ”×+Ñ+×2Ñ2°4Ó8Ð9¸2ó
ð 	
rm   c           
      óz  — ddl m} | j                  rt        | j                  |«      }nd }|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 |rY  ||t1        |«      «      |
«      }t3        |t4        t6        f«      r)|j9                  t        | j;                  «       |«      «       |S t=        |
t>        «      rk| j                  r,t        t        | j                  d«      |«      }t        |d«      }t#        j@                  |
jB                  |¬«      jE                  || gi «      S t=        |
tF        «      r>t#        jH                  |
jJ                  t#        jL                  tO        |«      «      |¬«      S t=        |
tP        «      r&t#        j@                  |
jS                  |«      |¬«      S t=        |
tT        jV                  «      rt#        jH                  |
| |¬«      S tY        |
«      st[        |
«      r  ||t1        |«      «      |
«      S t!        d|› dt]        |«      › dt]        |
«      › �«       t#        j$                  | ||¬«      S # t(        $ r | j+                  |||d|i¬«      }|�|cY S ‚ w xY w)Nr$   )ÚVariableBuilderra   TzGETATTR with no sourcer‹   Ú_modulesÚ_parametersÚ_buffersFrZ   )r˜   rI   rW   r‡   r^   rX   Úfgetzclass property z - ú )/Úbuilderr¿   rZ   r   rŒ   r�   rU   r±   r²   rA   ÚinspectÚgetmrorX   Úupdatera   Úkeysr   r
   ÚGetAttrVariableÚgetattr_staticÚAttributeErrorr½   rl   ÚUserDefinedClassVariabler   r<   ro   ÚUnspecializedNNModuleVariabler€   r{   r   ÚpropertyÚUserFunctionVariablerÃ   r»   Úclassmethodrº   r_   r+   r;   ÚstaticmethodÚ__get__rc   r¹   r   r   r&   )rw   rI   rW   r¿   rZ   r˜   rµ   Úobject_memberÚall_class_attribute_namesrF   Úsubobjr™   Úouts                r7   Úvar_getattrzNNModuleVariable.var_getattró   sŒ  € Ý,à�;Š;Ü §¡¨TÓ2‰FàˆFà�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áØ=‘/ "¤n°VÓ&<Ó=¸fÓEˆ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Ô-=àB‘ r¬>¸&Ó+AÓBÀ6ÓJÐJäØ% d V¨3¬w°t«}¨o¸Q¼wÀv»Ð>OÐPôô ×(Ñ(¨¨t¸FÔCÐCøôw "ò à×6Ñ6Ø "¨4¸(ÀFÐ9Kð 7ó �ð Ð%Ø!’Màðús   Ä?N Î$N:Î8N: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©rI   ÚproxyzsMust provide a valid source in order to inline, since inlined function may have default args which must be guarded.r^   Ú
_call_implr_   )+rŒ   r�   rU   r\   r{   r   r<   rB   rŽ   r–   rX   r^   r    rª   rÀ   r>   r»   r’   r   r   rZ   ÚpopÚcls_to_becomerp   rT   Úis_root_tracerÚ
__module__Ú
startswithrÅ   rÞ   Úcreate_proxyr"   rC   ÚGraphModulerâ   r   rc   rd   r_   r¹   Úinline_user_function_returnr
   rÐ   )rw   rI   rM   rN   rL   Úis_lazyrQ   Ú
child_namer…   rÞ   ÚfnÚ	fn_sources               r7   r»   zNNModuleVariable.call_functionU  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àHó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_attrr2   r$   rÝ   Úcall_method)rM   rN   rà   )rŒ   rè   rU   r#   rE   r"   rÅ   rÞ   )
rW   Ú	mod_proxyrO   rP   rÞ   rM   rN   rq   rw   rI   s
        €€€€€r7   Ú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Ø'ð	 -ó ôð rm   ©râ   Ú_wrapped_call_implr^   Ú_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r1   )Úis_python_constant©r4   rF   s     r7   r8   zUNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const.<locals>.<genexpr>  s   è ø€ ò Ø+,�×$Ñ$×&ñùs   ‚znon-const NNModule method )ÚallÚ	itertoolsÚchainÚvaluesr   )rM   rN   rW   s   €€€r7   Úassert_all_args_kwargs_constzBNNModuleVariable.call_method.<locals>.assert_all_args_kwargs_const  s@   ø€ Üñ Ü09·±ÀÀfÇmÁmÃoÓ0Vôô ô Ð :¸4¸&ÐAÕBðrm   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 r1   )r¢   rÆ   Ú	signatureÚbindÚas_python_constantr>   Úapply_defaultsÚ	arguments)Únamesrí   rF   rG   rH   Ú
bound_argsrM   r  rN   rq   rW   s         €€€€€r7   Ú
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‹   ©Úmutable_local)r“   rŒ   r’   r   rZ   r%   )	r>   r™   rW   r…   rð   Ú
gen_sourcer³   rw   rI   s	       €€€€€r7   Úwrap_valuesz1NNModuleVariable.call_method.<locals>.wrap_values  sk   ø€ ØˆFØ %ò ‘��fØ—‘Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó õðñ (¨¼l»nÔMÐMrm   c                 ó¤   •—  ‰‰j                  | «      ‰j                  j                  |‰| t         ‰‰j                  | «      «      ¬«      g«      S rŠ   )r‘   rŒ   r’   r   rZ   )rW   Úobjr�   rñ   r  r³   rw   rI   s     €€€€€€r7   Únamed_embedz1NNModuleVariable.call_method.<locals>.named_embed+  sV   ø€ Ù à$×+Ñ+¨DÓ1Ø—I‘I×5Ñ5ØØØÜ-©j¸¿¹ÀdÓ.KÓLð	 6ó ðó
ð 
rm   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   )rZ   rW   Ú
name_splitrF   s       r7   r  z0NNModuleVariable.call_method.<locals>.gen_source8  s[   € ØŸ™ C›ˆJØ˜!‰} Ò"Ø�Ü�j“/ AÒ%Ø—N‘N 1Ó%�Ü# F¨AÓ.�ô �j“/ AÓ%ð ˆMrm   Únamed_childrenrÀ   r  Únamed_parametersrÁ   ÚprefixÚrecurseÚnamed_buffersrÂ   Úremove_duplicateÚnamed_modulesÚmemoÚchildrenÚmodulesÚ
parametersÚbuffersrÉ   r  r>   Ú__len__Ú__contains__Ú__getitem__r_   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r1   )r<   r
   ÚTensorVariabler   s     r7   r8   z/NNModuleVariable.call_method.<locals>.<genexpr>ñ  s%   è ø€ ò àô ˜1œi×6Ñ6×7ñùs   ‚$&r2   )Sr  r�   rð   rñ   rU   rŒ   r�   r»   r\   r{   r	   Úis_torch_inline_allowedrÆ   ÚgetfilerX   rù   r‘   rÿ   r<   r>   ÚvaluerÎ   r’   r   r   rZ   r¢   Ú__name__r(   Úguard_on_key_orderÚaddr   rW   r  r“   r%   r  r!  r#  rÉ   r  rB   rŽ   r�   ÚParameterDictr	  rÀ   r+  r”   r•   r–   r;   r
   r&   ÚstrÚintr_   rc   r¹   rê   rÐ   r?   r*   ÚexportÚranger—   rª   Útensorr,  Úevaluate_exprr   r&  ÚconvÚ_ConvNdÚ_ConvTransposeNdra   rb   r  r  r  r  ru   rô   ) rw   rI   rW   rM   rN   Úconstantrö   Úmod_varr…   rí   r  r  r  r™   ÚparamÚbufferÚbuiltin_supportedÚsrcrÉ   r›   Ú
new_moduleÚnew_module_variabler,  rî   r�   rð   rñ   r  r  r³   rq   rX   s    `````                   @@@@@@@€r7   rô   zNNModuleVariable.call_methodÀ  sa  ÿü€ ÷ 	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÷	Nð 	N÷	ñ 	ò	ð Ð#Ò#Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXÙ¡Ð'Ð'ØˆFØ &× 5Ñ 5Ó 7ò 9‘��fØ—‘™k¨$°Ó7Õ8ð9á'¨¼l»nÔMÐMØÐ'Ò'Ø�I‰I×(Ñ(×,Ñ,Ü˜4Ÿ;™;¨Ó6×;Ñ;Ó=ôð ˆFØ6˜v×6Ñ6ñ  Ù˜X yÓ1ñ ò 8‘��eð —‘™k¨$°Ó6Õ7ð8ñ (¨¼l»nÔMÐMØ�_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXØˆFØ 4 × 4Ñ 4ñ !Ù˜X yÐ2DÓEñ!ò 9‘��fð —‘™k¨$°Ó7Õ8ð9ñ (¨¼l»nÔMÐMØ�_Ò$Ø�I‰I×(Ñ(×,Ñ,¬Z¸¿¹ÀZÓ-P×-UÑ-UÓ-WÔXØˆFØ 4 × 4Ñ 4ñ !Ù˜V XÐ/AÓBñ!ò 9‘��fð —‘™k¨$°Ó7Õ8ð9ñ (¨¼l»nÔMÐMØ�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Ó;Õ<ð=á'¨¼l»nÔMÐMØ�XÒÙ¡Ð'Ð'Ù˜vŸ|™|›~Ó.Ð.Ø�WŠ_Ù¡Ð'Ð'ØˆFØ &§¡£ò 9‘��fØ—‘™k¨$°Ó7Õ8ð9á'¨¼l»nÔMÐMØ�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©rI   r,   ©rM   úList[VariableTracker]rN   úDict[str, VariableTracker]rs   r'   )F)r5  ræ   Ú__qualname__r'   Ú_nonvar_fieldsr;   r9  rB   rŽ   ÚModulerv   r{   r€   rƒ   rˆ   rœ   rŸ   r¤   rª   r¶   r½   rØ   r»   rô   Ú__classcell__©rX   s   @r7   ro   ro   }   s  ø„ àØØØ ð	ð
 
×	'Ñ	'ð€Nð2Øð2Ø-0ð2Ø:?¿(¹(¿/¹/ð2à	õ2ò:ò-ò ðØ)óò
ð@9Ð6ð 9¸cð 9ÐFWó 9ò/ò*ó ò
ó `DðDið &ðið -ð	ið
 
óiðb ðx?ð &ð	x?ð
 -ðx?ð 
÷x?ñ x?rm   ro   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d„Z	 	 	 	 	 	 dˆ fd„Zdd„Zdˆ fd„Zdd„Zˆ xZS )rÎ   Ú
value_typeÚis_state_mutatedrr   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 typerT  rä   r4  Fr2   )r;   rB   ÚjitÚ_scriptÚRecursiveScriptModuler   r¢   ru   rv   rU  rZ   rr   )rw   r4  rN   Úlazy_value_to_becomerX   s       €r7   rv   z&UnspecializedNNModuleVariable.__init__  s™   ø€ Ü�‹;œ%Ÿ)™)×+Ñ+×AÑAÑAÜðWóð ð ˜6Ñ!Ü#*¨6°,Ñ+?ÀÐRVÓ#WÐ Ü�E‹{Ð2Ñ2ô
 (,¨E£{��|Ñ$ä‰ÑÑ/˜uÐ/¨Ò/Ø %ˆÔð '+§k¡kˆÕ#rm   c                 ó<   — t        |t        «      st        |«      S |S r1   )r<   r   ©rw   Úattr_sources     r7   Ú_wrap_sourcez*UnspecializedNNModuleVariable._wrap_source$  s   € Ü˜+Ô'BÔCÜ.¨{Ó;Ð;ØÐrm   c                 ó6   — | j                   xs | j                  S r1   ry   rz   s    r7   r{   z8UnspecializedNNModuleVariable.get_nn_module_stack_source)  r|   rm   c                 ó   — || _         y r1   r~   r   s     r7   r€   z8UnspecializedNNModuleVariable.set_nn_module_stack_source,  r�   rm   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__)
rB   rŽ   rP  Ú__setattr__rv   ra   r  rJ   Úidrb  )Ú	supportedrF   s     r7   Ú_nn_module_method_idsz3UnspecializedNNModuleVariable._nn_module_method_ids/  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Ë   rT  rÌ   ÚNotImplementedErrorrB   rŽ   r”   rh  r•   r–   rê   r
   rÐ   rœ   ru   )rw   rI   rí   ÚerX   s       €r7   rœ   z1UnspecializedNNModuleVariable.unpack_var_sequence:  sÏ   ø€ ð	-Ü×'Ñ'¨¯©¸ÓDˆBð Ü�H‰H×Ñ×(Ñ(Ü�H‰H×"Ñ"×+Ñ+Ü�H‰H×Ñ×(Ñ(ð
ñ 
ð ×1Ñ1Ü×.Ñ.¨rÓ2àðð ó÷ "Ñ! "Ó%ð&ô ‰wÑ*¨2Ó.Ð.øô' ò 	-Ü%¨1Ð,ûð	-ús   ƒ C Ã	C*ÃC%Ã%C*c                 óê  — | j                   }t        |«      r+|j                  �|j                  | _        t	        ||||«       d}t        | j                  |«      }|t        j                  j                  j                  u �r�d|j                  v�rŽt        j                  |d«      }t        |t        j                  «      �r]|j                   }| j#                  |d«      j%                  «       j'                  «       �s"| j#                  |d«      j%                  «       j'                  «       sô| j#                  |d«      j%                  «       j'                  «       sÆ| j#                  |d«      j%                  «       j'                  «       s˜|j#                  |d«      j'                  «       sx|j#                  |d«      j'                  «       sX|j#                  |d	«      j'                  «       s8|j#                  |d
«      j'                  «       sd}| j                  j(                  }| j*                  r!t-        t-        | j*                  d«      |«      }	nd }	t/        | j*                  |«       | j*                  r.t1        t3        t5        |«      «      | j7                  «       ||«      n	t9        «       }
|
5  t;        j<                  ||	¬«      j?                  || gtA        |«      z   |«      cd d d «       S # 1 sw Y   y xY w)Nrâ   r^   Ú_backward_hooksÚ_backward_pre_hooksÚ_forward_hooksÚ_forward_pre_hooksÚ_global_backward_pre_hooksÚ_global_backward_hooksÚ_global_forward_hooksÚ_global_forward_pre_hooksrX   r‹   )!r4  r   rä   rT  rT   r¢   rB   rŽ   rP  râ   ra   rÆ   rË   r<   rc   r¹   Únn_modules_globals_vtrØ   Úrealizer  r^   rZ   r   rl   r\   r9  rd  r{   r   r
   rÐ   r»   r?   )rw   rI   rM   rN   rL   rW   rí   Úforward_methodÚ
globals_vtrZ   Úctxs              r7   r»   z+UnspecializedNNModuleVariable.call_functionR  sZ  € ð �j‰jˆä˜#ÔØ× Ñ Ð,Ø"%×"3Ñ"3�”Ü" 2 s¨D°&Ô9ØˆÜ�T—_‘_ dÓ+ˆð ”—‘—‘×+Ñ+Ò+°	ÀÇÁÒ0MÜ$×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   Ê*5K)Ë)K2c                 ó   ‡ ‡‡‡‡‡
‡— ˆˆˆˆ fd„}ˆfd„Šˆ
ˆˆfd„Š
|t         j                  j                  j                  u r³‰ j                  rG‰j
                  j                  j                  t        ‰ j                  d«      j                  «       «        |d«      d   } ‰
‰ |¬«      }t        t        j                  |«      j                  «       «      }	t        j                  |	t!        «       ¬«      S t#        d«      ‚)	Nc                  ó’  •— t        ‰	j                  ‰«      } 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 r1   )	r¢   r4  rÆ   r  r  r	  r>   r
  r  )
r  rí   rF   rG   rH   r  rM   rN   rW   rw   s
         €€€€r7   r  zIUnspecializedNNModuleVariable.trace_supported_methods.<locals>.get_kwargsŠ  s²   ø€ Ü˜Ÿ™ TÓ*ˆ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   »B9Á(B>Â)Cc                 óR  •— | j                  ‰d«      j                  «       j                  }t        |t        «      sJ ‚t        |j                  «       «      }|D �cg c]  }|j                  «       ‘Œ }}|D �cg c]  }t        |t        j                  «      r|‘Œ  }}|S c c}w c c}w )NrÁ   )	rØ   ru  r>   r<   r=   r?   r  r
   r1  )Ú
module_varÚparams_dictÚparams_listrD  rI   s       €r7   Úget_current_parameterszUUnspecializedNNModuleVariable.trace_supported_methods.<locals>.get_current_parameters”  s¢   ø€ Ø$×0Ñ0°°]ÓC×KÑKÓM×SÑSˆKÜ˜k¬4Ô0Ð0Ð0Ü˜{×1Ñ1Ó3Ó4ˆKØ8CÖD¨u˜5Ÿ=™=�?ÐDˆKÐDð )öàÜ˜e¤Y×%=Ñ%=Ô>ò ðˆKð ð
 Ðùò Eùòs   ÁBÁ8#B$c                 ó  •— g }t        | t        «      sJ ‚ ‰| «      }| j                  ‰d«      j                  «       }|rI|j                  j                  «       D ],  }t        |t        «      sJ ‚|j                   ‰||«      «       Œ. |S )NrÀ   )r<   rÎ   rØ   ru  r>   r  Úextend)r|  r   r~  Úmodules_dictÚsubmodule_varÚcollect_parametersr  rI   s        €€€r7   r„  zQUnspecializedNNModuleVariable.trace_supported_methods.<locals>.collect_parameters¡  s�   ø€ ØˆKÜ˜jÔ*GÔHÐHÐHÙ0°Ó<ˆKØ%×1Ñ1°"°jÓA×IÑIÓKˆLÙØ%1×%7Ñ%7×%>Ñ%>Ó%@ò S�MÜ% mÔ5RÔSÐSÐSØ×&Ñ&Ñ'9¸-ÈÓ'QÕRðSð Ðrm   rÁ   r   )r   r  zMDiscrepancy between is_supported_nn_module_method and trace_supported_methods)rB   rŽ   rP  r'  rZ   rŒ   r6  r7  r   rW   r?   r=   ÚfromkeysrÉ   r
   rð   r%   ÚAssertionError)rw   rI   ÚmethodrW   rM   rN   r  r   r~  Údeduplicated_paramsr„  r  s   `` ```    @@r7   Útrace_supported_methodsz5UnspecializedNNModuleVariable.trace_supported_methods‡  sÈ   þ€ ÷	5ô	ö		ð ”U—X‘X—_‘_×/Ñ/Ñ/Ø�{Š{Ø—	‘	×,Ñ,×0Ñ0Ü˜tŸ{™{¨MÓ:×?Ñ?ÓAôñ ! Ó+¨IÑ6ˆGÙ,¨T¸7ÔCˆKô #'¤t§}¡}°[Ó'A×'FÑ'FÓ'HÓ"IÐä×1Ñ1Ø#´<³>ôð ô !Ø_óð rm   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�r—	 t        j                  t        | j                  «      |«      }| j                  |«      r| j                  |||||«      S 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                  j0                  v rî|d
   j3                  «       }|d   }	t        |	t        j4                  «      r*|	j7                  «       t8        j:                  j<                  u s|| j                  j0                  d	   v rd| _        no|| j                  j0                  d   v rd| _        nLt        |	t        j@                  t        jB                  f«      s|| j                  j0                  d   v rd| _        |t8        j:                  jD                  jF                  u rjt        |d   t        jH                  «      rM|j#                  t	        j
                  t8        j:                  jD                  jJ                  «      | |d
   g|«      S tL        ‰
| ��  ||||«      S # t        $ r d }Y �Œ�w xY w)Nr÷   rX   r‹   ra   r_   rb  z&UnspecializedNNModuleVariable missing rc  rÁ   r   r$   TrÂ   rÀ   )(r¢   rT  rZ   r   r
   rÐ   r»   r?   r4  rÆ   rË   r;   rÌ   Úis_supported_nn_module_methodr‰  r<   rÒ   rê   r_   rJ   rd  rb  rf  r   ra   r	  r1  rƒ   rB   rŽ   Ú	ParameterrU  ro   rÎ   rP  rc  r°   Ú__delattr__ru   rô   )rw   rI   rW   rM   rN   rí   rZ   r‡  Ú	attr_namer4  rX   s             €r7   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�ð ×1Ñ1°&Ô9Ø×3Ñ3°B¸ÀÀdÈFÓSÐSä˜&¤,Ô/Ü#Üœ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Ó:Ð:øôO "ò Ø“ðús   Â)M ÍMÍMc                 ó~   — | j                  ||«      }t        |t        j                  «      r|j	                  |«      S y r1   )rØ   r<   r
   ÚConstDictVariableÚmaybe_getitem_const)rw   rI   ÚfieldÚname_vtÚdict_vts        r7   Úgetattr_helperz,UnspecializedNNModuleVariable.getattr_helper  s8   € Ø×"Ñ" 2 uÓ-ˆÜ�gœy×:Ñ:Ô;Ø×.Ñ.¨wÓ7Ð7Ørm   c                 ó
  •‡‡— |dv rÞ|j                   j                  j                  | |«      s¸| j                  j                  j                  d«      r“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"                  |t1        |«      ‰¬«      S t2        ‰| �i  ||«      S )N)rl  rm  rn  ro  rÚ   r   )ro  rn  c                 ó¦   •— t         j                  j                  |«      }t        ‰| «      }t	        ‰|«      }t        j                  ||«      }||fS r1   )r
   r�   r‘   r   r   r)   )ÚirG   rH   r³   Ú
source_keyÚsource_valuer4  Úhooks_dict_sources          €r7   Úbuild_key_valuezBUnspecializedNNModuleVariable.var_getattr.<locals>.build_key_valueN  sQ   ø€ ä×0Ñ0×7Ñ7¸Ó:�ô 0Ð0AÀ1ÓE�
Ü,Ð->À
ÓK�Ü+×2Ñ2°1°lÓC�Ø˜E�zÐ!rm   c              3   ó>   •K  — | ]  \  }\  }} ‰|||«      –— Œ y ­wr1   r2   )r4   r˜  rG   rH   rœ  s       €r7   r8   z<UnspecializedNNModuleVariable.var_getattr.<locals>.<genexpr>Y  s'   øè ø€ ò Ù-6¨Q±°°A‘  1 a×(ñùs   ƒr‹   )rŒ   r­   r®   r4  ræ   rç   r¢   r<   r=   r  rZ   r   r   re   r   ÚEMPTY_NN_MODULE_HOOKS_DICTr
   r�  ÚSEQUENCE_LENGTHr6  r7  rW   r—   r>   r;   ru   rØ   )	rw   rI   rW   Ú
hooks_dictÚhooks_sourcer™   rœ  r›  rX   s	         @@€r7   rØ   z)UnspecializedNNModuleVariable.var_getattr#  s§  ú€ àð 
ñ 
ð —9‘9×)Ñ)×FÑFØ�dôà—*‘*×'Ñ'×2Ñ2Ð3MÔNÜ$ 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ô ×.Ñ.Øœ˜ZÓ(Ð1Bôð ô ‰wÑ" 2 tÓ,Ð,rm   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Ì   )rw   rI   rW   r“  r×   s        r7   Ú manually_trace_nn_module_getattrz>UnspecializedNNModuleVariable.manually_trace_nn_module_getattrb  sp   € ô ×,Ñ,¨TÓ2ˆØ×!Ñ! " m°WÓ=ˆØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ø×%Ñ% b¨*°gÓ>ˆCØˆ;Ü$¤^°R¸Ô>Øˆ
rm   ©rs   N)rI   r,   rM   rL  rN   rM  rs   r'   rJ  rK  )r5  ræ   rN  r+   rO  rv   r^  r{   r€   rÒ   rg   Ú	lru_cacherf  rœ   r»   r‰  rô   r•  rØ   r£  rQ  rR  s   @r7   rÎ   rÎ   û  sÜ   ø„ àØØ ðð 
#×	1Ñ	1ð	€Nðõ2ò2ò
:ò-ð Ø€Y×Ñ˜Óñ
ó ó ð
ô/ð03à#ð3ð &ð3ð -ð	3ð
 
ó3ðj6Ø)ó6ðp\;ð &ð	\;ð
 -ð\;ð 
õ\;ó|õ=-÷~rm   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 r1   )r<   r   r\  s     r7   r^  z1UnspecializedBuiltinNNModuleVariable._wrap_sourcey  s   € Ü˜+Ô'IÔJÜ5°kÓBÐBØÐrm   N)r5  ræ   rN  Ú__doc__r^  r2   rm   r7   r§  r§  t  s   „ ñórm   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 )NrZ   zMFSDPManagedNNModule depends on having an accurate source to control guarding.r4  r2   )Úgetru   rv   rZ   )rw   r4  rN   rZ   rX   s       €r7   rv   z$FSDPManagedNNModuleVariable.__init__‹  sI   ø€ Ø—‘˜H dÓ+ˆàÐð	[àZó	[Øô 	‰ÑÑ/˜uÐ/¨Ò/Øˆ�rm   c                 ó¦   — t        |t        t        f«      s:t        j                  j
                  j                  rt        |«      S t        |«      S |S r1   )r<   r   r   rB   Ú_dynamoÚconfigÚskip_fsdp_guardsr\  s     r7   r^  z(FSDPManagedNNModuleVariable._wrap_source”  sG   € ÜØÔ,Ô.IÐJô
ô �}‰}×#Ñ#×4Ò4Ü)¨+Ó6Ð6ä2°;Ó?Ð?ØÐrm   r¤  )r5  ræ   rN  r©  rv   r^  rQ  rR  s   @r7   r«  r«    s   ø„ ñ	õörm   r«  rJ  )Frg   rÆ   r  rc   Ú
contextlibr   r   Útypingr   r   r   Útorch.nnrB   r  r	   r
   Úexcr   r   r   r   Úguardsr   r   Úmutation_guardr   rZ   r   r   r   r   r   r   r   Úutilsr   r   r   r   r   r   r   r    r!   r"   r#   r˜   r%   r&   r'   Ú	functionsr(   Úlazyr)   Úlistsr*   Úuser_definedr+   Útorch._dynamo.symbolic_convertr,   rT   r9  rŽ   rP  r\   rl   ro   rÎ   r§  r«  r2   rm   r7   ú<module>r¾     sá   ðó Û Û Û ß 2ß ,Ñ ,ã ç %÷ó ÷ 1Ý .÷÷ ñ ÷÷ ÷ ñ ÷ 9Ñ 8Ý 3Ý %Ý  Ý 3ñ ÝDó;ð8 ð+ sð +¸U¿X¹X¿_¹_ò +ó ð+òôB{	?�ô {	?ô|vÐ$=ô vôrÐ+Hô ôÐ"?õ rm   