Ë
    ÃÓ^jÁG  ã                   óˆ  — d Z ddlZddlZddlmZ ddlmZmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ d	d
lmZmZ d	dlmZmZmZmZmZmZ d	dlmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ erddl,m-Z-  G d„ de.«      Z/ G d„ de.«      Z0 ee1d«      Z2dejf                  de4fd„Z5 G d„ de+«      Z6y) 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ÚTYPE_CHECKING)ÚTensorVariable)ÚSource)ÚgetArtifactLogger)Útree_map_onlyé   )ÚGuardBuilderÚinstall_guard)Ú
AttrSourceÚConstDictKeySourceÚDictGetItemSourceÚGetItemSourceÚGlobalWeakRefSourceÚ
GradSource)ÚGLOBAL_KEY_PREFIXÚunpack_iterableé   )ÚVariableTracker)ÚConstantVariable)ÚConstDictVariable)ÚHashableTracker)ÚListVariable)ÚGetAttrVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslatorBasec                   ó   — e Zd Zy)ÚArgMappingExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    úl/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/optimizer.pyr   r   9   ó   „ Ør%   r   c                   ó   — e Zd Zy)ÚGuardInstallExceptionNr    r$   r%   r&   r)   r)   =   r'   r%   r)   Ú
perf_hintsÚxÚreturnc                 ó,  — ddl m} | j                  r‚ || j                  j                  d«      }t
        j                  j                  j                  | «      d u}|r6|j                  €t        d«      ‚|xs |j                  j                  | «      S |S y)Nr   )Úget_managerFz&CUDA graph manager has no current nodeT)Útorch._inductor.cudagraph_treesr.   Úis_cudaÚdeviceÚindexÚtorchÚ_dynamoÚutilsÚget_static_address_typeÚcurrent_nodeÚAssertionErrorÚ_is_cuda_graph_recorded_tensor)r+   r.   ÚmanagerÚis_static_addresss       r&   Ú_is_static_for_cudagraphsr<   D   s‹   € Ý;à‡y‚yÙ˜aŸh™hŸn™n¨eÓ4ˆÜ!ŸM™M×/Ñ/×GÑGÈÓJÐRVÐVÐÙØ×#Ñ#Ð+Ü$Ð%MÓNÐNà!ò JØ×'Ñ'×FÑFÀqÓIðð
 %Ð$ð r%   c                   ó¼  ‡ — e Zd Zdddhej                  £Z	 	 	 ddej                  j                  dee	e
