§
    ž²Åj‚>  ã                   óL  — d dl Z d dlZd dlmZmZmZ d dl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 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e'd¦  «        Z(d„ Z) G d„ de!¦  «        Z*dS )é    N)ÚDictÚListÚTYPE_CHECKING)ÚgetArtifactLogger)Útree_map_onlyé   )ÚGuardBuilderÚinstall_guard)Ú
AttrSourceÚConstDictKeySourceÚGetItemSourceÚGlobalWeakRefSourceÚ
GradSource)ÚGLOBAL_KEY_PREFIXé   )ÚVariableTracker)ÚConstantVariable)ÚConstDictVariable)ÚListVariable)ÚGetAttrVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslatorc                   ó   — e Zd ZdS )ÚArgMappingExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    úRC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/variables/optimizer.pyr   r       ó   € € € € € Ø€Dr    r   c                   ó   — e Zd ZdS )ÚGuardInstallExceptionNr   r   r    r!   r$   r$   $   r"   r    r$   Ú
perf_hintsc                 óØ   — ddl m} | j        r\ || j        j        d¦  «        }t
          j        j                             | ¦  «        d u}|r|p|j	         
                    | ¦  «        S |S dS )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)Úxr'   ÚmanagerÚis_static_addresss       r!   Ú_is_static_for_cudagraphsr5   +   s‹   € Ø;Ð;Ð;Ð;Ð;Ð;à„yð Ø�+˜aœhœn¨eÑ4Ô4ˆÝ!œMÔ/×GÒGÈÑJÔJÐRVÐVÐØð 	%à!ð JØÔ'×FÒFÀqÑIÔIðð
 %Ð$ð ˆtr    c                   óž   ‡ — e Zd Zdddhej        £Z	 	 	 d	 dˆ fd„Z	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zd„ Zd„ Z	d„ Z
