Ë
    L²jÔE  ã                   ó„  — 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 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-«      Z/ ee0d«      Z1dejd                  de3fd„Z4 G d„ de*«      Z5y) 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é   )ÚVariableTracker)ÚConstantVariable)ÚConstDictVariable)ÚHashableTracker)ÚListVariable)ÚGetAttrVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslatorc                   ó   — e Zd Zy)ÚArgMappingExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    ú`/var/www/html/ia-enhanced/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                  ry || j                  j                  d«      }t
        j                  j                  j                  | «      d u}|r-|j                  €J ‚|xs |j                  j                  | «      S |S y)Nr   )Úget_managerFT)Útorch._inductor.cudagraph_treesr-   Úis_cudaÚdeviceÚindexÚtorchÚ_dynamoÚutilsÚget_static_address_typeÚcurrent_nodeÚ_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ÐÙØ×'Ñ'Ð3Ð3Ð3à!ò 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__r@   r=   r>   Úsetr?   )Úselfr@   r=   r?   r>   rA   Ú	__class__s         €r%   rE   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)Úhasattrr@   rD   Úcall_methodÚgraph_break_if_pending_mutationÚmove_step_if_cpuÚget_python_argsrM   Úmap_sources_and_install_guardsÚupdate_list_argsÚidÚstore_global_weakref_by_idÚcreate_finalizerr   Úcreater   r(   )rG   rI   rJ   rK   rA   Úpy_argsÚ	py_kwargsÚret_valÚmangled_nameÚ_rH   s             €r%   rP   zOptimizerVariable.call_methodn   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           
      ó^  •— |dv rN| j                   sJ ‚t        | |t        t        | j                  |«      «      t        | j                   |«      ¬«      S |dk(  rFddlm} | j                  j                  D ]  }|d   D ]  } ||d¬«       Œ Œ | j                  |«       t        ‰| �-  ||«      S )	NrM   )Úpy_typeÚsourceÚparam_groupsr
   ©Úmark_static_addressÚparamsT©Úguard)ra   r   ÚtypeÚgetattrr@   r   Ú
decoratorsrd   rb   Ú_set_capturablerD   Úvar_getattr)rG   rI   rJ   rd   ÚgroupÚprH   s         €r%   rl   zOptimizerVariable.var_getattr’   s²   ø€ ð �MÑ"Ø—;’;Ð�;Ü"ØØÜœ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 )	Nre   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)
r@   rb   ÚoutputÚside_effectsÚid_to_variableÚgetrV   Úhas_pending_mutationÚexcrp   )rG   rI   Úgrn   rv   Úvariablerp   s          r%   rQ   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   ©ÚLazyVariableTrackerrm   r+   c                 óÂ   •— d}d}| j                  dg «      D ]:  }||j                  xs |j                  z  }||‰j                  j                  vz  }Œ< d| v xr |xr |S )NTre   Ú
capturable)rx   r/   Úis_xpur@   Ústate)rm   Úall_uninitializedÚall_gpurn   rG   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�   rb   )Ú r   ÚdictÚstrr   Úboolr@   rb   ra   r   Úrealize_allr   ÚbuildÚitemsr   r   rY   )	rG   rI   r   r†   rm   ra   Úparam_groups_vtÚparam_group_vtÚkeys	   `        r%   rk   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        ‚)Nrb   )Ú
isinstancer   Úis_python_constantÚas_python_constantr   r�   r   ra   r   Úbaser   Úmemberr@   rb   r1   r   )r’   rG   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�   )	rG   rK   rA   r™   r’   Únew_argsÚkÚvÚ
new_kwargss	   `        r%   rS   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)r@   rƒ   r�   Úis_cpuÚtor0   )rG   rn   rƒ   s      r%   rR   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%                  «        |€J ‚|j&                  j(                  j+                  |«       t-        | j                  j"                  |j.                  «      D �]  \  }}	t1        |d
   «      dkD  r«|d
   D ]£  }
|
j2                  €Œd }t5        | j                  j                  j7                  «       «      D ]  \  }}||
u sŒ|} n |sŒR|j                  t        j                   || j                  j                  |
   t9        |t;        ||«      «      «      «        n |	j=                  |t?        j@                  d
«      «      }d}g }t-        |d
   |jC                  |«      «      D ]£  \  }}|j                  }|| j
                  |<   tE        |d«      }|j2                  �C|| j                  |j2                  <   tG        |j2                  «      rŒhd}|jI                  |«       Œ|tK        |jM                  tN        jP                  «      «       Œ¥ |r�Œ´tR        jU                  tV        jX                  «      s�ŒÙ|D �cg c]  }|jZ                  ‘Œ }}tR        j]                  d|«       �Œ
 t5        | j                  j                  j_                  «       «      D ]½  \  }}t9        |t;        ||«      «      }|j&                  j(                  j+                  |«       t5        |j_                  «       «      D ]a  \  }}ta        |t        j                  «      sŒ!|| j                  vsŒ0|| j
                  vsŒ?t9        |t;        ||«      «      | j
                  |<   Œc Œ¿ y c c}w )Nr
   rc   r   r~   r*   r+   c                 ó   •—  ‰| d¬«       y )NTrf   r#   )r*   rd   s    €r%   Úmark_staticzEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_static  s   ø€ Ù ¨Ö.r$   rb   rƒ   re   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.)1rj   rd   Úlazyr   r=   r>   r   r	   r2   ÚTensorr@   rƒ   ra   r   r‹   r   rŒ   rb   Úrealizeru   Úguard_on_key_orderÚaddÚzipr�   Úlenr¥   Ú	enumerateÚkeysr   r   Úgetitem_constr   rY   Úunpack_var_sequencer   r:   Úappendr   Ú
make_guardr   ÚCONSTANT_MATCHÚperf_hint_logÚisEnabledForÚloggingÚDEBUGrJ   ÚwarningÚvaluesr”   )rG   rI   r   r¤   Úparams_groups_sourcerŽ   Ústate_sourceÚstate_vtrm   Úgroup_vtÚparamÚ	key_indexÚir›   Ú	params_vtÚ
all_staticÚnon_static_gradsrn   Úp_vtÚparam_sourceÚgrad_sourceÚsrcÚnon_static_grad_namesÚidxr@   Úp_state_sourceÚ	inner_idxrœ   rd   s                               @r%   rT   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ˆð 	×ÑÔØÐ'Ð'Ð'Ø
�	‰	×$Ñ$×(Ñ(¨Ô6ô  # 4§:¡:×#:Ñ#:¸O×<QÑ<QÓRó 6	‰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™°	×0MÑ0MÈbÓ0QÓRò W‘��4Ø#Ÿ{™{�Ø+7�×%Ñ% aÑ(Ü(Ø Øó�ð
 —6‘6Ð%Ø2=�D×'Ñ'¨¯©Ñ/Ü4°Q·V±VÕ<Ø%*˜
Ø(×/Ñ/°Õ<ä! +×"8Ñ"8¼×9TÑ9TÓ"UÕVðWó$ ¤-×"<Ñ"<¼W¿]¹]Ö"KØ=MÖ(N°c¨¯«Ð(NÐ%Ð(NÜ×%Ñ%ðð
 *öð_6	ô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   ÍQ"Ú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
   rc   Trf   )rj   rd   r>   r?   rª   ru   Úmodule_key_namerJ   r=   rW   r   r   r   rŒ   )rG   rI   rÌ   rd   ra   Úglobal_names         r%   Úwrap_tensorzOptimizerVariable.wrap_tensorf  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$   rZ   r[   c           	      ó$  — t        ||«      D �]   \  }}t        |t        «      sŒt        |t        «      sJ 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   Úlistr­   ru   rv   Úmutationr2   r§   r�   r±   rÐ   ra   r   r   rŒ   )rG   rI   rK   rA   rZ   r[   r’   Úpy_argrÀ   Úvalra   s              r%   rU   z"OptimizerVariable.update_list_args‚  sß   € ô ˜t WÓ-ó 	Q‰KˆC�Ü˜#œ|Õ,Ü! &¬$Ô/ð ØCóÐ/ô (¨Ó/ò 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 rC   )Ú_buffersÚpopÚ_parametersÚparams_flatÚclearÚparams_flat_unwrap_subclasses)rJ   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á   r@   s   ` €€€r%   Úinit_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizer�  s   ù€ ÷Aô ×Ñ˜UÐ$<Õ=r$   )r?   r@   ru   Útracing_contextr2   ÚfxÚGraphModuleÚadd_graph_finalizer)rG   rI   ræ   rà   rá   r@   s      @@@r%   rX   z"OptimizerVariable.create_finalizer˜  sW   ú€ Ø×2Ñ2ˆØ—