f   dz  dee   dz  deej                  ef   dz  de	ddfˆ fd„Zd	d
dedee   deeef   ddf
ˆ fd„Zd	d
dedefˆ fd„Zdd„Zdd„Zde	de	deee	   eee	f   f   fd„Zdd„Zdd„Zd	d
dej                  defd„Zd	d
dee   de	dee	   de	ddfd„Zdd„Zˆ xZS )ÚOptimizerVariableÚgrad_to_sourceÚtensor_to_sourceÚstatic_tensor_namesNÚvalueÚkwargsr,   c                 ó†   •— t        ‰| �  |fi |¤Ž || _        |xs i | _        |xs i | _        |xs
 t        «       | _        y ©N)ÚsuperÚ__init__rB   r?   r@   ÚsetrA   )ÚselfrB   r?   rA   r@   rC   Ú	__class__s         €r&   rG   zOptimizerVariable.__init__`   sG   ø€ ô 	‰Ñ˜Ñ) &Ò)à,1ˆŒ
Ø,Ò2°ˆÔØ 0Ò 6°BˆÔØ#6Ò#?¼#»%ˆÕ r%   Útxr   ÚnameÚargsr   c                 ó`  •— |dk(  rût        | j                  d«      st        ‰
| �  ||||«      S 	 | j	                  |«       | j                  «         | j                  |i |¤Ž\  }} | j                  j                  |i |¤Ž}| j                  |«       | j                  |||||«       dt        | j                  «      › �}|j                  || j                  «       | j                  |«       t        j                  |«      S t        ‰
| �  ||||«      S # t        t         f$ r
}	Y d}	~	Œ&d}	~	ww xY w)zVThis is an optimization to avoid tracing the very slow initialization of the optimizerÚ_init_groupÚ__optimizer_N)ÚhasattrrB   rF   Úcall_methodÚgraph_break_if_pending_mutationÚmove_step_if_cpuÚget_python_argsrO   Úmap_sources_and_install_guardsÚupdate_list_argsÚidÚstore_global_weakref_by_idÚcreate_finalizerr   Úcreater   r)   )rI   rK   rL   rM   rC   Úpy_argsÚ	py_kwargsÚret_valÚmangled_nameÚ_rJ   s             €r&   rR   zOptimizerVariable.call_methodo   s*  ø€ ð �=Ò Ü˜4Ÿ:™: }Ô5ä‘wÑ*¨2¨t°T¸6ÓBÐBðØ×4Ñ4°RÔ8Ø×%Ñ%Ô'Ø%9 T×%9Ñ%9¸4Ð%JÀ6Ñ%JÑ"�˜Ø0˜$Ÿ*™*×0Ñ0°'ÐG¸YÑG�Ø×3Ñ3°BÔ7Ø×%Ñ% b¨$°¸ÀÔKð ".¬b°·±«nÐ-=Ð>�Ø×-Ñ-¨l¸D¿J¹JÔGØ×%Ñ% bÔ)ô (×.Ñ.¨wÓ7Ð7ô
 ‰wÑ" 2 t¨T°6Ó:Ð:øô	 (Ô)>Ð?ò äûðús   °CD ÄD-Ä(D-c           
      óp  •— |dv rW| j                   st        d«      ‚t        | |t        t	        | j
                  |«      «      t        | j                   |«      ¬«      S |dk(  rFddlm} | j
                  j                  D ]  }|d   D ]  } ||d¬	«       Œ Œ | j                  |«       t        ‰| �1  ||«      S )
NrO   z3OptimizerVariable requires a source for var_getattr)Úpy_typeÚsourceÚparam_groupsr
   ©Úmark_static_addressÚparamsT©Úguard)rc   r8   r   ÚtypeÚgetattrrB   r   Ú
decoratorsrf   rd   Ú_set_capturablerF   Úvar_getattr)rI   rK   rL   rf   ÚgroupÚprJ   s         €r&   rn   zOptimizerVariable.var_getattr“   s¿   ø€ ð �MÑ"Ø—;’;Ü$ØIóð ô #ØØÜœW T§Z¡Z°Ó6Ó7Ü! $§+¡+¨tÓ4ô	ð ð �>Ò!Ý8àŸ™×0Ñ0ò 7�Ø˜x™ò 7�AÙ'¨°Ö6ñ7ð7ð × Ñ  Ô$ä‰wÑ" 2 tÓ,Ð,r%   c           	      ó  — | j                   j                  D ]t  }|d   D ]j  }|j                  j                  }|j                  j                  t        |«      d «      }|sŒA|j                  |«      sŒSddlm	}  |dd|› d|› �dg ¬«       Œl Œv y )	Nrg   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)
rB   rd   ÚoutputÚside_effectsÚid_to_variableÚgetrX   Úhas_pending_mutationÚexcrr   )rI   rK   Úgrp   rx   Úvariablerr   s          r&   rS   z1OptimizerVariable.graph_break_if_pending_mutation°   s�   € ð
 —‘×(Ñ(ò 	ˆAØ�x‘[ò �Ø!Ÿy™y×5Ñ5�Ø'×6Ñ6×:Ñ:¼2¸a»5À$ÓG�Ú × AÑ AÀ(Õ KÝ3á!Ø JØ",¨X¨J°mÀAÀ3Ð GØ$yØ ö	ññ	r%   c                 ó   ‡ — ddl m} dt        t        t        f   dt
        fˆ fd„}‰ j                  j                  D ]  } ||«      sŒd|d<   Œ ‰ j                  xr t        ‰ j                  d«      }|j                  t        j                  |‰ j                  j                  |«      «      }|j                  D ]B  }t        t        j                   d«      «      }t        j                   d«      |j                  |<   ŒD y )	Nr   ©ÚLazyVariableTrackerro   r,   c                 óÂ   •— d}d}| j                  dg «      D ]:  }||j                  xs |j                  z  }||‰j                  j                  vz  }Œ< d| v xr |xr |S )NTrg   Ú