d„ Zd„ Zdd„Z	 	 dd„Zd„ Zˆ xZS )ÚOptimizerVariableÚgrad_to_sourceÚtensor_to_sourceÚstatic_tensor_namesNÚreturnc                 óŠ   •—  t          ¦   «         j        |fi |¤Ž |pi | _        |pi | _        |pt	          ¦   «         | _        d S ©N)ÚsuperÚ__init__r8   r9   Úsetr:   )ÚselfÚvaluer8   r:   r9   ÚkwargsÚ	__class__s         €r!   r?   zOptimizerVariable.__init__E   sU   ø€ ð 	�‰ŒÔ˜Ð)Ð) &Ð)Ð)Ð)Ø,Ð2°ˆÔØ 0Ð 6°BˆÔØ#6Ð#?½#¹%¼%ˆÔ Ð Ð r    ÚargsúList[VariableTracker]rC   úDict[str, VariableTracker]r   c                 ó>  •— |dk    ró	 |                       |¦  «         |                      ¦   «           | 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)Úgraph_break_if_pending_mutationÚmove_step_if_cpuÚget_python_argsrB   rI   Úmap_sources_and_install_guardsÚupdate_list_argsÚidÚstore_global_weakref_by_idÚcreate_finalizerr   Úcreater   r$   r>   Úcall_method)rA   ÚtxÚnamerE   rC   Úpy_argsÚ	py_kwargsÚret_valÚmangled_nameÚ_rD   s             €r!   rT   zOptimizerVariable.call_methodR   sF  ø€ ð �=Ò Ð ðØ×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C ÃC8Ã3C8rU   r   c                 ó&  •— |dv r%t          | |t          | j        |¦  «        ¬¦  «        S |dk    r@ddlm} | j        j        D ]}|d         D ]} ||¦  «         ŒŒ|                      |¦  «         t          ¦   «          	                    ||¦  «        S )N)rI   Ústep)ÚsourceÚparam_groupsr   ©Úmark_static_addressÚparams)
r   r   r^   Ú
decoratorsra   rB   r_   Ú_set_capturabler>   Úvar_getattr)rA   rU   rV   ra   ÚgroupÚprD   s         €r!   re   zOptimizerVariable.var_getattrs   s¿   ø€ ð Ð*Ð*Ð*Ý" 4¨µjÀÄÈdÑ6SÔ6SÐTÑTÔTÐTà�>Ò!Ð!Ø8Ð8Ð8Ð8Ð8Ð8àœÔ0ð +ð +�Ø˜xœð +ð +�AØ'Ð'¨Ñ*Ô*Ð*Ð*ð+ð × Ò  Ñ$Ô$Ð$å‰wŒw×"Ò" 2 tÑ,Ô,Ð,r    c                 óò   — | j         j        D ]i}|d         D ]^}|j        j        }|j                             t          |¦  «        d ¦  «        }|r&|                     |¦  «        rddlm	}  |d¦  «        ‚Œ_Œjd S )Nrb   r   )ÚUnsupportedzPending mutation on parameter)
rB   r_   ÚoutputÚside_effectsÚid_to_variableÚgetrP   Úhas_pending_mutationÚexcri   )rA   rU   Úgrg   rk   Úvariableri   s          r!   rK   z1OptimizerVariable.graph_break_if_pending_mutation…   s¬   € ð
 ”Ô(ð 	Gð 	GˆAØ�x”[ð Gð G�Ø!œyÔ5�Ø'Ô6×:Ò:½2¸a¹5¼5À$ÑGÔG�Øð G × AÒ AÀ(Ñ KÔ Kð GØ1Ð1Ð1Ð1Ð1Ð1à%˜+Ð&EÑFÔFÐFøðGð	Gð 	Gr    c                 óÒ  ‡ — ddl m} ˆ fd„}t          ‰ j        j        ¦  «        D ]\  }} ||¦  «        rd|d<   Œ‰ j        ot          ‰ j        d¦  «        }|                     t          j	        |‰ j        j        |¦  «        ¦  «        }t          |j
        ¦  «        D ]G\  }}t          j        t          j        d¦  «        ¦  «        }	t          j        d¦  «        |j
        |	<   ŒHd S )Nr   ©ÚLazyVariableTrackerc                 ó’   •— d}d}|                       dg ¦  «        D ]$}||j        p|j        z  }||‰j        j        vz  }Œ%d| v o|o|S )NTrb   Ú
capturable)rm   r)   Úis_xpurB   Ústate)rf   Úall_uninitializedÚall_gpurg   rA   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    Trv   r_   )Ú rt   Ú	enumeraterB   r_   r^   r   Úrealize_allr   ÚbuildÚitemsr   Ú_HashableTrackerr   rS   )
rA   rU   rt   r{   Úindrf   r^   Úparam_groups_vtÚparam_group_vtÚkeys
   `         r!   rd   z!OptimizerVariable._set_capturable“   s#  ø€ Ø)Ð)Ð)Ð)Ð)Ð)ð	Kð 	Kð 	Kð 	Kð 	Kõ $ D¤JÔ$;Ñ<Ô<ð 	+ð 	+‰JˆC�Ø%Ð% eÑ,Ô,ð +Ø&*��lÑ#øà”ÐH¥¨D¬K¸Ñ!HÔ!HˆØ-×9Ò9ÝÔ! " d¤jÔ&=¸vÑFÔFñ
ô 
ˆõ $-¨_Ô-BÑ#CÔ#Cð 	Fð 	FÑˆC�Ý#Ô4Ý Ô'¨Ñ5Ô5ñô ˆCõ )9Ô(?ÀÑ(EÔ(EˆNÔ  Ñ%Ð%ð		Fð 	Fr    c                 ót   ‡ ‡— ˆ fd„Šˆfd„|D ¦   «         }ˆfd„|                      ¦   «         D ¦   «         }||fS )z9Get python values equivalent to the variable tracker argsc                 óž  •— t          | t          ¦  «        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          ‚)Nr_   )Ú
isinstancer   Úas_python_constantr   r€   r   r^   r   Úbaser   ÚmemberrB   r_   r+   r   )ÚargrA   s    €r!   Úmap_argz2OptimizerVariable.get_python_args.<locals>.map_arg¶   s¼   ø€ Ý˜#Õ/Ñ0Ô0ð 
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€   )rA   rE   rC   Únew_argsÚ
new_kwargsr�   s   `    @r!   rM   z!OptimizerVariable.get_python_args³   sd   øø€ ð	&ð 	&ð 	&ð 	&ð 	&ð 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 )Nr]   )rB   rx   r€   Úis_cpuÚtor*   )rA   rg   rx   s      r!   rL   z"OptimizerVariable.move_step_if_cpuÏ   sb   € Øœ
Ô(×.Ò.Ñ0Ô0ð 	;ð 	;‰HˆAˆuØ˜ˆˆ 5¨¤=Ô#7ˆØ % f¤× 0Ò 0°´Ñ :Ô :��f‘øð	;ð 	;r    c                 ó¶  ‡— ddl mŠ ddlm} i | _        i | _        ˆ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
        |¦  «        }|                     ¦   «          |j        j                             |                     ¦   «         ¦  «         t-          t/          | j	        j        |j        ¦  «        ¦  «        D �]\  }\  }	}
