§
    ŠŠtjÁ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j3        de4fd„Z5 G d„ de+¦  «        Z6dS ) 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dS )ÚArgMappingExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/variables/optimizer.pyr   r   9   ó   € € € € € Ø€Dr%   r   c                   ó   — e Zd ZdS )ÚGuardInstallExceptionNr    r$   r%   r&   r)   r)   =   r'   r%   r)   Ú
perf_hintsÚxÚreturnc                 ó  — ddl m} | j        rr || j        j        d¦  «        }t
          j        j                             | ¦  «        d u}|r2|j	        €t          d¦  «        ‚|p|j	                             | ¦  «        S |S dS )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ð Ø�+˜aœhœn¨eÑ4Ô4ˆÝ!œMÔ/×GÒGÈÑJÔJÐRVÐVÐØð 	%ØÔ#Ð+Ý$Ð%MÑNÔNÐNà!ð JØÔ'×FÒFÀqÑIÔIðð
 %Ð$ð ˆtr%   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          ¦   «         j        |fi |¤Ž || _        |pi | _        |pi | _        |pt          ¦   «         | _        d S ©N)ÚsuperÚ__init__rB   r?   r@   ÚsetrA   )ÚselfrB   r?   rA   r@   rC   Ú	__class__s         €r&   rG   zOptimizerVariable.__init__`   s\   ø€ ð 	�‰ŒÔ˜Ð)Ð) &Ð)Ð)Ð)à,1ˆŒ
Ø,Ð2°ˆÔØ 0Ð 6°BˆÔØ#6Ð#?½#¹%¼%ˆÔ Ð Ð r%   Útxr   ÚnameÚargsr   c                 ó²  •— |dk    �r,t          | j        d¦  «        s$t          ¦   «                              ||||¦  «        S 	 |                      |¦  «         |                      ¦   «           | j        |i |¤Ž\  }} | j        j        |i |¤Ž}|                      |¦  «         |  	                    |||||¦  «         dt          | j        ¦  «        › �}|                     || j        ¦  «         |                      |¦  «         t          j        |¦  «        S # t          t           f$ r
}	Y d}	~	nd}	~	ww xY wt          ¦   «                              ||||¦  «        S )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   sy  ø€ ð �=Ò Ñ Ý˜4œ: }Ñ5Ô5ð Cå‘w”w×*Ò*¨2¨t°T¸6ÑBÔBÐBðØ×4Ò4°RÑ8Ô8Ð8Ø×%Ò%Ñ'Ô'Ð'Ø%9 TÔ%9¸4Ð%JÀ6Ð%JÐ%JÑ"�˜Ø0˜$œ*Ô0°'ÐG¸YÐGÐG�Ø×3Ò3°BÑ7Ô7Ð7Ø×%Ò% b¨$°¸ÀÑKÔKÐKð  ?­b°´©n¬nÐ>Ð>�Ø×-Ò-¨l¸D¼JÑGÔGÐGØ×%Ò% bÑ)Ô)Ð)õ (Ô.¨wÑ7Ô7Ð7øÝ'Õ)>Ð?ð ð ð à����øøøøðøøøõ ‰wŒw×"Ò" 2 t¨T°6Ñ:Ô:Ð:s   ÁCD ÄD2Ä-D2c           
      ó˜  •— |dv r\| j         st          d¦  «        ‚t          | |t          t	          | j        |¦  «        ¦  «        t          | j         |¦  «        ¬¦  «        S |dk    rBddlm} | j        j	        D ]}|d         D ]} ||d¬	¦  «         ŒŒ|  
                    |¦  «         t          ¦   «                              ||¦  «        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°Ñ6Ô6Ñ7Ô7Ý! $¤+¨tÑ4Ô4ð	ñ ô ð ð �>Ò!Ð!Ø8Ð8Ð8Ð8Ð8Ð8àœÔ0ð 7ð 7�Ø˜xœð 7ð 7�AØ'Ð'¨°Ð6Ñ6Ô6Ð6Ð6ð7ð × Ò  Ñ$Ô$Ð$å‰wŒw×"Ò" 2 tÑ,Ô,Ð,r%   c           	      ó  — | j         j        D ]s}|d         D ]h}|j        j        }|j                             t          |¦  «        d ¦  «        }|r0|                     |¦  «        rddlm	}  |dd|› d|› �dg ¬¦  «         ŒiŒtd S )	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Ô5�Ø'Ô6×:Ò:½2¸a¹5¼5À$ÑGÔG�Øð  × AÒ AÀ(Ñ KÔ Kð Ø3Ð3Ð3Ð3Ð3Ð3à!�MØ JØ G¨XÐ GÐ GÀAÐ GÐ GØ$yØ ð	ñ ô ð øðð	ð 	r%   c                 óÊ  ‡ — ddl m} dt          t          t          f         dt
          fˆ fd„}‰ j        j        D ]} ||¦  «        rd|d<   Œ‰ j        ot          ‰ j        d¦  «        }| 
                    t          j        |‰ j        j        |¦  «        ¦  «        }|j        D ]?}t          t          j        d¦  «        ¦  «        }t          j        d¦  «        |j        |<   Œ@d S )	Nr   ©ÚLazyVariableTrackerro   r,   c                 ó’   •— d}d}|                       dg ¦  «        D ]$}||j        p|j        z  }||‰j        j        vz  }Œ%d| v o|o|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È   sl   ø€ Ø $ÐØˆGà—Y’Y˜x¨Ñ,Ô,ð ?ð ?�Ø˜1œ9Ð0¨¬Ñ0�Ø! Q¨d¬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ð 	Kð 	Kð 	Kð 	Kð 	Kð ”ZÔ,ð 	+ð 	+ˆEØ%Ð% eÑ,Ô,ð +Ø&*��lÑ#øà”ÐH¥¨D¬K¸Ñ!HÔ!HˆØ-×9Ò9ÝÔ! " d¤jÔ&=¸vÑFÔFñ
ô 
ˆð .Ô3ð 	Fð 	FˆNÝ!Õ"2Ô"9¸,Ñ"GÔ"GÑHÔHˆCÝ(8Ô(?ÀÑ(EÔ(EˆNÔ  Ñ%Ð%ð	Fð 	Fr%   c                 ó’   ‡ ‡— dt           dt           fˆ fd„Šˆfd„|D ¦   «         }ˆfd„|                     ¦   «         D ¦   «         }||fS )z9Get python values equivalent to the variable tracker argsÚargr,   c                 óÆ  •— t          | t          ¦  «        r(|                      ¦   «         r|                      ¦   «         S t          | t          ¦  «        r	| j        sg S t          | t          ¦  «        rjt          | j        t          ¦  «        rPt          | j        j	        t          ¦  «        r1| 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Ï   ø€ Ý˜#�Ñ/Ô/ð A°C×4JÒ4JÑ4LÔ4Lð AØ×-Ò-Ñ/Ô/Ð/Ý˜C¥Ñ.Ô.ð 	A°s´yð 	Aà�	å˜3Õ 1Ñ2Ô2ðAå˜sœz­=Ñ9Ô9ðAõ ˜sœzœµ
Ñ;Ô;ðAð ”J”OÔ*¨nÒ<Ð<à”zÔ.¨s¬zÔ/?Ô@Ð@å%Ð%r%   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r$   r$   )Ú.0r”   r›   s     €r&   ú
<listcomp>z5OptimizerVariable.get_python_args.<locals>.<listcomp>ö   s!   ø€ Ð1Ð1Ð1 S�G�G˜C‘L”LÐ1Ð1Ð1r%   c                 ó.   •— i | ]\  }}| ‰|¦  «        “ŒS r$   r$   )r�   ÚkÚvr›   s      €r&   ú
<dictcomp>z5OptimizerVariable.get_python_args.<locals>.<dictcomp>÷   s'   ø€ Ð?Ð?Ð?©¨¨1�a˜˜ ™œÐ?Ð?Ð?r%   )r   r�   )rI   rM   rC   Únew_argsÚ
new_kwargsr›   s   `    @r&   rU   z!OptimizerVariable.get_python_argsá   sw   øø€ ð
	&�ð 	&¥ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð  2Ð1Ð1Ð1¨DÐ1Ñ1Ô1ˆØ?Ð?Ð?Ð?°·²±´Ð?Ñ?Ô?ˆ
