Ë
    P/æju7  ã                   ó  — 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	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 erd dlmZ ddlm Z   G d„ de!«      Z" G d„ de!«      Z# G d„ de«      Z$y)é    N)ÚDictÚListÚTYPE_CHECKING)Útree_map_onlyé   )ÚGuardBuilderÚinstall_guard)Ú
AttrSourceÚConstDictKeySourceÚGetItemSourceÚGlobalWeakRefSourceÚ
GradSource)ÚGLOBAL_KEY_PREFIXé   )ÚConstantVariable)ÚConstDictVariable)ÚListVariable)ÚGetAttrVariable)ÚUserDefinedObjectVariable)ÚInstructionTranslator)ÚVariableTrackerc                   ó   — e Zd Zy)ÚArgMappingExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    úd/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/optimizer.pyr   r      ó   „ Ør   r   c                   ó   — e Zd Zy)ÚGuardInstallExceptionNr   r   r   r    r#   r#   #   r!   r   r#   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_namesc                 óx   •— t        ‰| �  |fi |¤Ž |xs i | _        |xs i | _        |xs
 t	        «       | _        y ©N)ÚsuperÚ__init__r&   r'   Úsetr(   )ÚselfÚvaluer&   r(   r'   ÚkwargsÚ	__class__s         €r    r,   zOptimizerVariable.__init__/   s@   ø€ ô 	‰Ñ˜Ñ) &Ò)Ø,Ò2°ˆÔØ 0Ò 6°BˆÔØ#6Ò#?¼#»%ˆÕ r   c                 ó  •— |dk(  rÓ	 | 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)Úgraph_break_if_pending_mutationÚmove_step_if_cpuÚget_python_argsr/   r3   Úmap_sources_and_install_guardsÚupdate_list_argsÚidÚstore_global_weakref_by_idÚcreate_finalizerr   Úcreater   r#   r+   Úcall_method)r.   ÚtxÚnameÚargsr0   Úpy_argsÚ	py_kwargsÚret_valÚmangled_nameÚ_r1   s             €r    r>   zOptimizerVariable.call_method<   s  ø€ ð �=Ò ðØ×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C, Ã,DÄ Dc                 ó  •— |dv r"t        | |t        | j                  |«      ¬«      S |dk(  rDddlm} | j
                  j                  D ]  }|d   D ]
  } ||«       Œ Œ | j                  |«       t        ‰| �%  ||«      S )N)r3   Ústep)ÚsourceÚparam_groupsr   ©Úmark_static_addressÚparams)
r   r
   rI   Ú
decoratorsrL   r/   rJ   Ú_set_capturabler+   Úvar_getattr)r.   r?   r@   rL   ÚgroupÚpr1   s         €r    rP   zOptimizerVariable.var_getattr]   s‰   ø€ ð Ð*Ñ*Ü" 4¨´jÀÇÁÈdÓ6SÔTÐTà�>Ò!Ý8àŸ™×0Ñ0ò +�Ø˜x™ò +�AÙ'¨Õ*ñ+ð+ð × Ñ  Ô$ä‰wÑ" 2 tÓ,Ð,r   c                 ó  — | j                   j                  D ]i  }|d   D ]_  }|j                  j                  }|j                  j                  t        |«      d «      }|sŒA|j                  |«      sŒSddlm	}  |d«      ‚ Œk y )NrM   r   )ÚUnsupportedzPending mutation on parameter)
r/   rJ   ÚoutputÚside_effectsÚid_to_variableÚgetr:   Úhas_pending_mutationÚexcrT   )r.   r?   ÚgrR   rV   ÚvariablerT   s          r    r5   z1OptimizerVariable.graph_break_if_pending_mutationo   s~   € ð
 —‘×(Ñ(ò 	GˆAØ�x‘[ò G�Ø!Ÿy™y×5Ñ5�Ø'×6Ñ6×:Ñ:¼2¸a»5À$ÓG�Ú × AÑ AÀ(Õ KÝ1á%Ð&EÓFÐFñGñ	Gr   c           
      óì  ‡ — ddl m} ddlm} ˆ fd„}t	        ‰ j
                  j                  «      D ]  \  }} ||«      sŒd|d<   Œ |j                    ||t        ‰ j                  d«      «      ‰ j
                  j                  «      «      }t	        |j                  «      D ]O  \  }}t        j                  t        j                  d«      «      }	t        j                  d«      |j                  |	<   ŒQ y )Nr   ©ÚLazyVariableTracker©ÚVariableBuilderc                 óÂ   •— d}d}| j                  dg «      D ]:  }||j                  xs |j                  z  }||‰j                  j                  vz  }Œ< d| v xr |xr |S )NTrM   Ú