t3          |	d         ¦  «        d	k    r¦|	d         D ]�}|j        �”d }t-          | j	        j
                             ¦   «         ¦  «        D ]\  }}||u r|} nŒ|rW|                     t          j        || j	        j
        |         t9          |t;          ||¦  «        ¦  «        ¦  «        ¦  «          nŒž|
j        }|
                     |t?          j         d¦  «        ¦  «        }d
}g }t-          t/          |	d         | !                    |¦  «        ¦  «        ¦  «        D ]—\  }\  }}|j        }|| j        |<   tE          |d¦  «        }|j        �;|| j        |j        <   tG          |j        ¦  «        sd}| $                    |¦  «         ŒktK          | &                    tN          j(        ¦  «        ¦  «         Œ˜|sKtR           *                    tV          j,        ¦  «        r'd„ |D ¦   «         }tR           -                    d|¦  «         �Œt-          | j	        j
                             ¦   «         ¦  «        D ]Ó\  }\  }}t9          |t;          ||¦  «        ¦  «        }|j        j                             |                     ¦   «         ¦  «         t-          |                     ¦   «         ¦  «        D ]Z\  }\  }}t]          |t          j        ¦  «        r8|| j        vr/|| j        vr&t9          |t;          ||¦  «        ¦  «        | j        |<   Œ[ŒÔd S )Nr   r`   r   rs   c                 ó   •—  ‰| ¦  «         d S r=   r   )r2   ra   s    €r!   Úmark_staticzEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_staticã   s   ø€ ØÐ Ñ"Ô"Ð"Ð"Ð"r    r_   rx   rb   r   TÚgradFc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )rV   )r�   Úsrcs     r!   r�   zDOptimizerVariable.map_sources_and_install_guards.<locals>.<listcomp>+  s    € Ð#KÐ#KÐ#K°3 C§H¢H¡J¤JÐ#KÐ#KÐ#Kr    )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.)/rc   ra   Úlazyrt   r8   r9   r   r,   ÚTensorrB   rx   r^   r   r~   r   r   r_   Úrealizerj   Úguard_on_key_orderÚaddrV   r}   Úzipr€   Úlenr�   Úkeysr   r   Úgetitem_constr   rS   Úunpack_var_sequencer   r5   Úappendr
   Ú
make_guardr	   ÚCONSTANT_MATCHÚperf_hint_logÚisEnabledForÚloggingÚWARNINGÚwarningrˆ   )rA   rU   rt   rœ   Úparams_groups_sourcerƒ   Ústate_sourceÚstate_vtÚg_indrf   Úgroup_vtÚparamÚ	key_indexÚir’   Úgroup_sourceÚ	params_vtÚ
all_staticÚnon_static_gradsÚp_indrg   Úp_vtÚparam_sourceÚgrad_sourceÚidxrB   Úp_state_sourceÚ	inner_idxr“   ra   s                                @r!   rN   z0OptimizerVariable.map_sources_and_install_guardsÔ   s£  ø€ Ø4Ð4Ð4Ð4Ð4Ð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ˆð 	×ÒÑÔÐØ
Œ	Ô$×(Ò(¨×):Ò):Ñ)<Ô)<Ñ=Ô=Ð=õ )2Ý�”
Ô'¨Ô)>Ñ?Ô?ñ)
ô )
ð 9	ñ 9	Ñ$ˆEÑ$�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Ô$;Ý$1Ø(4Ý(:¸<ÈÑ(SÔ(Sñ%&ô %&ñ!"ô !"ñ	ô 	ð 	ð "˜Eøà#œ?ˆLØ ×.Ò.¨rÕ3CÔ3JÈ8Ñ3TÔ3TÑUÔUˆIØˆJØ!ÐÝ$-Ý�E˜(”O Y×%BÒ%BÀ2Ñ%FÔ%FÑGÔGñ%ô %ð Wð WÑ �‘y˜˜4ð  $œ{�Ø+7�Ô% aÑ(Ý(Ø Øñô �ð
 ”6Ð%Ø2=�DÔ'¨¬Ñ/Ý4°Q´VÑ<Ô<ð =Ø%*˜
Ø(×/Ò/°Ñ<Ô<Ð<øå! +×"8Ò"8½Ô9TÑ"UÔ"UÑVÔVÐVÐVàð 	¥-×"<Ò"<½W¼_Ñ"MÔ"Mð 	Ø#KÐ#KÐ:JÐ#KÑ#KÔ#KÐ Ý×%Ò%ðð
 %ñô ð ùõ  )¨¬Ô)9×)?Ò)?Ñ)AÔ)AÑBÔBð 	ð 	‰OˆC‘�!�UÝ*ØÕ0°¸sÑCÔCñô ˆNð ŒIÔ(×,Ò,¨^×-@Ò-@Ñ-BÔ-BÑCÔCÐCÝ%.¨u¯{ª{©}¬}Ñ%=Ô%=ð ð Ñ!�	™6˜A˜qå˜q¥%¤,Ñ/Ô/ðà Ô!4Ð4Ð4Ø Ô!6Ð6Ð6å/<Ø&Õ(:¸>È9Ñ(UÔ(Uñ0ô 0�DÔ)¨!Ñ,øðð	ð 	r    c                 óò  — ddl m} || j        v rP ||¦  «         | j        |         }| j                             |j                             |j        ¦  «        ¦  «         nƒ|| j        v r| j        |         }nl ||¦  «         | 	                    t          |¦  «        }t          |¦  «        }| j                             |j                             |j        ¦  «        ¦  «         t          j        |||¦  «        S )z%Wrap state tensor in a TensorVariabler   r`   )rc   ra   r9   r:   r¤   rj   Úmodule_key_namerV   r8   rQ   r   r   r   r   )rA   rU   Útensor_valuera   r^   Úglobal_names         r!   Úwrap_tensorzOptimizerVariable.wrap_tensorF  sÿ   € à4Ð4Ð4Ð4Ð4Ð4ð ˜4Ô0Ð0Ð0àÐ Ñ-Ô-Ð-ØÔ*¨<Ô8ˆFØÔ$×(Ò(¨¬×)BÒ)BÀ6Ä;Ñ)OÔ)OÑPÔPÐPÐPØ˜TÔ0Ð0Ð0ØÔ(¨Ô6ˆFˆFð  Ð Ñ-Ô-Ð-à×7Ò7Õ8IÈ<ÑXÔXˆKÝ(¨Ñ5Ô5ˆFØÔ$×(Ò(¨¬×)BÒ)BÀ6Ä;Ñ)OÔ)OÑPÔPÐPåÔ$ R¨°vÑ>Ô>Ð>r    c           	      ó,  — t          ||¦  «        D �]\  }}t          |t          ¦  «        ræt          |t          ¦  «        s