capturable)rz   r0   Úis_xpurB   Ústate)ro   Úall_uninitializedÚall_gpurp   rI   s       €r&   Úsafe_to_set_capturablezAOptimizerVariable._set_capturable.<locals>.safe_to_set_capturableÈ   sq   ø€ Ø $ÐØˆGà—Y‘Y˜x¨Ó,ò ?�Ø˜1Ÿ9™9Ò0¨¯©Ñ0�Ø! Q¨d¯j©j×.>Ñ.>Ð%>Ñ>Ñ!ð?ð   5Ð(ÒJÐ->ÒJÀ7ÐJr%   Trƒ   rd   )Ú r�   ÚdictÚstrr   ÚboolrB   rd   rc   r   Úrealize_allr   ÚbuildÚitemsr   r   r[   )	rI   rK   r�   rˆ   ro   rc   Úparam_groups_vtÚparam_group_vtÚkeys	   `        r&   rm   z!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ò 	FˆNÜ!Ô"2×"9Ñ"9¸,Ó"GÓHˆCÜ(8×(?Ñ(?ÀÓ(EˆN× Ñ  Ò%ñ	Fr%   c                 óÂ   ‡ — dt         dt         fˆ fd„}|D �cg c]
  } ||«      ‘Œ }}|j                  «       D ��ci c]  \  }}| ||«      “Œ }}}||fS c c}w c c}}w )z9Get python values equivalent to the variable tracker argsÚargr,   c                 óè  •— t        | t        «      r | j                  «       r| j                  «       S t        | t        «      r| j
                  sg S t        | t        «      rŽt        | j                  t        «      rtt        | j                  j                  t        «      rP| j                  j                  j                  dk(  r-‰j                  j                  | j                  j                     S t        ‚)Nrd   )Ú
isinstancer   Úis_python_constantÚas_python_constantr   r�   r   rc   r   Úbaser   ÚmemberrB   rd   r2   r   )r”   rI   s    €r&   Úmap_argz2OptimizerVariable.get_python_args.<locals>.map_argæ   s¢   ø€ Ü˜#œÔ/°C×4JÑ4JÔ4LØ×-Ñ-Ó/Ð/Ü˜C¤Ô.°s·y²yà�	ä˜3Ô 1Ô2Ü˜sŸz™z¬=Ô9Ü˜sŸz™zŸ™´
Ô;Ø—J‘J—O‘O×*Ñ*¨nÒ<à—z‘z×.Ñ.¨s¯z©z×/?Ñ/?Ñ@Ð@ä%Ð%r%   )r   r�   )	rI   rM   rC   r›   r”   Únew_argsÚkÚvÚ
new_kwargss	   `        r&   rU   z!OptimizerVariable.get_python_argsá   sg   ø€ ð
	&œð 	&¤õ 	&ð  -1Ö1 S‘G˜C•LÐ1ˆÐ1Ø06·±³×?©¨¨1�a™ ›‘mÐ?ˆ
Ñ?à˜Ð#Ð#ùò 2ùÛ?s
   ˜A¼Ac                 óÈ   — | j                   j                  j                  «       D ];  \  }}d|v sŒ|d   j                  sŒ|d   j	                  |j
                  «      |d<   Œ= y )NÚstep)rB   r…   r�   Úis_cpuÚtor1   )rI   rp   r…   s      r&   rT   z"OptimizerVariable.move_step_if_cpu   sW   € ØŸ