capturable)rX   Úis_cudaÚis_xpur/   Ústate)rQ   Úall_uninitializedÚall_gpurR   r.   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   Trc   rJ   )Ú r_   Úbuilderra   Ú	enumerater/   rJ   Úrealize_allr
   rI   Úitemsr   Ú_HashableTrackerr   r=   )
r.   r?   r_   ra   ri   ÚindrQ   Úparam_groups_vtÚparam_group_vtÚkeys
   `         r    rO   z!OptimizerVariable._set_capturable}   sÞ   ø€ Ý)Ý,ô	Kô $ D§J¡J×$;Ñ$;Ó<ò 	+‰JˆC�Ù% eÕ,Ø&*��lÒ#ð	+ð .×9Ñ9ØH‰O˜B¤
¨4¯;©;¸Ó GÓHØ—
‘
×'Ñ'óó
ˆô
 $-¨_×-BÑ-BÓ#Cò 	FÑˆC�Ü#×4Ñ4Ü ×'Ñ'¨Ó5óˆCô )9×(?Ñ(?ÀÓ(EˆN× Ñ  Ò%ñ		Fr   c                 ó¨   ‡ — ˆ 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 argsc                 óÈ  •— t        | t        «      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        ‚)NrJ   )Ú
isinstancer   Úas_python_constantr   rn   r   rI   r   Úbaser
   Úmemberr/   rJ   Úindexr   )Úargr.   s    €r    Úmap_argz2OptimizerVariable.get_python_args.<locals>.map_arg¢   s˜   ø€ Ü˜#Ô/Ô0Ø×-Ñ-Ó/Ð/Ü˜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   )rn   )	r.   rA   r0   r|   r{   Únew_argsÚkÚvÚ
new_kwargss	   `        r    r7   z!OptimizerVariable.get_python_argsŸ   sY   ø€ ô	&ð -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 )NrH   )r/   rf   rn   Úis_cpuÚtoÚdevice)r.   rR   rf   s      r    r6   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} ddlm} i | _        i | _        ˆfd„}t        t        j                  || j                  j                  «       |j                    ||t        | j                  d«      «      | j                  j                   «      «      }  ||t        | j                  d«      «      | j                  j                  «      }|j#                  «        t%        t'        | j                  j                   |j(                  «      «      D �]«  \  }\  }}	t+        |d	   «      d
kD  r¹|d	   D ]±  }
|
j,                  €Œd }t%        | j                  j                  j/                  «       «      D ]  \  }}||
u sŒ|} n |sŒRt        | j                  d«      }|j                    ||t1        |t3        ||«      «      «      | j                  j                  |
   «      «        n |	j                  }|	j5                  |t7        j8                  d	«      «      }t%        t'        |d	   |j;                  |«      «      «      D ]}  \  }\  }}|j                  }|| j                  |<   t=        |d«      }|j,                  �|| j                  |j,                  <   ŒVt?        |jA                  tB        jD                  «      «       Œ �Œ® t        | j                  d«      }t%        | j                  j                  j)                  «       «      D ]ˆ  \  }\  }}t1        |t3        ||«      «      }|j)                  «       D ]W  \  }}tG        |t        j                  «      sŒ!|| j                  vsŒ0|| j                  vsŒ?t1        ||«      | j                  |<   ŒY ŒŠ y )Nr   rK   r   r`   r^   c                 ó   •—  ‰| «       y r*   r   )ÚxrL   s    €r    Úmark_staticzEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_staticÐ   s   ø€ Ù Õ"r   rJ   rf   rM   r   Úgrad)$rN   rL   rk   ra   Úlazyr_   r&   r'   r   ÚtorchÚTensorr/   rf   rm   r
   rI   rJ   Úrealizerl   Úziprn   Úlenr‰   Úkeysr   r   Úgetitem_constr   r=   Úunpack_var_sequencer   r	   Ú
