
    IЦi =                     <   S SK r S SKrS SKJrJrJr  S SKrS SKJr  S SK	J
r
  SSKJrJr  SSKJrJrJrJrJr  SSKJr  S	S
KJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SK J!r!  \(       a  S SK"J#r#   " S S\$5      r% " S S\$5      r&\" \'S5      r(S r) " S S\!5      r*g)    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                       \ rS rSrSrg)ArgMappingException     N__name__
__module____qualname____firstlineno____static_attributes__r       `/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_dynamo/variables/optimizer.pyr   r           r#   r   c                       \ rS rSrSrg)GuardInstallException$   r   Nr   r   r#   r$   r'   r'   $   r%   r#   r'   
perf_hintsc                    SSK Jn  U R                  (       au  U" U R                  R                  S5      n[
        R                  R                  R                  U 5      S LnU(       a$  U=(       d    UR                  R                  U 5      $ U$ g)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_cudagraphsr9   +   ss    ;yyahhnne4!MM//GGJRVV! J''FFqI
 %$ r#   c                      ^  \ rS rSrSSS1\R
                  kr   S SU 4S jjjr      SU 4S jjrSU 4S jjrS r	S	 r
S
 rS rS rSS jr  SS jrS rSrU =r$ )OptimizerVariable=   grad_to_sourcetensor_to_sourcestatic_tensor_namesc                    > [         TU ]  " U40 UD6  U=(       d    0 U l        U=(       d    0 U l        U=(       d
    [	        5       U l        g N)super__init__r=   r>   setr?   )selfvaluer=   r?   r>   kwargs	__class__s         r$   rC   OptimizerVariable.__init__E   s@     	)&),2 0 6B#6#?#% r#   c                 
  > US:X  a   U R                  U5        U R                  5         U R                  " U0 UD6u  pVU R                  R                  " U0 UD6nU R                  U5        U R                  XXEU5        S[        U R                  5       3nUR                  XR                  5        U R                  U5        [        R                  " U5      $ [        T
U ]=  XX45      $ ! [        [        4 a
  n	 Sn	A	N%Sn	A	ff = f)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_argsrF   rK   map_sources_and_install_guardsupdate_list_argsidstore_global_weakref_by_idcreate_finalizerr   creater   r'   rB   call_method)rE   txnameargsrG   py_args	py_kwargsret_valmangled_name_rH   s             r$   rV   OptimizerVariable.call_methodR   s     = 44R8%%'%)%9%94%J6%J"**00'GYG33B7%%bK ".bn-=>--lJJG%%b) (..w77
 w"2T::	 ()>? s   CC( (D=Dc                   > US;   a  [        X[        U R                  U5      S9$ US:X  aH  SSKJn  U R
                  R                   H  nUS    H  nU" U5        M     M     U R                  U5        [        TU ]%  X5      $ )N)rK   step)sourceparam_groupsr   mark_static_addressparams)
r   r   rb   
decoratorsre   rF   rc   _set_capturablerB   var_getattr)rE   rW   rX   re   groupprH   s         r$   ri   OptimizerVariable.var_getattrs   s{     **"4jd6STT>!800xA'* ) 1   $w"2,,r#   c                 &   U R                   R                   Hw  nUS    Hk  nUR                  R                  nUR                  R                  [        U5      S 5      nU(       d  MG  UR                  U5      (       d  M_  SSKJ	n  U" S5      e   My     g )Nrf   r   )UnsupportedzPending mutation on parameter)
rF   rc   outputside_effectsid_to_variablegetrR   has_pending_mutationexcrn   )rE   rW   grk   rp   variablern   s          r$   rM   1OptimizerVariable.graph_break_if_pending_mutation   su    
 ((Ax[!yy55'66::2a5$G8 A A( K K1%&EFF ! )r#   c                 4  ^  SSK Jn  U 4S jn[        T R                  R                  5       H  u  pEU" U5      (       d  M  SUS'   M     T R
                  =(       a    [        T R
                  S5      nUR                  [        R                  " UT R                  R                  U5      5      n[        UR                  5       HR  u  pH[        R                  " [        R                  " S5      5      n	[        R                  " S5      UR                  U	'   MT     g )Nr   LazyVariableTrackerc                    > SnSnU R                  S/ 5       H?  nX#R                  =(       d    UR                  -  nXTR                  R                  ;  -  nMA     SU ;   =(       a    U=(       a    U$ )NTrf   
capturable)rr   r-   is_xpurF   state)rj   all_uninitializedall_gpurk   rE   s       r$   safe_to_set_capturableAOptimizerVariable._set_capturable.<locals>.safe_to_set_capturable   sh     $GYYx,9900!djj.>.>%>>! -  5(J->J7Jr#   Tr|   rc   ) rz   	enumeraterF   rc   rb   r   realize_allr   builditemsr   _HashableTrackerr   rU   )
rE   rW   rz   r   indrj   rb   param_groups_vtparam_group_vtkeys
   `         r$   rh   !OptimizerVariable._set_capturable   s    )	K $DJJ$;$;<JC%e,,&*l# = HDKK!H-99!!"djj&=&=vF
 $-_-B-B#CC#44 ''5C )9(?(?(EN  %	 $Dr#   c                    ^  U 4S jnU Vs/ s H
  oC" U5      PM     nnUR                  5        VVs0 s H  u  pgXc" U5      _M     nnnXX4$ s  snf s  snnf )z9Get python values equivalent to the variable tracker argsc                   > [        U [        5      (       a  U R                  5       $ [        U [        5      (       a  U R                  (       d  / $ [        U [
        5      (       a  [        U R                  [        5      (       az  [        U R                  R                  [        5      (       aQ  U R                  R                  R                  S:X  a-  TR                  R                  U R                  R                     $ [        e)Nrc   )
isinstancer   as_python_constantr   r   r   rb   r   baser   memberrF   rc   r/   r   )argrE   s    r$   map_arg2OptimizerVariable.get_python_args.<locals>.map_arg   s    #/00--//C..syy	3 122szz=99szz
;;JJOO**n<zz..szz/?/?@@%%r#   )r   )	rE   rY   rG   r   r   new_argskv
new_kwargss	   `        r$   rO   !OptimizerVariable.get_python_args   sW    	& -11DSGCLD106?am
?## 2?s
   AAc                     U R                   R                  R                  5        HD  u  pSU;   d  M  US   R                  (       d  M#  US   R	                  UR
                  5      US'   MF     g )Nra   )rF   r~   r   is_cputor.   )rE   rk   r~   s      r$   rN   "OptimizerVariable.move_step_if_cpu   sS    

((..0HA5=#7#7#7 %f 0 0 :f 1r#   c                 	  ^ SSK Jm  SSKJn  0 U l        0 U l        U4S jn[        [        R                  X0R                  R                  5        U R                  =(       a    [        U R                  S5      nUR                  [        R                  " XR                  R                   U5      5      nU R                  =(       a    [        U R                  S5      n[        R                  " XR                  R                  U5      nUR#                  5         UR$                  R&                  R)                  UR+                  5       5        [-        [/        U R                  R                   UR0                  5      5       GHK  u  nu  p[3        U	S   5      S	:  a  U	S    H  nUR4                  c  M  S n[-        U R                  R                  R7                  5       5       H  u  pXL d  M  Un  O   U(       d  M[  UR                  [        R                  " UU R                  R                  U   [9        U[;        Xl5      5      5      5          O   U
R                  nU
R=                  U[>        R@                  " S5      5      nS
n/ n[-        [/        U	S   URC                  U5      5      5       H  u  nu  nnUR                  nUU R
                  U'   [E        US5      nUR4                  bJ  UU R                  UR4                  '   [G        UR4                  5      (       d  SnURI                  U5        M  M  [K        URM                  [N        RP                  5      5        M     U(       a  GM  [R        RU                  [V        RX                  5      (       d  GM  U Vs/ s H  nUR+                  5       PM     nn[R        R[                  SU5        GMN     [-        U R                  R                  R1                  5       5       H  u  nu  nn[9        U[;        UU5      5      nUR$                  R&                  R)                  UR+                  5       5        [-        UR1                  5       5       Hq  u  nu  nn[]        U[        R                  5      (       d  M*  UU R                  ;  d  M<  UU R
                  ;  d  MN  [9        U[;        UU5      5      U R
                  U'   Ms     M     g s  snf )Nr   rd   r   ry   c                    > T" U 5        g rA   r   )r6   re   s    r$   mark_staticEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_static   s    "r#   rc   r~   rf   r   TgradF)zGrad 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.)/rg   re   lazyrz   r=   r>   r   r0   TensorrF   r~   rb   r   r   r   r   rc   realizero   guard_on_key_orderaddrX   r   zipr   lenr   keysr   r   getitem_constr   rU   unpack_var_sequencer   r9   appendr
   
make_guardr	   CONSTANT_MATCHperf_hint_logisEnabledForloggingWARNINGwarningr   )rE   rW   rz   r   params_groups_sourcer   state_sourcestate_vtg_indrj   group_vtparam	key_indexir   group_source	params_vt
all_staticnon_static_gradsp_indrk   p_vtparam_sourcegrad_sourcesrcidxrF   p_state_source	inner_idxr   re   s                                 @r$   rP   0OptimizerVariable.map_sources_and_install_guards   s   4-  "	# 	ellK1A1AB  ${{Vz$++~/V-99!!"jj&=&=?ST
 {{Gz$++w'G"((ZZ-=-=|L 	
		$$(():):)<= )2

'')>)>?)
$E$E
 5?#a'"8_Ezz-$(	$-djj.>.>.C.C.E$FDA z,-	 % %G %9/;; / 5 5$&$(JJ$4$4U$;$1(4(:<(S%&!"	 "% -( $??L ..r3C3J3J83TUIJ!$-E(OY%B%B2%FG% y4  ${{+7%%a(( 
 66%2=D''/4QVV<<%*
(//< = "+"8"89T9T"UV!%$ :-"<"<W__"M"M:J#K:J3CHHJ:J #K%%
 %e)
z  ))9)9)?)?)ABOC!U*0sCN II((,,^-@-@-BC%.u{{}%=!	6Aqq%,,//!4!44!6!66/<&(:>9(U0D))!, &>  C $Ls   Sc                    SSK Jn  X R                  ;   aV  U" U5        U R                  U   nU R                  R	                  UR
                  R                  UR                  5      5        OX R                  ;   a  U R                  U   nOgU" U5        UR                  [        U5      n[        U5      nU R                  R	                  UR
                  R                  UR                  5      5        [        R                  " XU5      $ )z%Wrap state tensor in a TensorVariabler   rd   )rg   re   r>   r?   r   ro   module_key_namerX   r=   rS   r   r   r   r   )rE   rW   tensor_valuere   rb   global_names         r$   wrap_tensorOptimizerVariable.wrap_tensorF  s    4 000-**<8F$$(()B)B6;;)OP000((6F  -778I<XK(5F$$(()B)B6;;)OP$$Rv>>r#   c           	      P   [        X$5       GH  u  pg[        U[        5      (       d  M  [        U[        5      (       d   S5       e[	        U5       H  u  pUR
                  R                  R                  U5        [        U	[        R                  5      (       a,  UR                  R                  U R                  X5      5        Mu  UR                  =(       a    [        UR                  U5      n
UR                  R                  [        R                   " XU
5      5        M     GM     g)z7Update the args and kwargs to the traced optimizer callz-py_arg should be a list in optimizer variableN)r   r   r   listr   ro   rp   mutationr0   r   r   r   r   rb   r   r   r   )rE   rW   rY   rG   rZ   r[   r   py_argr   valrb   s              r$   rQ   "OptimizerVariable.update_list_args`  s     t-KC#|,,!D  CBC  (/FAII**33C8!#u||44		(()9)9")BC!$!Lcjj!0L		(()>)>r)OP 0 .r#   c                    ^^^ U R                   mU R                  mUR                  R                  mUUU4S jnUR                  R	                  U5        g )Nc                 F   >^  U UU4S jn[         R                  " TU5        g )Nc                  8  > T H  n TR                   R                  U S 5        TR                  R                  U S 5        TR                  (       a  TR                  R	                  5         TR
                  (       d  My  TR
                  R	                  5         M     g rA   )_bufferspop_parametersparams_flatclearparams_flat_unwrap_subclasses)rX   gmnames_to_deletetcs    r$   clear_static_tensor_refs\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refsw  sh    +DKKOOD$/NN&&tT2~~,,.77788>>@ ,r#   )weakreffinalize)r   r   r   r   rF   s   ` r$   init_finalizer:OptimizerVariable.create_finalizer.<locals>.init_finalizerv  s    A U$<=r#   )r?   rF   ro   tracing_contextadd_graph_finalizer)rE   rW   r   r   r   rF   s      @@@r$   rT   "OptimizerVariable.create_finalizerq  s?    22

YY&&
	> 			%%n5r#   )r=   r?   r>   )NNN)returnN)rY   zList[VariableTracker]rG   zDict[str, VariableTracker]r   r   )rW   r   )r   r   r    r!   r   _nonvar_fieldsrC   rV   ri   rM   rh   rO   rN   rP   r   rQ   rT   r"   __classcell__)rH   s   @r$   r;   r;   =   s     
#	1	1	N  @ 
@ @; &	;
 -; 
;B-$GF@$8;
pd?4Q)Q"6 6r#   r;   )+r   r   typingr   r   r   r0   torch._loggingr   torch.utils._pytreer   guardsr	   r
   rb   r   r   r   r   r   r2   r   r   r   constantr   dictsr   listsr   miscr   user_definedr   torch._dynamo.symbolic_convertr   	Exceptionr   r'   r   r   r9   r;   r   r#   r$   <module>r      s      , ,  , - 0  & ! & $  ! 3 D	) 		I 	 "(L9$E61 E6r#   