™
×(Ñ(×.Ñ.Ó0ò 	;‰HˆAˆuØ˜Š 5¨¡=×#7Ó#7Ø % f¡× 0Ñ 0°·±Ó :��f’ñ	;r%   c                 óø  ‡— ddl mŠ ddlm} i | _        i | _        dt        dd fˆfd„}t        t        j                  || j                  j                  «       | j                  xr t        | j                  d«      }|j                  t        j                   || j                  j"                  |«      «      }| j                  xr t        | j                  d	«      }t        j                   || j                  j                  |«      }|j%                  «        |€t'        d
«      ‚|j(                  j*                  j-                  |«       t/        | j                  j"                  |j0                  «      D �]  \  }}	t3        |d   «      dkD  r«|d   D ]£  }
|
j4                  €Œd }t7        | j                  j                  j9                  «       «      D ]  \  }}||
u sŒ|} n |sŒR|j                  t        j                   || j                  j                  |
   t;        |t=        ||«      «      «      «        n |	j?                  |tA        jB                  d«      «      }d}g }t/        |d   tE        ||«      «      D ]´  \  }}|j                  }|€t'        d|› d�«      ‚|| j
                  |<   tG        |d«      }|j4                  �C|| j                  |j4                  <   tI        |j4                  «      rŒyd}|jK                  |«       Œ�tM        |jO                  tP        jR                  «      «       Œ¶ |r�ŒÀtT        jW                  tX        jZ                  «      s�Œå|D �cg c]  }|j\                  ‘Œ }}tT        j_                  d|«       �Œ t7        | j                  j                  ja                  «       «      D ]½  \  }}t;        |t=        ||«      «      }|j(                  j*                  j-                  |«       t7        |ja                  «       «      D ]a  \  }}tc        |t        j                  «      sŒ!|| j                  vsŒ0|| j
                  vsŒ?t;        |t=        ||«      «      | j
                  |<   Œc Œ¿ y c c}w )Nr
   re   r   r€   r+   r,   c                 ó   •—  ‰| d¬«       y )NTrh   r$   )r+   rf   s    €r&   Úmark_staticzEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_static  s   ø€ Ù ¨Ö.r%   rd   r…   zstate_source must not be Nonerg   r   Tzparam z does not have a sourceÚ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.)2rl   rf   Úlazyr�   r?   r@   r   r	   r3   ÚTensorrB   r…   rc   r   r�   r   rŽ   rd   Úrealizer8   rw   Úguard_on_key_orderÚaddÚzipr�   Úlenr§   Ú	enumerateÚkeysr   r   Úgetitem_constr   r[   r   r   r<   Úappendr   Ú
make_guardr   ÚCONSTANT_MATCHÚperf_hint_logÚisEnabledForÚloggingÚDEBUGrL   ÚwarningÚvaluesr–   )rI   rK   r�   r¦   Úparams_groups_sourcer�   Ústate_sourceÚstate_vtro   Úgroup_vtÚparamÚ	key_indexÚir�   Ú	params_vtÚ
all_staticÚnon_static_gradsrp   Úp_vtÚparam_sourceÚgrad_sourceÚsrcÚnon_static_grad_namesÚidxrB   Úp_state_sourceÚ	inner_idxrž   rf   s                               @r&   rV   z0OptimizerVariable.map_sources_and_install_guards  sñ  ø€ Ý4Ý-à ˆÔØ "ˆÔð	/œ3ð 	/ 4õ 	/ô 	”e—l‘l K°·±×1AÑ1AÔBð  $Ÿ{™{ÒV¬z¸$¿+¹+À~Ó/VÐØ-×9Ñ9Ü×!Ñ! " d§j¡j×&=Ñ&=Ð?SÓTó
ˆð —{‘{ÒG¤z°$·+±+¸wÓ'GˆÜ"×(Ñ(¨¨T¯Z©Z×-=Ñ-=¸|ÓLˆð 	×ÑÔØÐÜ Ð!@ÓAÐAØ
�	‰	×$Ñ$×(Ñ(¨Ô6ô  # 4§:¡:×#:Ñ#:¸O×<QÑ<QÓRó 8	‰OˆE�8ô �5˜‘?Ó# aÒ'Ø" 8™_ò "�EØ—z‘zÑ-Ø$(˜	Ü$-¨d¯j©j×.>Ñ.>×.CÑ.CÓ.EÓ$Fò &™D˜A˜qØ  EšzØ,- 	Ù %ð&ò %Ø/×;Ñ;Ü /× 5Ñ 5Ø$&Ø$(§J¡J×$4Ñ$4°UÑ$;Ü$5Ø(4Ü(:¸<ÈÓ(Só%&ó!"ô	ñ "ð%"ð( !×.Ñ.¨rÔ3C×3JÑ3JÈ8Ó3TÓUˆIØˆJØ!ÐÜ˜u X™´ÀÀIÓ0NÓOò W‘��4Ø#Ÿ{™{�ØÐ'Ü(¨6°!°Ð4KÐ)LÓMÐMØ+7�×%Ñ% aÑ(Ü(Ø Øó�ð
 —6‘6Ð%Ø2=�D×'Ñ'¨¯©Ñ/Ü4°Q·V±VÕ<Ø%*˜
Ø(×/Ñ/°Õ<ä! +×"8Ñ"8¼×9TÑ9TÓ"UÕVð!Wó( ¤-×"<Ñ"<¼W¿]¹]Ö"KØ=MÖ(N°c¨¯«Ð(NÐ%Ð(NÜ×%Ñ%ðð
 *öðc8	ôx $ 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   ÍQ7Útensor_valuec                 ó  — ddl m} || j                  v rX ||d¬«       | j                  |   }| j                  j	                  |j
                  j                  |j                  «      «       n‡|| j                  v r| j                  |   }ni ||d¬«       |j                  t        |«      }t        |«      }| j                  j	                  |j
                  j                  |j                  «      «       t        j                  |||«      S )z%Wrap state tensor in a TensorVariabler
   re   Trh   )rl   rf   r@   rA   r¬   rw   Úmodule_key_namerL   r?   rY   r   r   r   rŽ   )rI   rK   rÍ   rf   rc   Úglobal_names         r&   Úwrap_tensorzOptimizerVariable.wrap_tensoro  sÛ   € õ 	5ð ˜4×0Ñ0Ñ0á °DÕ9Ø×*Ñ*¨<Ñ8ˆFØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ6Ç;Á;Ó)OÕPØ˜T×0Ñ0Ñ0Ø×(Ñ(¨Ñ6‰Fñ   °DÕ9à×7Ñ7Ô8IÈ<ÓXˆKÜ(¨Ó5ˆFØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ6Ç;Á;Ó)OÔPä×$Ñ$ R¨°vÓ>Ð>r%   r\   r]   c           	      ó,  — t        ||«      D �]  \  }}t        |t        «      sŒt        |t        «      st	        d«      ‚t        |«      D ]Ä  \  }}	|j                  j                  j                  |«       t        |	t        j                  «      r,|j                  j                  | j                  ||	«      «       Œq|j                  xr t        |j                  |«      }