make_guardr   ÚCONSTANT_MATCHrv   )r.   r?   ra   r_   rˆ   rq   Ústate_vtÚg_indrQ   Úgroup_vtÚparamÚ	key_indexÚir~   Ústate_sourceÚgroup_sourceÚ	params_vtÚp_indrR   Úp_vtÚparam_sourceÚgrad_sourceÚidxr/   Úp_state_sourcer   rL   s                             @r    r8   z0OptimizerVariable.map_sources_and_install_guardsÀ   sB  ø€ Ý4Ý,Ý-à ˆÔØ "ˆÔô	#ô 	”e—l‘l K°·±×1AÑ1AÔBð .×9Ñ9ØH‰O˜B¤
¨4¯;©;¸Ó GÓHØ—
‘
×'Ñ'óó
ˆð I‘? 2¤z°$·+±+¸wÓ'GÓHØ�J‰J×Ñó
ˆð 	×ÑÔô )2Ü�—
‘
×'Ñ'¨×)>Ñ)>Ó?ó)
ó )	WÑ$ˆEÑ$�E˜8ô
 �5˜‘?Ó# aÒ'Ø" 8™_ò "�EØ—z‘zÑ-Ø$(˜	Ü$-¨d¯j©j×.>Ñ.>×.CÑ.CÓ.EÓ$Fò &™D˜A˜qØ  EšzØ,- 	Ù %ð&ò %Ü+5°d·k±kÀ7Ó+K˜LØ/×;Ñ;ð!"¡Ø$&Ü$1Ø(4Ü(:¸<ÈÓ(Só%&ó!"ð #'§*¡*×"2Ñ"2°5Ñ"9ó!;ôñ "ð%"ð( $Ÿ?™?ˆLØ ×.Ñ.¨rÔ3C×3JÑ3JÈ8Ó3TÓUˆIÜ$-Ü�E˜(‘O Y×%BÑ%BÀ2Ó%FÓGó%ò WÑ �‘y˜˜4ð  $Ÿ{™{�Ø+7�×%Ñ% aÑ(Ü(Ø Øó�ð
 —6‘6Ð%Ø2=�D×'Ñ'¨¯©Ò/ä! +×"8Ñ"8¼×9TÑ9TÓ"UÕVòWð9)	WôZ " $§+¡+¨wÓ7ˆÜ(¨¯©×)9Ñ)9×)?Ñ)?Ó)AÓBò 
	P‰OˆC‘�!�UÜ*ØÔ0°¸sÓCóˆNð Ÿ™›ò P‘��1ä˜q¤%§,¡,Õ/Ø ×!4Ñ!4Ò4Ø ×!6Ñ!6Ò6ä/<¸^ÈQÓ/O�D×)Ñ)¨!Ò,ñPñ	
	Pr   c                 ó*  — ddl m} ddlm} || j                  v r] ||«        ||| j                  |   «      }| j
                  j                  |j                  j                  |j                  «      «       n“|| j                  v r ||| j                  |   «      }nn ||«       |j                  t        |«      } ||t        |«      «      }| j
                  j                  |j                  j                  |j                  «      «        ||«      }|S )z%Wrap state tensor in a TensorVariabler   rK   r   r`   )rN   rL   rk   ra   r'   r(   ÚaddrU   Úmodule_key_namer@   r&   r;   r   r   )r.   r?   Útensor_valuerL   ra   rk   Úglobal_nameÚresults           r    Úwrap_tensorzOptimizerVariable.wrap_tensor!  sè   € å4Ý,ð ˜4×0Ñ0Ñ0á Ô-Ù% b¨$×*?Ñ*?ÀÑ*MÓNˆGØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ7Ç<Á<Ó)PÕQØ˜T×0Ñ0Ñ0Ù% b¨$×*=Ñ*=¸lÑ*KÓL‰Gñ   Ô-à×7Ñ7Ô8IÈ<ÓXˆKÙ% bÔ*=¸kÓ*JÓKˆGØ×$Ñ$×(Ñ(¨¯©×)BÑ)BÀ7Ç<Á<Ó)PÔQá˜Ó&ˆØˆr   c                 ót  — t        ||«      D �](  \  }}t        |t        «      sŒt        |t        «      sJ d«       ‚t	        |«      D ]ì  \  }}	|j
                  j                  j                  |«       t        |	t        j                  «      r,|j                  j                  | j                  ||	«      «       Œqddlm}
m} |j                   r=|j                  j                    ||t#        |j                   |«      «      |	«      «       ŒÂ|j                  j                  |
j%                  ||	«      «       Œî �Œ+ y)z7Update the args and kwargs to the traced optimizer callz-py_arg should be a list in optimizer variabler   )ÚSourcelessBuilderra   N)rŽ   rv   r   Úlistrl   rU   rV   Úmutationr‹   rŒ   rn   Úappendrª   rk   r¬   ra   rI   r   r=   )r.   r?   rA   r0   rB   rC   r{   Úpy_argrš   Úvalr¬   ra   s               r    r9   z"OptimizerVariable.update_list_args=  s  € ô ˜t WÓ-ó 	P‰KˆC�Ü˜#œ|Õ,Ü!ØœDôð CàBóCð ô (¨Ó/ò P‘F�A�sØ—I‘I×*Ñ*×3Ñ3°CÔ8Ü! #¤u§|¡|Ô4ØŸ	™	×(Ñ(¨×)9Ñ)9¸"¸cÓ)BÕCçOàŸ:š:ØŸI™I×,Ñ,Ø Q¡°´MÀ#Ç*Á*ÈaÓ4PÓ QÐRUÓ Võð  ŸI™I×,Ñ,Ð->×-EÑ-EÀbÈ#Ó-NÕOòPñ	Pr   c                 óª   ‡‡‡— | j                   Š| j                  Š|j                  j                  Šˆˆˆfd„}|j                  j	                  |«       y )Nc                 óB   •‡ — ˆ ˆˆfd„}t        j                  ‰|«       y )Nc                  óÒ   •— ‰D ]a  } ‰j                   j                  | d «       ‰j                  j                  | d «       ‰j                  sŒH‰j                  j	                  «        Œc y r*   )Ú_buffersÚpopÚ_parametersÚparams_flatÚclear)r@   ÚgmÚnames_to_deleteÚtcs    €€€r    Úclear_static_tensor_refsz\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refsZ  sO   ø€ Ø+ò /�DØ—K‘K—O‘O D¨$Ô/Ø—N‘N×&Ñ& t¨TÔ2Ø—~“~ØŸ™×,Ñ,Õ.ñ	/r   )ÚweakrefÚfinalize)rº   r½   r»   r¼   r/   s   ` €€€r    Úinit_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizerY  s   ù€ ö/ô ×Ñ˜UÐ$<Õ=r   )r(   r/   rU   Útracing_contextÚadd_graph_finalizer)r.   r?   rÀ   r»   r¼   r/   s      @@@r    r<   z"OptimizerVariable.create_finalizerT  s?   ú€ Ø×2Ñ2ˆØ—
‘
ˆØ�Y‰Y×&Ñ&ˆö	>ð 	�	‰	×%Ñ% nÕ5r   )NNN)ÚreturnN)rA   zList[VariableTracker]r0   zDict[str, VariableTracker]rÃ   r   )r?   r   )r   r   r   r   Ú_nonvar_fieldsr,   r>   rP   r5   rO   r7   r6   r8   rª   r9   r<   Ú__classcell__)r1   s   @r    r%   r%   '   s    ø„ àØØðð 
#×	1Ñ	1ð	€Nð Ø Øð@ð 
õ@ð;ð &ð	;ð
 -ð;ð 
õ;õB-ò$Gò FòD$ò8;ò
_PóBð8PØ)óPö.6r   r%   )%r¾   Útypingr   r   r   r‹   Útorch.utils._pytreer   Úguardsr   r	   rI   r
   r   r   r   r   Úutilsr   Úconstantr   Údictsr   Úlistsr   Úmiscr   Úuser_definedr   Útorch._dynamo.symbolic_convertr   rx   r   Ú	Exceptionr   r#   r%   r   r   r    ú<module>rÑ      si   ðó ß ,Ñ ,ã Ý -ç 0÷õ õ &Ý &Ý $Ý Ý !Ý 3ñ ÝDå%ô	˜)ô 	ô	˜Iô 	ô|6Ð1õ |6r   