à˜Ð#Ð#r%   c                 ó¶   — | j         j                             ¦   «         D ]9\  }}d|v r0|d         j        r#|d                              |j        ¦  «        |d<   Œ:d S )NÚstep)rB   r…   r�   Úis_cpuÚtor1   )rI   rp   r…   s      r&   rT   z"OptimizerVariable.move_step_if_cpu   sb   € Øœ
Ô(×.Ò.Ñ0Ô0ð 	;ð 	;‰HˆAˆuØ˜ˆˆ 5¨¤=Ô#7ˆØ % f¤× 0Ò 0°´Ñ :Ô :��f‘øð	;ð 	;r%   c                 ój  ‡— ddl mŠ ddlm} i | _        i | _        dt          dd fˆfd„}t          t          j	        || j
        j        ¦  «         | j        ot          | j        d¦  «        }|                     t          j        || j
        j        |¦  «        ¦  «        }| j        ot          | j        d	¦  «        }t          j        || j
        j        |¦  «        }|                     ¦   «          |€t'          d
¦  «        ‚|j        j                             |¦  «         t/          | j
        j        |j        ¦  «        D �]\  }}	t3          |d         ¦  «        dk    r¦|d         D ]�}
|
j        �”d }t7          | j
        j                             ¦   «         ¦  «        D ]\  }}||
