ó
    EñizE  ã                   óˆ  • S r SSKrSSKrSSKJr  SSKJrJrJr  SSK	r	SSK
Jr  SSKJr  SSKJr  SSKJr  S	S
KJrJr  S	SKJrJrJrJrJrJr  S	SKJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  \(       a  SSK*J+r+   " S S\,5      r- " S S\,5      r.\" \/S5      r0S\	Rb                  S\24S jr3 " S S\)5      r4g)a
  
This module implements variable tracking for PyTorch optimizers during Dynamo tracing.

The OptimizerVariable class provides specialized handling for optimizer instances by:
- Optimizing the tracing of expensive optimizer initialization
- Managing optimizer state and parameter group tracking
- Handling tensor sources and guards for optimizer state tensors
- Supporting CUDA graph execution through static tensor address management
- Providing special handling for parameter gradients and optimizer state tensors

Key features include:
- Efficient initialization tracing via _init_group optimization
- Automatic marking of optimizer state tensors as static for CUDA graphs
- Proper source tracking for parameter groups, gradients, and state tensors
- Guard installation for optimizer state structure
- Support for both CPU and GPU tensor handling
- Cleanup of static tensor references via finalizers

The module integrates with Dynamo's broader tracing system while providing
optimizer-specific optimizations and safety guarantees.
é    N)ÚIterable)ÚAnyÚOptionalÚTYPE_CHECKING)ÚTensorVariable)ÚSource)ÚgetArtifactLogger)Útree_map_onlyé   )ÚGuardBuilderÚinstall_guard)Ú
AttrSourceÚConstDictKeySourceÚDictGetItemSourceÚGetItemSourceÚGlobalWeakRefSourceÚ
GradSource)ÚGLOBAL_KEY_PREFIXé   )ÚVariableTracker)ÚConstantVariable)ÚConstDictVariable)ÚListVariable)ÚGetAttrVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslatorc                   ó   • \ rS rSrSrg)ÚArgMappingExceptioné8   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r    ó    Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/variables/optimizer.pyr   r   8   ó   † Úr'   r   c                   ó   • \ rS rSrSrg)ÚGuardInstallExceptioné<   r    Nr!   r    r'   r(   r+   r+   <   r)   r'   r+   Ú
perf_hintsÚxÚreturnc                 ó:  • SSK Jn  U R                  (       a„  U" U R                  R                  S5      n[
        R                  R                  R                  U 5      S LnU(       a3  UR                  c   eU=(       d    UR                  R                  U 5      $ U$ g)Nr   )Úget_managerFT)Útorch._inductor.cudagraph_treesr1   Úis_cudaÚdeviceÚindexÚtorchÚ_dynamoÚutilsÚget_static_address_typeÚcurrent_nodeÚ_is_cuda_graph_recorded_tensor)r.   r1   ÚmanagerÚis_static_addresss       r(   Ú_is_static_for_cudagraphsr>   C   s…   € Ý;à‡y‡yÙ˜aŸh™hŸn™n¨eÓ4ˆÜ!ŸM™M×/Ñ/×GÑGÈÓJÐRVÐVÐÞØ×'Ñ'Ñ3Ð3Ð3à!÷ JØ×'Ñ'×FÑFÀqÓIðð
 %Ð$ð r'   c                   óâ  ^ • \ rS rSrSSS1\R
                  kr   SS\R                  R                  S\	\
\\4      S\	\\      S\	\
\R                  \4      S\SS4U 4S	 jjjrS
SS\S\\   S\
\\4   SS4
U 4S jjrS
SS\S\4U 4S jjrSS jrSS jrS\S\S\\\   \
\\4   4   4S jrSS jrSS jrS
SS\R                  S\4S jrS
SS\\   S\S\\   S\SS4S jrSS jr Sr!U =r"$ ) ÚOptimizerVariableéV   Úgrad_to_sourceÚtensor_to_sourceÚstatic_tensor_namesNÚvalueÚkwargsr/   c                 ó¤   >• [         TU ]  " U40 UD6  Xl        U=(       d    0 U l        U=(       d    0 U l        U=(       d
    [        5       U l        g ©N)ÚsuperÚ__init__rE   rB   rC   ÚsetrD   )ÚselfrE   rB   rD   rC   rF   Ú	__class__s         €r(   rJ   ÚOptimizerVariable.__init__^   sE   ø€ ô 	‰Ò˜Ñ) &Ò)à,1Œ
Ø,×2°ˆÔØ 0× 6°BˆÔØ#6×#?¼#»%ˆÕ r'   Útxr   ÚnameÚargsr   c                 ó`  >• US:X  aû  [        U R                  S5      (       d  [        T
U ]  XX45      $  U R	                  U5        U R                  5         U R                  " U0 UD6u  pVU R                  R                  " U0 UD6nU R                  U5        U R                  XXEU5        S[        U R                  5       3nUR                  X€R                  5        U R                  U5        [        R                  " U5      $ [        T
U ]  XX45      $ ! [        [         4 a
  n	 Sn	A	N%Sn	A	ff = f)zVThis is an optimization to avoid tracing the very slow initialization of the optimizerÚ_init_groupÚ__optimizer_N)ÚhasattrrE   rI   Úcall_methodÚgraph_break_if_pending_mutationÚmove_step_if_cpuÚget_python_argsrS   Úmap_sources_and_install_guardsÚupdate_list_argsÚidÚstore_global_weakref_by_idÚcreate_finalizerr   Úcreater   r+   )rL   rO   rP   rQ   rF   Úpy_argsÚ	py_kwargsÚret_valÚmangled_nameÚ_rM   s             €r(   rV   ÚOptimizerVariable.call_methodm   s  ø€ ð �=Ó Ü˜4Ÿ:™: }×5Ñ5ä‘wÑ*¨2°TÓBÐBðØ×4Ñ4°RÔ8Ø×%Ñ%Ô'Ø%)×%9Ò%9¸4Ð%JÀ6Ñ%JÑ"�ØŸ*™*×0Ò0°'ÐG¸YÑG�Ø×3Ñ3°BÔ7Ø×%Ñ% b°ÀÔKð ".¬b°·±«nÐ-=Ð>�Ø×-Ñ-¨l¿J¹JÔGØ×%Ñ% bÔ)ô (×.Ò.¨wÓ7Ð7ô
 ‰wÑ" 2¨TÓ:Ð:øô	 (Ô)>Ð?ó äûðús   ´CD ÄD-Ä(D-c                 ó*  >• US;   a1  U R                   (       d   e[        X[        U R                   U5      S9$ US:X  aG  SSKJn  U R
                  R                   H  nUS    H
  nU" USS9  M     M     U R                  U5        [        TU ]%  X5      $ )	NrS   )ÚsourceÚparam_groupsr   ©Úmark_static_addressÚparamsT©Úguard)
rg   r   r   Ú
decoratorsrj   rE   rh   Ú_set_capturablerI   Úvar_getattr)rL   rO   rP   rj   ÚgroupÚprM   s         €r(   rp   ÚOptimizerVariable.var_getattr‘   sˆ   ø€ ð �MÓ"Ø—;—;Ð�;Ü" 4´jÀÇÁÈdÓ6SÑTÐTà�>Ó!Ý8àŸ™×0Ô0�Ø˜xœ�AÙ'¨°Ô6ó )ñ 1ð × Ñ  Ô$ä‰wÑ" 2Ó,Ð,r'   c           	      ó8  • U R                   R                   H€  nUS    Ht  nUR                  R                  nUR                  R                  [        U5      S 5      nU(       d  MG  UR                  U5      (       d  M_  SSKJ	n  U" SSU SU 3S/ S9  Mv     M‚     g )	Nrk   r   )Úunimplementedz(optimizer: pending mutation on parameterz
variable: z, parameter: zSPending mutations on a parameter (e.g. due to using closure) require a graph break.)Úgb_typeÚcontextÚexplanationÚhints)
rE   rh   ÚoutputÚside_effectsÚid_to_variableÚgetr\   Úhas_pending_mutationÚexcru   )rL   rO   Úgrr   r{   Úvariableru   s          r(   rW   Ú1OptimizerVariable.graph_break_if_pending_mutation¤   sŠ   € ð
 —‘×(Ô(ˆAØ�x”[�Ø!Ÿy™y×5Ñ5�Ø'×6Ñ6×:Ñ:¼2¸a»5À$ÓG�ß�8 × AÑ AÀ(× KÓ KÝ3á!Ø JØ",¨X¨J°mÀAÀ3Ð GØ$yØ ô	ó !ò )r'   c                 ó>  ^ • SSK Jn  S[        [        [        4   S[
        4U 4S jjnT R                  R                   H  nU" U5      (       d  M  SUS'   M     T R                  =(       a    [        T R                  S5      nUR                  [        R                  " UT R                  R                  U5      5      nUR                   HP  n[        R                  " [         R"                  " S5      5      n[         R"                  " S5      UR                  U'   MR     g )	Nr   ©ÚLazyVariableTrackerrq   r/   c                 óä   >• SnSnU R                  S/ 5       H?  nX#R                  =(       d    UR                  -  nXTR                  R                  ;  -  nMA     SU ;   =(       a    U=(       a    U$ )NTrk   Ú
capturable)r}   r3   Úis_xpurE   Ústate)rq   Úall_uninitializedÚall_gpurr   rL   s       €r(   Úsafe_to_set_capturableÚAOptimizerVariable._set_capturable.<locals>.safe_to_set_capturable¼   sh   ø€ Ø $ÐØˆGà—Y‘Y˜x¨Ö,�ØŸ9™9×0¨¯©Ñ0�Ø!¨d¯j©j×.>Ñ.>Ñ%>Ñ>Ò!ñ -ð   5Ñ(×JÐ->×JÀ7ÐJr'   Tr‡   rh   )Ú r…   ÚdictÚstrr   ÚboolrE   rh   rg   r   Úrealize_allr   ÚbuildÚitemsr   Ú_HashableTrackerr   r_   )	rL   rO   r…   rŒ   rq   rg   Úparam_groups_vtÚparam_group_vtÚkeys	   `        r(   ro   Ú!OptimizerVariable._set_capturable·   sã   ø€ Ý)ð	K¬$¬s´C¨x©.ð 	K¼T÷ 	Kð —Z‘Z×,Ô,ˆEÙ% e×,Ó,Ø&*��lÓ#ñ -ð —‘×H¤¨D¯K©K¸Ó!HˆØ-×9Ñ9Ü×!Ò! " d§j¡j×&=Ñ&=¸vÓFó
ˆð .×3Ô3ˆNÜ#×4Ò4Ü ×'Ò'¨Ó5óˆCô )9×(?Ò(?ÀÓ(EˆN× Ñ  Ó%ò	 4r'   c                 óÊ   ^ • S[         S[         4U 4S jjnU Vs/ s H
  oC" U5      PM     nnUR                  5        VVs0 s H  u  pgXc" U5      _M     nnnXX4$ s  snf s  snnf )z9Get python values equivalent to the variable tracker argsÚargr/   c                 ó0  >• [        U [        5      (       a%  U R                  5       (       a  U R                  5       $ [        U [        5      (       a  U R
                  (       d  / $ [        U [        5      (       a™  [        U R                  [        5      (       az  [        U R                  R                  [        5      (       aQ  U R                  R                  R                  S:X  a-  TR                  R                  U R                  R                     $ [        e)Nrh   )Ú
isinstancer   Úis_python_constantÚas_python_constantr   r”   r   rg   r   Úbaser   ÚmemberrE   rh   r5   r   )r›   rL   s    €r(   Úmap_argÚ2OptimizerVariable.get_python_args.<locals>.map_argÜ   s´   ø€ Ü˜#œ×/Ñ/°C×4JÑ4J×4LÑ4LØ×-Ñ-Ó/Ð/Ü˜C¤×.Ñ.°s·y·yà�	ä˜3Ô 1×2Ñ2Ü˜sŸz™z¬=×9Ñ9Ü˜sŸz™zŸ™´
×;Ñ;Ø—J‘J—O‘O×*Ñ*¨nÓ<à—z‘z×.Ñ.¨s¯z©z×/?Ñ/?Ñ@Ð@ä%Ð%r'   )r   r”   )	rL   rQ   rF   r¢   r›   Únew_argsÚkÚvÚ
new_kwargss	   `        r(   rY   Ú!OptimizerVariable.get_python_args×   se   ø€ ð
	&œð 	&¤÷ 	&ñ  -1Ó1ªD S�G˜C–L©DˆÐ1Ø06·±´Ô?²©¨�a˜ ›’m±ˆ
Ñ?àÐ#Ð#ùò 2ùÛ?s   šAÁ Ac                 óÜ   • U R                   R                  R                  5        HD  u  pSU;   d  M  US   R                  (       d  M#  US   R	                  UR
                  5      US'   MF     g )NÚstep)rE   r‰   r”   Úis_cpuÚtor4   )rL   rr   r‰   s      r(   rX   Ú"OptimizerVariable.move_step_if_cpuö   sS   € ØŸ
™
×(Ñ(×.Ñ.Ö0‰HˆAØ˜� 5¨¡=×#7×#7Ñ#7Ø % f¡× 0Ñ 0°·±Ó :��f“ò 1r'   c                 óR	  ^• SSK Jm  SSKJn  0 U l        0 U l        S[        SS 4U4S jjn[        [        R                  X0R                  R                  5        U R                  =(       a    [        U R                  S5      nUR                  [        R                   " XR                  R"                  U5      5      nU R                  =(       a    [        U R                  S	5      n[        R                   " XR                  R                  U5      nUR%                  5         Uc   eUR&                  R(                  R+                  U5        [-        U R                  R"                  UR.                  5       GH,  u  p‰[1        US
   5      S:”  aµ  US
    H¬  n
U
R2                  c  M  S n[5        U R                  R                  R7                  5       5       H  u  pÍXÚL d  M  Un  O   U(       d  M[  UR                  [        R                   " UU R                  R                  U
   [9        U[;        Xk5      5      5      5          O   U	R=                  U[>        R@                  " S
5      5      nSn/ n[-        US
   URC                  U5      5       H¬  u  nnUR                  nUU R
                  U'   [E        US5      nUR2                  bJ  UU R                  UR2                  '   [G        UR2                  5      (       d  SnURI                  U5        M‚  M„  [K        URM                  [N        RP                  5      5        M®     U(       a  GMÏ  [R        RU                  [V        RX                  5      (       d  GMú  U Vs/ s H  nURZ                  PM     nn[R        R]                  SU5        GM/     [5        U R                  R                  R_                  5       5       HÌ  u  nn[9        U[;        UU5      5      nUR&                  R(                  R+                  U5        [5        UR_                  5       5       Hn  u  nn[a        U[        R                  5      (       d  M'  UU R                  ;  d  M9  UU R
                  ;  d  MK  [9        U[;        UU5      5      U R
                  U'   Mp     MÎ     g s  snf )Nr   ri   r   r„   r.   r/   c                 ó   >• T" U SS9  g )NTrl   r    )r.   rj   s    €r(   Úmark_staticÚEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_static  s   ø€ Ù ¨Ó.r'   rh   r‰   rk   r   TÚgradF)zÏGrad tensors %s will be copied during cudagraphs execution.If using cudagraphs and the grad tensor addresses will be the same across runs, use torch._dynamo.decorators.mark_static_address to elide this copy.)1rn   rj   Úlazyr…   rB   rC   r   r
   r6   ÚTensorrE   r‰   rg   r   r’   r   r“   rh   Úrealizerz   Úguard_on_key_orderÚaddÚzipr”   Úlenr²   Ú	enumerateÚkeysr   r   Úgetitem_constr   r_   Úunpack_var_sequencer   r>   Úappendr   Ú
make_guardr   ÚCONSTANT_MATCHÚperf_hint_logÚisEnabledForÚloggingÚDEBUGrP   ÚwarningÚvaluesr�   )rL   rO   r…   r°   Úparams_groups_sourcer–   Ústate_sourceÚstate_vtrq   Úgroup_vtÚparamÚ	key_indexÚir¥   Ú	params_vtÚ
all_staticÚnon_static_gradsrr   Úp_vtÚparam_sourceÚgrad_sourceÚsrcÚnon_static_grad_namesÚidxrE   Úp_state_sourceÚ	inner_idxr¦   rj   s                               @r(   rZ   Ú0OptimizerVariable.map_sources_and_install_guardsû   sÀ  ø€ Ý4Ý-à ˆÔØ "ˆÔð	/œ3ð 	/ 4÷ 	/ô 	”e—l‘l K·±×1AÑ1AÔBð  $Ÿ{™{×V¬z¸$¿+¹+À~Ó/VÐØ-×9Ñ9Ü×!Ò! "§j¡j×&=Ñ&=Ð?SÓTó
ˆð —{‘{×G¤z°$·+±+¸wÓ'GˆÜ"×(Ò(¨¯Z©Z×-=Ñ-=¸|ÓLˆð 	×ÑÔØÑ'Ð'Ð'Ø
�	‰	×$Ñ$×(Ñ(¨Ô6ô  # 4§:¡:×#:Ñ#:¸O×<QÑ<Q×R‰OˆEô �5˜‘?Ó# aÓ'Ø" 8œ_�EØ—z‘zÓ-Ø$(˜	Ü$-¨d¯j©j×.>Ñ.>×.CÑ.CÓ.EÖ$F™D˜AØ œzØ,- 	Ù %ñ %G÷ %˜9Ø/×;Ñ;Ü /× 5Ò 5Ø$&Ø$(§J¡J×$4Ñ$4°UÑ$;Ü$5Ø(4Ü(:¸<Ó(Só%&ó!"ô	ñ "ñ% -ð( !×.Ñ.¨rÔ3C×3JÒ3JÈ8Ó3TÓUˆIØˆJØ!ÐÜ˜u X™°	×0MÑ0MÈbÓ0QÖR‘��4Ø#Ÿ{™{�Ø+7�×%Ñ% aÑ(Ü(Ø Øó�ð
 —6‘6Ñ%Ø2=�D×'Ñ'¨¯©Ñ/Ü4°Q·V±V×<Ñ<Ø%*˜
Ø(×/Ñ/°Ö<ñ =ô " +×"8Ñ"8¼×9TÑ9TÓ"UÖVñ S÷$ ‘:¤-×"<Ñ"<¼W¿]¹]×"KÔ"KÙ=MÓ(NÒ=M°c¨¯¬Ñ=MÐ%Ð(NÜ×%Ñ%ðð
 *÷ñ_  Sôt $ D§J¡J×$4Ñ$4×$;Ñ$;Ó$=Ö>‰JˆC�Ü.ØÔ0°¸sÓCóˆNð �I‰I×(Ñ(×,Ñ,¨^Ô<Ü )¨%¯,©,«.Ö 9‘�	˜1ä˜q¤%§,¡,×/Ó/Ø ×!4Ñ!4Õ4Ø ×!6Ñ!6Õ6ä/@Ø&Ô(:¸>È9Ó(Uó0�D×)Ñ)¨!Ó,ó !:ò ?ùò )Os   Í3R$Útensor_valuec                 ó  • SSK Jn  X R                  ;   aU  U" USS9  U R                  U   nU R                  R	                  UR
                  R                  UR                  5      5        O…X R                  ;   a  U R                  U   nOfU" USS9  UR                  [        U5      n[        U5      nU R                  R	                  UR
                  R                  UR                  5      5        [        R                  " XU5      $ )z%Wrap state tensor in a TensorVariabler   ri   Trl   )rn   rj   rC   rD   r·   rz   Úmodule_key_namerP   rB   r]   r   r   r   r“   )rL   rO   rÚ   rj   rg   Úglobal_names         r(   Úwrap_tensorÚOptimizerVariable.wrap_tensorb  sÕ   € õ 	5ð ×0Ñ0Ó0á °DÒ9Ø×*Ñ*¨<Ñ8ˆFØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ6Ç;Á;Ó)OÕPØ×0Ñ0Ó0Ø×(Ñ(¨Ñ6‰Fñ   °DÒ9à×7Ñ7Ô8IÈ<ÓXˆKÜ(¨Ó5ˆFØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ6Ç;Á;Ó)OÔPä×$Ò$ R°vÓ>Ð>r'   r`   ra   c           	      óP  • [        X$5       GH  u  pg[        U[        5      (       d  M  [        U[        5      (       d   S5       e[	        U5       HÎ  u  p‰UR
                  R                  R                  U5        [        U	[        R                  5      (       a,  UR                  R                  U R                  X5      5        Mu  UR                  =(       a    [        UR                  U5      n
UR                  R                  [        R                   " XU
5      5        MÐ     GM     g)z7Update the args and kwargs to the traced optimizer callz-py_arg should be a list in optimizer variableN)r¸   r�   r   Úlistrº   rz   r{   Úmutationr6   r´   r”   r¾   rÞ   rg   r   r   r“   )rL   rO   rQ   rF   r`   ra   r›   Úpy_argrÍ   Úvalrg   s              r(   r[   Ú"OptimizerVariable.update_list_args~  sÐ   € ô ˜t×-‰KˆCÜ˜#œ|×,Ó,Ü! &¬$×/Ñ/ð ØCóÐ/ô (¨Ö/‘F�AØ—I‘I×*Ñ*×3Ñ3°CÔ8Ü! #¤u§|¡|×4Ñ4ØŸ	™	×(Ñ(¨×)9Ñ)9¸"Ó)BÖCà!$§¡×!L´¸c¿j¹jÈ!Ó0L˜ØŸ	™	×(Ñ(¬×)>Ò)>¸rÈÓ)OÖPô 0ò .r'   c                 óè   ^^^• U R                   mU R                  mUR                  R                  mS[        R
                  R                  SS 4UUU4S jjnUR                  R                  U5        g )NÚgmr/   c                 óJ   >^ • SU UU4S jjn[         R                  " TU5        g )Nc                  ó8  >• T H“  n TR                   R                  U S 5        TR                  R                  U S 5        TR                  (       a  TR                  R	                  5         TR
                  (       d  My  TR
                  R	                  5         M•     g rH   )Ú_buffersÚpopÚ_parametersÚparams_flatÚclearÚparams_flat_unwrap_subclasses)rP   rç   Únames_to_deleteÚtcs    €€€r(   Úclear_static_tensor_refsÚ\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refsš  sh   ø€ Û+�DØ—K‘K—O‘O D¨$Ô/Ø—N‘N×&Ñ& t¨TÔ2Ø—~—~ØŸ™×,Ñ,Ô.Ø×7×7Ñ7Ø×8Ñ8×>Ñ>Ö@ò ,r'   ©r/   N)ÚweakrefÚfinalize)rç   rò   rð   rñ   rE   s   ` €€€r(   Úinit_finalizerÚ:OptimizerVariable.create_finalizer.<locals>.init_finalizer™  s"   ù€ ÷Añ Aô ×Ò˜UÐ$<Õ=r'   )rD   rE   rz   Útracing_contextr6   ÚfxÚGraphModuleÚadd_graph_finalizer)rL   rO   r÷   rð   rñ   rE   s      @@@r(   r^   Ú"OptimizerVariable.create_finalizer”  s\   ú€ Ø×2Ñ2ˆØ—
‘
ˆØ�Y‰Y×&Ñ&ˆð
	>œuŸx™x×3Ñ3ð 
	>¸÷ 
	>ñ 
	>ð 	�	‰	×%Ñ% nÕ5r'   )rB   rD   rC   rE   )NNN)rO   r   r/   Nrô   )#r"   r#   r$   r%   r   Ú_nonvar_fieldsr6   ÚoptimÚ	Optimizerr   r�   r   r   rK   r�   r´   r   rJ   rá   r   rV   rp   rW   ro   ÚtuplerY   rX   rZ   r   rÞ   r   r[   r^   r&   Ú__classcell__)rM   s   @r(   r@   r@   V   sÓ  ø† àØØðð 
#×	1Ñ	1ð	€Nð ;?Ø26ØAEñ@à�{‰{×$Ñ$ð@ð !  c¨: oÑ!6Ñ7ð@ð & c¨#¡hÑ/ð	@ð
 # 4¨¯©°fÐ(<Ñ#=Ñ>ð@ð ð@ð 
÷@ð @ð";à#ð";ð ð";ð �?Ñ#ð	";ð
 �S˜/Ð)Ñ*ð";ð 
÷";ðH-Ð5ð -¸Sð -À_÷ -ô&ô&Fð@$Øð$Ø$'ð$à	ˆt�C‰y˜$˜s C˜x™.Ð(Ñ	)ô$ô>;ô
eðN?Ø)ð?Ø9>¿¹ð?à	ô?ð8Qà#ðQð �Ñ'ðQð ð	Qð
 ˜#‘ðQð ðQð 
ôQ÷,6ò 6r'   r@   )5Ú__doc__rÃ   rõ   Úcollections.abcr   Útypingr   r   r   r6   Útorch._dynamo.variables.tensorr   Útorch._guardsr   Útorch._loggingr	   Útorch.utils._pytreer
   Úguardsr   r   rg   r   r   r   r   r   r   r8   r   r    r   Úconstantr   Údictsr   Úlistsr   Úmiscr   Úuser_definedr   Útorch._dynamo.symbolic_convertr   Ú	Exceptionr   r+   r"   rÁ   r´   r‘   r>   r@   r    r'   r(   Ú<module>r     s¢   ðñó, Û Ý $ß /Ñ /ã Ý 9Ý  Ý ,Ý -ç 0÷÷ õ &Ý !Ý &Ý $Ý Ý !Ý 3ö ÝDô	˜)ô 	ô	˜Iô 	ñ " (¨LÓ9€ð §¡ð °$ô ô&O6Ð1õ O6r'   