J 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   Úlistr}   rj   rk   Úmutationr,   r¡   r€   rª   rÉ   r^   r   r   r   )rA   rU   rE   rC   rW   rX   rŒ   Úpy_argr¹   Úvalr^   s              r!   rO   z"OptimizerVariable.update_list_args`  s+  € õ ˜t WÑ-Ô-ð 	Qñ 	Q‰KˆC�Ý˜#�|Ñ,Ô,ð 
QÝ!Ø�Dñô ð Cð CàBñCô Cð õ (¨Ñ/Ô/ð 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        Šˆˆˆfd„}|j                             |¦  «         d S )Nc                 óB   •‡ — ˆ ˆˆfd„}t          j        ‰|¦  «         d S )Nc                  óþ   •— ‰D ]x} ‰j                              | d ¦  «         ‰j                             | d ¦  «         ‰j        r‰j                             ¦   «          ‰j        r‰j                             ¦   «          Œyd S r=   )Ú_buffersÚpopÚ_parametersÚparams_flatÚclearÚparams_flat_unwrap_subclasses)rV   ÚgmÚnames_to_deleteÚtcs    €€€r!   Úclear_static_tensor_refsz\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refsw  sŽ   ø€ Ø+ð Að A�DØ”K—O’O D¨$Ñ/Ô/Ð/Ø”N×&Ò& t¨TÑ2Ô2Ð2Ø”~ð /Øœ×,Ò,Ñ.Ô.Ð.ØÔ7ð AØÔ8×>Ò>Ñ@Ô@Ð@øðAð Ar    )ÚweakrefÚfinalize)rØ   rÛ   rÙ   rÚ   rB   s   ` €€€r!   Úinit_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizerv  sJ   øø€ ðAð Að Að Að Að Að Aõ Ô˜UÐ$<Ñ=Ô=Ð=Ð=Ð=r    )r:   rB   rj   Útracing_contextÚadd_graph_finalizer)rA   rU   rÞ   rÙ   rÚ   rB   s      @@@r!   rR   z"OptimizerVariable.create_finalizerq  s_   øøø€ ØÔ2ˆØ”
ˆØŒYÔ&ˆð
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 
	>ð 	Œ	×%Ò% nÑ5Ô5Ð5Ð5Ð5r    )NNN)r;   N)rE   rF   rC   rG   r;   r   )rU   r   )r   r   r   r   Ú_nonvar_fieldsr?   rT   re   rK   rd   rM   rL   rN   rÉ   rO   rR   Ú__classcell__)rD   s   @r!   r7   r7   =   sk  ø€ € € € € àØØðð 
#Ô	1ð	€Nð Ø Øð@ð 
ð@ð @ð @ð @ð @ð @ð;ð &ð	;ð
 -ð;ð 
ð;ð ;ð ;ð ;ð ;ð ;ðB-ð -ð -ð -ð -ð -ð$Gð Gð GðFð Fð Fð@$ð $ð $ð8;ð ;ð ;ð
pð pð pðd?ð ?ð ?ð ?ð4QØ)ðQð Qð Qð Qð"6ð 6ð 6ð 6ð 6ð 6ð 6r    r7   )+r¯   rÜ   Útypingr   r   r   r,   Útorch._loggingr   Útorch.utils._pytreer   Úguardsr	   r
   r^   r   r   r   r   r   r.   r   rŠ   r   Úconstantr   Údictsr   Úlistsr   Úmiscr   Úuser_definedr   Útorch._dynamo.symbolic_convertr   Ú	Exceptionr   r$   r   r­   r5   r7   r   r    r!   ú<module>rî      s  ðð €€€Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø &Ð &Ð &Ð &Ð &Ð &Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ð EØDÐDÐDÐDÐDÐDð	ð 	ð 	ð 	ð 	˜)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜Iñ 	ô 	ð 	ð "Ð! (¨LÑ9Ô9€ðð ð ð$E6ð E6ð E6ð E6ð E6Ð1ñ E6ô E6ð E6ð E6ð E6r    