u r|} nŒ|rW|                     t          j        || j
        j        |
         t;          |t=          ||¦  «        ¦  «        ¦  «        ¦  «          nŒž|	                     |tA          j!        d¦  «        ¦  «        }d}g }t/          |d         tE          ||¦  «        ¦  «        D ]©\  }}|j        }|€t'          d|› d�¦  «        ‚|| j        |<   tG          |d¦  «        }|j        �;|| j        |j        <   tI          |j        ¦  «        sd}| %                    |¦  «         Œ}tM          | '                    tP          j)        ¦  «        ¦  «         Œª|sKtT           +                    tX          j-        ¦  «        r'd„ |D ¦   «         }tT           .                    d|¦  «         �Œt7          | j
        j         /                    ¦   «         ¦  «        D ]»\  }}t;          |t=          ||¦  «        ¦  «        }|j        j                             |¦  «         t7          | /                    ¦   «         ¦  «        D ]W\  }}ta          |t          j	        ¦  «        r8|| j        vr/|| j        vr&t;          |t=          ||¦  «        ¦  «        | j        |<   ŒXŒ¼d S )Nr
   re   r   r€   r+   r,   c                 ó"   •—  ‰| d¬¦  «         d S )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ÚgradFc                 ó   — g | ]	}|j         ‘Œ