‘
ˆØ�Y‰Y×&Ñ&ˆð
	>œuŸx™x×3Ñ3ð 
	>¸÷ 
	>ð 	�	‰	×%Ñ% nÕ5r$   )NNN)rI   r   r+   Nrã   ) r    r!   r"   r   Ú_nonvar_fieldsr2   ÚoptimÚ	Optimizerrˆ   r   r   rF   r‰   r§   r   rE   rÒ   r   rP   rl   rQ   rk   ÚtuplerS   rR   rT   r   rÐ   r   rU   rX   Ú__classcell__)rH   s   @r%   r<   r<   W   sÆ  ø„ àØØðð 
#×	1Ñ	1ð	€Nð 8<Ø/3Ø>Bñ@à�{‰{×$Ñ$ð@ð ˜S *˜_Ñ-°Ñ4ð@ð ! ™X¨™_ð	@ð
 ˜uŸ|™|¨VÐ3Ñ4°tÑ;ð@ð ð@ð 
õ@ð";à#ð";ð ð";ð �?Ñ#ð	";ð
 �S˜/Ð)Ñ*ð";ð 
õ";ðH-Ð5ð -¸Sð -À_õ -ó0ó&Fð<$Øð$Ø$'ð$à	ˆt�C‰y˜$˜s C˜x™.Ð(Ñ	)ó$ó>;ó
eðN?Ø)ð?Ø9>¿¹ð?à	ó?ð8Qà#ðQð �Ñ'ðQð ð	Qð
 ˜#‘ðQð ðQð 
óQ÷,6r$   r<   )6Ú__doc__r¶   rä   Úcollections.abcr   Útypingr   r   r2   Útorch._dynamo.variables.tensorr   Útorch._guardsr   Útorch._loggingr   Útorch.utils._pytreer	   Úguardsr   r   ra   r   r   r   r   r   r   r4   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÷÷ õ &Ý !Ý &Ý $Ý %Ý Ý !Ý 3ñ ÝDô	˜)ô 	ô	˜Iô 	ñ " (¨LÓ9€ð §¡ð °$ó ô&R6Ð1õ R6r$   