|j                  j                  t!        j"                  ||	|
«      «       ŒÆ �Œ y)z7Update the args and kwargs to the traced optimizer callz-py_arg should be a list in optimizer variableN)r­   r–   r   Úlistr8   r¯   rw   rx   Úmutationr3   r©   r�   r²   rÑ   rc   r   r   rŽ   )rI   rK   rM   rC   r\   r]   r”   Úpy_argrÁ   Úvalrc   s              r&   rW   z"OptimizerVariable.update_list_args‹  sß   € ô ˜t WÓ-ó 	Q‰KˆC�Ü˜#œ|Õ,Ü! &¬$Ô/Ü(ØGóð ô (¨Ó/ò Q‘F�A�sØ—I‘I×*Ñ*×3Ñ3°CÔ8Ü! #¤u§|¡|Ô4ØŸ	™	×(Ñ(¨×)9Ñ)9¸"¸cÓ)BÕCà!$§¡Ò!L´¸c¿j¹jÈ!Ó0L˜ØŸ	™	×(Ñ(¬×)>Ñ)>¸rÀ3ÈÓ)OÕPòQñ	Qr%   c                 óä   ‡‡‡— | j                   Š| j                  Š|j                  j                  Šdt        j
                  j                  dd fˆˆˆfd„}|j                  j                  |«       y )NÚgmr,   c                 óD   •‡ — dˆ ˆˆfd„}t        j                  ‰|«       y )Nc                  ó  •— ‰D ]‡  } ‰j                   j                  | d «       ‰j                  j                  | d «       ‰j                  r‰j                  j	                  «        ‰j
                  sŒn‰j
                  j	                  «        Œ‰ y rE   )Ú_buffersÚpopÚ_parametersÚparams_flatÚclearÚparams_flat_unwrap_subclasses)rL   rØ   Únames_to_deleteÚtcs    €€€r&   Úclear_static_tensor_refsz\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refs¨  sl   ø€ Ø+ò A�DØ—K‘K—O‘O D¨$Ô/Ø—N‘N×&Ñ& t¨TÔ2Ø—~’~ØŸ™×,Ñ,Ô.Ø×7Ó7Ø×8Ñ8×>Ñ>Õ@ñAr%   ©r,   N)ÚweakrefÚfinalize)rØ   rã   rá   râ   rB   s   ` €€€r&   Úinit_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizer§  s   ù€ ÷Aô ×Ñ˜UÐ$<Õ=r%   )rA   rB   rw   Útracing_contextr3   ÚfxÚGraphModuleÚadd_graph_finalizer)rI   rK   rç   rá   râ   rB   s      @@@r&   rZ   z"OptimizerVariable.create_finalizer¢  sW   ú€ Ø×2Ñ2ˆØ—
‘
ˆØ�Y‰Y×&Ñ&ˆð
	>œuŸx™x×3Ñ3ð 
	>¸÷ 
	>ð 	�	‰	×%Ñ% nÕ5r%   )NNN)rK   r   r,   Nrä   ) r!   r"   r#   r   Ú_nonvar_fieldsr3   ÚoptimÚ	OptimizerrŠ   r   r   rH   r‹   r©   r   rG   rÓ   r   rR   rn   rS   rm   ÚtuplerU   rT   rV   r   rÑ   r   rW   rZ   Ú__classcell__)rJ   s   @r&   r>   r>   X   sÈ  ø„ àØØðð 
#×	1Ñ	1ð	€Nð 8<Ø/3Ø>Bñ@à�{‰{×$Ñ$ð@ð ˜S *˜_Ñ-°Ñ4ð@ð ! ™X¨™_ð	@ð
 ˜uŸ|™|¨VÐ3Ñ4°tÑ;ð@ð ð@ð 
õ@ð";à'ð";ð ð";ð �?Ñ#ð	";ð
 �S˜/Ð)Ñ*ð";ð 
õ";ðH-Ø-ð-Ø58ð-à	õ-ó:ó&Fð<$Øð$Ø$'ð$à	ˆt�C‰y˜$˜s C˜x™.Ð(Ñ	)ó$ó>;ó
hðT?Ø-ð?Ø=B¿\¹\ð?à	ó?ð8Qà'ðQð �Ñ'ðQð ð	Qð
 ˜#‘ðQð ðQð 
óQ÷.6r%   r>   )7Ú__doc__r·   rå   Úcollections.abcr   Útypingr   r   r3   Útorch._dynamo.variables.tensorr   Útorch._guardsr   Útorch._loggingr   Útorch.utils._pytreer	   Úguardsr   r   rc   r   r   r   r   r   r   r5   r   r   r™   r   Úconstantr   Údictsr   Úhashabler   Úlistsr   Úmiscr   Úuser_definedr   Útorch._dynamo.symbolic_convertr   Ú	Exceptionr   r)   r!   rµ   r©   rŒ   r<   r>   r$   r%   r&   ú<module>r     s¢   ðñó, Û Ý $ß %ã Ý 9Ý  Ý ,Ý -ç 0÷÷ ÷ 7Ý !Ý &Ý $Ý %Ý Ý !Ý 3ñ ÝHô	˜)ô 	ô	˜Iô 	ñ " (¨LÓ9€ð §¡ð °$ó ô([6Ð1õ [6r%   