
    קgu7                        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$dS )    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dS )ArgMappingExceptionN__name__
__module____qualname__     ]/var/www/html/ai-engine/env/lib/python3.11/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#   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__r&   r'   setr(   )selfvaluer&   r(   r'   kwargs	__class__s         r    r-   zOptimizerVariable.__init__/   sU     	))&))),2 0 6B#6#?#%%   r   argsList[VariableTracker]r1   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_argsr0   r7   map_sources_and_install_guardsupdate_list_argsidstore_global_weakref_by_idcreate_finalizerr   creater   r#   r,   call_method)r/   txnamer3   r1   py_args	py_kwargsret_valmangled_name_r2   s             r    rB   zOptimizerVariable.call_method<   sF    =  44R888%%'''%9T%94%J6%J%J"0$*0'GYGG33B777%%b$KKK  ?bnn>>--lDJGGG%%b))) (.w777')>?    ww""2tT6:::s   CC C83C8rC   r   c                 &   |dv r%t          | |t          | j        |                    S |dk    r@ddlm} | j        j        D ]}|d         D ]} ||           |                     |           t                      	                    ||          S )N)r7   step)sourceparam_groupsr   mark_static_addressparams)
r   r
   rL   
decoratorsrO   r0   rM   _set_capturabler,   var_getattr)r/   rC   rD   rO   grouppr2   s         r    rS   zOptimizerVariable.var_getattr]   s     ***"4jd6S6STTTT>!!8888880 + +x + +A''****+   $$$ww""2t,,,r   c                     | j         j        D ]i}|d         D ]^}|j        j        }|j                            t          |          d           }|r&|                    |          rddlm	}  |d          _jd S )NrP   r   )UnsupportedzPending mutation on parameter)
r0   rM   outputside_effectsid_to_variablegetr>   has_pending_mutationexcrW   )r/   rC   grU   rY   variablerW   s          r    r9   z1OptimizerVariable.graph_break_if_pending_mutationo   s    
 ( 	G 	GAx[ G G!y5'6::2a55$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} ddlm}  fd}t	           j        j                  D ]\  }} ||          rd|d<   |                      ||t           j	        d                     j        j                            }t	          |j
                  D ]G\  }}t          j        t          j        d                    }	t          j        d          |j
        |	<   Hd S )Nr   LazyVariableTrackerVariableBuilderc                     d}d}|                      dg           D ]$}||j        p|j        z  }||j        j        vz  }%d| v o|o|S )NTrP   
capturable)r[   is_cudais_xpur0   state)rT   all_uninitializedall_gpurU   r/   s       r    safe_to_set_capturablezAOptimizerVariable._set_capturable.<locals>.safe_to_set_capturable   sl     $GYYx,, ? ?1900!Qdj.>%>>!!5(J->J7Jr   Trf   rM   ) rb   builderrd   	enumerater0   rM   realize_allr
   rL   itemsr   _HashableTrackerr   rA   )