S r$   )rL   )r�   Úsrcs     r&   rž   zDOptimizerVariable.map_sources_and_install_guards.<locals>.<listcomp>T  s   € Ð(NÐ(NÐ(N°c¨¬Ð(NÐ(NÐ(Nr%   )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.)1rl   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ÚDEBUGÚ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Únon_static_grad_namesÚidxrB   Úp_state_sourceÚ	inner_idxr¡   rf   s                              @r&   rV   z0OptimizerVariable.map_sources_and_install_guards  sš  ø€ Ø4Ð4Ð4Ð4Ð4Ð4Ø-Ð-Ð-Ð-Ð-Ð-à ˆÔØ "ˆÔð	/�3ð 	/ 4ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/õ 	•e”l K°´Ô1AÑBÔBÐBð  $œ{ÐV­z¸$¼+À~Ñ/VÔ/VÐØ-×9Ò9ÝÔ! " d¤jÔ&=Ð?SÑTÔTñ
ô 
ˆð ”{ÐG¥z°$´+¸wÑ'GÔ'GˆÝ"Ô(¨¨T¬ZÔ-=¸|ÑLÔLˆð 	×ÒÑÔÐØÐÝ Ð!@ÑAÔAÐAØ
Œ	Ô$×(Ò(¨Ñ6Ô6Ð6õ  # 4¤:Ô#:¸OÔ<QÑRÔRð 8	ñ 8	‰OˆE�8õ �5˜”?Ñ#Ô# aÒ'Ð'Ø" 8œ_ð "ð "�EØ”zÐ-Ø$(˜	Ý$-¨d¬jÔ.>×.CÒ.CÑ.EÔ.EÑ$FÔ$Fð &ð &™D˜A˜qØ  E˜z˜zØ,- 	Ø % ð  *ð %ð "Ø/×;Ò;Ý /Ô 5Ø$&Ø$(¤JÔ$4°UÔ$;Ý$5Ø(4Ý(:¸<ÈÑ(SÔ(Sñ%&ô %&ñ!"ô !"ñ	ô 	ð 	ð "˜Eøà ×.Ò.¨rÕ3CÔ3JÈ8Ñ3TÔ3TÑUÔUˆIØˆJØ!ÐÝ˜u XœµÀÀIÑ0NÔ0NÑOÔOð Wð W‘��4Ø#œ{�ØÐ'Ý(Ð)L°!Ð)LÐ)LÐ)LÑMÔMÐMØ+7�Ô% aÑ(Ý(Ø Øñô �ð
 ”6Ð%Ø2=�DÔ'¨¬Ñ/Ý4°Q´VÑ<Ô<ð =Ø%*˜
Ø(×/Ò/°Ñ<Ô<Ð<øå! +×"8Ò"8½Ô9TÑ"UÔ"UÑVÔVÐVÐVð ð 	¥-×"<Ò"<½W¼]Ñ"KÔ"Kð 	Ø(NÐ(NÐ=MÐ(NÑ(NÔ(NÐ%Ý×%Ò%ðð
 *ñô ð ùõ $ D¤JÔ$4×$;Ò$;Ñ$=Ô$=Ñ>Ô>ð 	ð 	‰JˆC�Ý.ØÕ0°¸sÑCÔCñô ˆNð ŒIÔ(×,Ò,¨^Ñ<Ô<Ð<Ý )¨%¯,ª,©.¬.Ñ 9Ô 9ð ð ‘�	˜1å˜q¥%¤,Ñ/Ô/ðà Ô!4Ð4Ð4Ø Ô!6Ð6Ð6å/@Ø&Õ(:¸>È9Ñ(UÔ(Uñ0ô 0�DÔ)¨!Ñ,øðð	ð 	r%   Útensor_valuec                 óú  — ddl m} || j        v rR ||d¬¦  «         | j        |         }| j                             |j                             |j        ¦  «        ¦  «         n…|| j        v r| j        |         }nn ||d¬¦  «         | 	                    t          |¦  «        }t          |¦  «        }| 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Ð4Ð4Ð4Ð4ð ˜4Ô0Ð0Ð0àÐ °DÐ9Ñ9Ô9Ð9ØÔ*¨<Ô8ˆFØÔ$×(Ò(¨¬×)BÒ)BÀ6Ä;Ñ)OÔ)OÑPÔPÐPÐPØ˜TÔ0Ð0Ð0ØÔ(¨Ô6ˆFˆFð  Ð °DÐ9Ñ9Ô9Ð9à×7Ò7Õ8IÈ<ÑXÔXˆKÝ(¨Ñ5Ô5ˆFØÔ$×(Ò(¨¬×)BÒ)BÀ6Ä;Ñ)OÔ)OÑPÔPÐPåÔ$ R¨°vÑ>Ô>Ð>r%   r\   r]   c           	      ó6  — t          ||¦  «        D �]\  }}t          |t          ¦  «        rët          |t          ¦  «        st	          d¦  «        ‚t          |¦  «        D ]·\  }}	|j        j                             |¦  «         t          |	t          j
        ¦  «        r/|j                             |                      ||	¦  «        ¦  «         Œm|j        ot          |j        |¦  «        }
