
    Ph!                         d dl Z d dl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 ddl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  G d de      Z G d de      Z G d de      Z y)    N)DictList   )mark_static_address)GuardBuilderinstall_guard)
AttrSourceGetItemSourceGlobalWeakRefSource)global_key_name   )MutableLocalVariableTracker)ConstantVariable)ConstDictVariable)ListVariable)GetAttrVariable)UserDefinedObjectVariablec                       e Zd Zy)ArgMappingExceptionN__name__
__module____qualname__     lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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                   l     e Zd Z	 	 	 d
 fd	Z	 	 	 	 	 	 d fdZ fdZd Zd Zd Zd Z	d Z
d	 Z xZS )OptimizerVariablec                     t        |   |fi | | j                  j                  D ]"  }d|v rd|d<   |d   D ]  }t	        |d        $ |xs i | _        |xs i | _        |xs
 t               | _        y )N
capturableTparamsFguard)	super__init__valueparam_groupsr   grad_to_sourcetensor_to_sourcesetstatic_tensor_names)	selfr*   r,   r/   r-   kwargsgroupp	__class__s	           r   r)   zOptimizerVariable.__init__   s     	)&)ZZ,,Eu$&*l#8_#AU3 %	 - -2 0 6B#6#?#% r   c                    |dk(  r	  | j                   |i |\  }} | j                  j                  |i |}| j                  |       | j	                  |||||       |j                  | j                         | j                         | j                  |       t        j                  |      S t        	| 5  ||||      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_groupN)get_python_argsr*   r6   map_sources_and_install_guardsupdate_list_argsstore_global_weakrefget_global_namecreate_finalizerr   creater   r    r(   call_method)
r0   txnameargsr1   py_args	py_kwargsret_val_r4   s
            r   r>   zOptimizerVariable.call_method1   s     = %9T%9%94%J6%J"0$**00'GYG33B7%%b$K ''(<(<(>

K%%b) (..w77
 w"2tT6::	 ()>? s   B&C CCc                 F    |dk(  rt        | |      S t        | 	  ||      S )Nr6   )r   r(   var_getattr)r0   r?   r@   r4   s      r   rG   zOptimizerVariable.var_getattrO   s*    = "4..w"2t,,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
              rt        | j                  t              rtt        | j                  j                  t              rP| j                  j                  j                  dk(  r-j                  j                  | j                  j                     S t               )Nr+   )
isinstancer   as_python_constantr   itemsr   sourcer
   baser	   memberr*   r+   indexr   )argr0   s    r   map_argz2OptimizerVariable.get_python_args.<locals>.map_argX   s    #/0--//C.syy	3 12szz=9szz
;JJOO**n<zz..szz/?/?@@%''r   )rL   )	r0   rA   r1   rR   rQ   new_argskv
new_kwargss	   `        r   r7   z!OptimizerVariable.get_python_argsU   s[    	( -11DSGCLD106?1am
?## 2?s
   A	Ac           	      6   ddl m} i | _        i | _        t	        | j
                  j                        D ]  \  }}t        t        | j                  d      |      }t	        |d         D ]Z  \  }}t        t        |d      |      }|| j                  |<   |j                  8t        |d      | j                  |j                  <   \  t        | j                  d      }	t        |	j                  t        j                               | j
                  j                  j!                         D ](  \  }}
|j#                  t%        |      |       t        |	| j                  |         }t        |j                  t        j                               |
j!                         D ]  \  }}t'        |t(        j*                        r6|| j                  vr(|| j                  vrt        ||      | j                  |<   V| t'        |t,        t.        t0        t2        f      r3t        t        ||      j                  t        j4                               t7                +   ||t        | j                  d            | j
                  j                        j9                          y )Nr   VariableBuilderr+   r%   gradstate)builderrY   r,   r-   	enumerater*   r+   r
   r	   rM   rZ   r   
make_guardr   	DICT_KEYSr[   rL   r:   r   rJ   torchTensorboolintfloatstrCONSTANT_MATCHr    recursive_realize)r0   r?   rY   g_indr2   group_sourcep_indr3   param_sourcestate_sourcer*   p_state_sourcerT   rU   s                 r   r8   z0OptimizerVariable.map_sources_and_install_guardsl   s   ,  "%djj&=&=>LE5(DKK)PRWXL%eHo6q,!,95  ,8%%a(66%2<$3D''/ 7 ? "$++w7l--l.D.DEF

((..0HAu##OA$6:*<9N9Nq9QRN.33L4J4JKL1q%,,/!4!44!6!66/<^Q/OD))!,Y*QsE30G"H!%na8CC(77 011 &	 1* 	EJt{{NCDJJ##	



r   c                 N   ddl m} || j                  v rbt        |d        ||| j                  |         }| j                  j                  |j                  j                  |j                               n|| j                  v r ||| j                  |         }nt        |d       |j                  t        |      |        ||t        t        |                  }| j                  j                  |j                  j                  |j                                ||      }|S )z%Wrap state tensor in a TensorVariabler   rX   Fr&   )r\   rY   r-   r   r/   addoutputmodule_key_namer@   r,   r:   r   r   )r0   r?   tensor_valuerY   r\   results         r   wrap_tensorzOptimizerVariable.wrap_tensor   s    , 4000E:%b$*?*?*MNG$$(()B)B7<<)PQT000%b$*=*=l*KLG  E:##OL$A<P%'(EFG $$(()B)B7<<)PQ&r   c           
         t        ||      D ]n  \  }}t        |t              st        d |D              s*t        |D cg c]  }| j	                  ||       c}t                     }	|j                  ||	       p yc c}w )z7Update the args and kwargs to the traced optimizer callc              3   P   K   | ]  }t        |t        j                           y wN)rJ   r`   ra   ).0ts     r   	<genexpr>z5OptimizerVariable.update_list_args.<locals>.<genexpr>   s      55;
1ell+Vs   $&)mutable_localN)ziprJ   r   allrt   r   replace_all)
r0   r?   rA   r1   rB   rC   rQ   py_argry   tensor_varss
             r   r9   z"OptimizerVariable.update_list_args   sz    tW-KC#|, 55;5 2 +6<=fT%%b!,f=".. sK0 .
 >s    A?
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 rw   )_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_refs   sJ    +DKKOOD$/NN&&tT2~~,,.	 ,r   )weakreffinalize)r   r   r   r   r*   s   ` r   init_finalizerz:OptimizerVariable.create_finalizer.<locals>.init_finalizer   s    / U$<=r   )r/   r*   rp   tracing_contextadd_graph_finalizer)r0   r?   r   r   r   r*   s      @@@r   r<   z"OptimizerVariable.create_finalizer   s?    22

YY&&	> 			%%n5r   c                 2    dt        | j                         S )N__optimizer_)idr*   )r0   s    r   r;   z!OptimizerVariable.get_global_name   s    bn-..r   )NNN)rA   zList[VariableTracker]r1   zDict[str, VariableTracker]returnr   )r   r   r   r)   r>   rG   r7   r8   rt   r9   r<   r;   __classcell__)r4   s   @r   r"   r"      s[      @*; &	;
 -; 
;<-$..`:
16"/r   r"   )!r   typingr   r   r`   
decoratorsr   guardsr   r   rM   r	   r
   r   utilsr   rN   r   r   constantr   dictsr   listsr   miscr   user_definedr   	Exceptionr   r    r"   r   r   r   <module>r      sV       , 0 C C # / & $  ! 3	) 		I 	|/1 |/r   