r/   rC   rb   rd   rl   indrT   param_groups_vtparam_group_vtkeys
   `         r    rR   z!OptimizerVariable._set_capturable}   s5   )))))),,,,,,	K 	K 	K 	K 	K $DJ$;<< 	+ 	+JC%%e,, +&*l#-99HOOB
4; G GHH
' 
 

 $-_-B#C#C 	F 	FC#4 '55 C )9(?(E(EN %%		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          )NrM   )
isinstancer   as_python_constantr   rq   r   rL   r   baser
   memberr0   rM   indexr   )argr/   s    r    map_argz2OptimizerVariable.get_python_args.<locals>.map_arg   s    #/00 
A--///C.. Asy A	3 122Asz=99A sz
;;A JO*n<<z.sz/?@@%%r   c                 &    g | ]} |          S r   r   ).0r~   r   s     r    
<listcomp>z5OptimizerVariable.get_python_args.<locals>.<listcomp>   s!    111SGGCLL111r   c                 .    i | ]\  }}| |          S r   r   )r   kvr   s      r    
<dictcomp>z5OptimizerVariable.get_python_args.<locals>.<dictcomp>   s'    ???1a???r   )rq   )r/   r3   r1   new_args
new_kwargsr   s   `    @r    r;   z!OptimizerVariable.get_python_args   sd    	& 	& 	& 	& 	& 2111D111???????
##r   c                     | j         j                                        D ]9\  }}d|v r0|d         j        r#|d                             |j                  |d<   :d S )NrK   )r0   ri   rq   is_cputodevice)r/   rU   ri   s      r    r:   z"OptimizerVariable.move_step_if_cpu   sb    
(..00 	; 	;HAu5=#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                   |                      ||t          | j        d                    | j        j                            }  ||t          | j        d                    | j        j                  }|                                 t%          t'          | j        j        |j                            D ]\  }\  }}	t+          |d	                   d
k    r|d	         D ]}
|
j        d }t%          | j        j                                                  D ]\  }}||
u r|} n|rkt          | j        d          }|                      ||t1          |t3          ||                              | j        j        |
                               n|	j        }|	                    |t7          j        d	                    }t%          t'          |d	         |                    |                              D ]l\  }\  }}|j        }|| j        |<   t=          |d          }|j        || j        |j        <   @t?          |                     tB          j"                             mt          | j        d          }t%          | j        j                                                  D ]\  }\  }}t1          |t3          ||                    }|                                D ]I\  }}tG          |t          j
                  r*|| j        vr!|| j        vrt1          ||          | j        |<   Jd S )Nr   rN   r   rc   ra   c                      |            d S r+   r   )xrO   s    r    mark_staticzEOptimizerVariable.map_sources_and_install_guards.<locals>.mark_static   s    """""r   rM   ri   rP   r   grad)$rQ   rO   rn   rd   lazyrb   r&   r'   r   torchTensorr0   ri   rp   r
   rL   rM   realizero   ziprq   lenr   keysr   r   getitem_constr   rA   unpack_var_sequencer   r	   
make_guardr   CONSTANT_MATCHry   )r/   rC   rd   rb   r   rt   state_vtg_indrT   group_vtparam	key_indexir   state_sourcegroup_source	params_vtp_indrU   p_vtparam_sourcegrad_sourceidxr0   p_state_sourcer   rO   s                             @r    r<   z0OptimizerVariable.map_sources_and_install_guards   s   444444,,,,,,------  "	# 	# 	# 	# 	# 	elK1ABBB .99HOOB
4; G GHH
' 
 
 I??2z$+w'G'GHHJ
 
 	 )2
')>??)
 )
 )	W )	W$E$E8
 5?##a''"8_ " "Ez-$(	$-dj.>.C.C.E.E$F$F & &DAq Ezz,-	 %  * % "+5dk7+K+KL/;;!"$&$1(4(:<(S(S%& %&!" !" #'*"25"9!; !;   "E#?L ..r3C3J83T3TUUI$-E(OY%B%B2%F%FGG% % W W y4  ${+7%a((  
 6%2=D'//!+"8"89T"U"UVVVVW" "$+w77()9)?)?)A)ABB 
	P 
	POC!U*0sCC N  P P1q%,//P!444!666/<^Q/O/OD)!,P	
	P 
	Pr   c                 (   ddl m} ddlm} || j        v rZ ||            ||| j        |                   }| j                            |j                            |j	                             n|| j
        v r ||| j
        |                   }nv ||           |                    t          |          } ||t          |                    }| j                            |j                            |j	                              ||          }|S )z%Wrap state tensor in a TensorVariabler   rN   r   rc   )rQ   rO   rn   rd   r'   r(   addrX   module_key_namerD   r&   r?   r   r   )r/   rC   tensor_valuerO   rd   rn   global_nameresults           r    wrap_tensorzOptimizerVariable.wrap_tensor!  s5   444444,,,,,, 4000---%ob$*?*MNNG$(()B)B7<)P)PQQQQT000%ob$*=l*KLLGG  ---778I<XXK%ob*=k*J*JKKG$(()B)B7<)P)PQQQ&&r   c                    t          ||          D ]6\  }}t          |t                    rt          |t                    s
J d            t	          |          D ]\  }}	|j        j                            |           t          |	t          j	                  r/|j
                            |                     ||	                     mddlm}
m} |j        rA|j
                              ||t#          |j        |                    |	                     |j
                            |
                    ||	                     8dS )z7Update the args and kwargs to the traced optimizer callz-py_arg should be a list in optimizer variabler   )SourcelessBuilderrd   N)r   ry   r   listro   rX   rY   mutationr   r   rq   appendr   rn   r   rd   rL   r   rA   )r/   rC   r3   r1   rE   rF   r~   py_argr   valr   rd   s               r    r=   z"OptimizerVariable.update_list_args=  s    tW-- 	P 	PKC#|,, P!D  C CBC C C (// P PFAsI*33C888!#u|44 
P	(()9)9"c)B)BCCCCOOOOOOOO: PI,, QM#*a4P4P Q QRU V V     I,,->-E-Eb#-N-NOOOO#	P 	P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                                         Yd S r+   )_bufferspop_parametersparams_flatclear)rD   gmnames_to_deletetcs    r    clear_static_tensor_refsz\OptimizerVariable.create_finalizer.<locals>.init_finalizer.<locals>.clear_static_tensor_refsZ  si    + / /DKOOD$///N&&tT222~ /,,...	/ /r   )weakreffinalize)r   r   r   r   r0   s   ` r    init_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizerY  sC    / / / / / / / U$<=====r   )r(   r0   rX   tracing_contextadd_graph_finalizer)r/   rC   r   r   r   r0   s      @@@r    r@   z"OptimizerVariable.create_finalizerT  s_    2
Y&	> 	> 	> 	> 	> 	> 	> 		%%n55555r   )NNN)r)   N)r3   r4   r1   r5   r)   r   )rC   r   )r   r   r   r   _nonvar_fieldsr-   rB   rS   r9   rR   r;   r:   r<   r   r=   r@   __classcell__)r2   s   @r    r%   r%   '   sn        
#	1	N  @ 
@ @ @ @ @ @; &	;
 -; 
; ; ; ; ; ;B- - - - - -$G G G F  F  FD$ $ $8; ; ;
_P _P _PB   8P)P P P P.6 6 6 6 6 6 6r   r%   )%r   typingr   r   r   r   torch.utils._pytreer   guardsr   r	   rL   r
   r   r   r   r   utilsr   constantr   dictsr   listsr   miscr   user_definedr   torch._dynamo.symbolic_convertr   r{   r   	Exceptionr   r#   r%   r   r   r    <module>r      s    , , , , , , , , , ,  - - - - - - 0 0 0 0 0 0 0 0              & % % % % % & & & & & & $ $ $ $ $ $       ! ! ! ! ! ! 3 3 3 3 3 3  &DDDDDD%%%%%%	 	 	 	 	) 	 	 		 	 	 	 	I 	 	 	|6 |6 |6 |6 |61 |6 |6 |6 |6 |6r   