|j                             t!          j        ||	|
¦  «        ¦  «         Œ¸�ŒdS )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ñ 	Q‰KˆC�Ý˜#�|Ñ,Ô,ð QÝ! &­$Ñ/Ô/ð Ý(ØGñô ð õ (¨Ñ/Ô/ð Qð Q‘F�A�sØ”IÔ*×3Ò3°CÑ8Ô8Ð8Ý! #¥u¤|Ñ4Ô4ð QØœ	×(Ò(¨×)9Ò)9¸"¸cÑ)BÔ)BÑCÔCÐCÐCà!$¤Ð!Lµ¸c¼jÈ!Ñ0LÔ0L˜Øœ	×(Ò(­Ô)>¸rÀ3ÈÑ)OÔ)OÑPÔPÐPÐPùð	Qð 	Qr%   c                 óª   ‡‡‡— | j         Š| j        Š|j        j        Šdt          j        j        dd fˆˆˆfd„}|j                             |¦  «         d S )NÚgmr,   c                 óD   •‡ — dˆ ˆˆfd„}t          j        ‰|¦  «         d S )Nr,   c                  óþ   •— ‰D ]x} ‰j                              | d ¦  «         ‰j                             | d ¦  «         ‰j        r‰j                             ¦   «          ‰j        r‰j                             ¦   «          Œyd S 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¨  sŽ   ø€ Ø+ð Að A�DØ”K—O’O D¨$Ñ/Ô/Ð/Ø”N×&Ò& t¨TÑ2Ô2Ð2Ø”~ð /Øœ×,Ò,Ñ.Ô.Ð.ØÔ7ð AØÔ8×>Ò>Ñ@Ô@Ð@øðAð Ar%   ©r,   N)ÚweakrefÚfinalize)rÞ   ré   rç   rè   rB   s   ` €€€r&   Úinit_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizer§  sP   øø€ ðAð Að Að Að Að Að Að 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ˆØ”
ˆØŒYÔ&ˆð
	>�uœxÔ3ð 
	>¸ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 	Œ	×%Ò% nÑ5Ô5Ð5Ð5Ð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ð	€Nð 8<Ø/3Ø>Bð@ð @àŒ{Ô$ð@ð ˜S *˜_Ô-°Ñ4ð@ð ! œX¨™_ð	@ð
 ˜uœ|¨VÐ3Ô4°tÑ;ð@ð ð@ð 
ð@ð @ð @ð @ð @ð @ð";à'ð";ð ð";ð �?Ô#ð	";ð
 �S˜/Ð)Ô*ð";ð 
ð";ð ";ð ";ð ";ð ";ð ";ðH-Ø-ð-Ø58ð-à	ð-ð -ð -ð -ð -ð -ð:ð ð ð ð&Fð Fð Fð Fð<$Øð$Ø$'ð$à	ˆt�CŒy˜$˜s C˜xœ.Ð(Ô	)ð$ð $ð $ð $ð>;ð ;ð ;ð ;ð
hð hð hð hðT?Ø-ð?Ø=B¼\ð?à	ð?ð ?ð ?ð ?ð8Qà'ðQð �Ô'ðQð ð	Qð
 ˜#”ðQð ðQð 
ðQð Qð Qð Qð.6ð 6ð 6ð 6ð 6ð 6ð 6ð 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Ð 9Ð 9Ð 9Ð 9Ð 9Ø  Ð  Ð  Ð  Ð  Ð  Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø !Ð !Ð !Ð !Ð !Ð !Ø &Ð &Ð &Ð &Ð &Ð &Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ð IØHÐHÐHÐHÐHÐHð	ð 	ð 	ð 	ð 	˜)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜Iñ 	ô 	ð 	ð "Ð! (¨LÑ9Ô9€ð ¤ð °$ð ð ð ð ð([6ð [6ð [6ð [6ð [6Ð1ñ [6ô [6ð [6ð [6ð [6r%   