
    $hR7                        d dl Z d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ ddgZ G d de          Zd	d
e	 de
 de dz   e_        	 	 	 	 ddee         dee         dee         dee         dedee         dededededededefdZd Zdee         dee         dee         dee         dedededededededefdZdee         dee         dee         dee         dedededededededefdZdS )     N)Tensor   )	Optimizer_use_grad_for_differentiable
_get_value_view_as_real_default_to_fused_or_foreach_differentiable_doc_foreach_doc_maximize_doc)ListOptionalAdagradadagradc                   |     e Zd Z	 	 	 	 	 	 dddddee         ded	ef fd
Z fdZd Zd Ze	dd            Z
 xZS )r   {Gz?r   绽|=NF)maximizedifferentiableforeachr   r   c          
         d|k    st          d|           d|k    st          d|           d|k    st          d|           d|k    st          d|           d|k    st          d|           t          ||||||||	          }
t                                          ||
           | j        D ]}|d         D ]|}| j        |         }t          j        dt          j        	          |d
<   t          j	        |          rt          ||          n|}t          j        ||t          j                  |d<   }d S )Ng        zInvalid learning rate: zInvalid lr_decay value: zInvalid weight_decay value: z)Invalid initial_accumulator_value value: zInvalid epsilon value: )lrlr_decayepsweight_decayinitial_accumulator_valuer   r   r   paramsdtypestep)memory_formatsum)
ValueErrordictsuper__init__param_groupsstatetorchtensorfloat32
is_complexcomplex	full_likepreserve_format)selfr   r   r   r   r   r   r   r   r   defaultsgrouppr(   
init_value	__class__s                  S/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torch/optim/adagrad.pyr&   zAdagrad.__init__   s    byy;r;;<<<hBBBCCCl""JLJJKKK///W<UWW   czz<s<<===%&?)	
 	
 	
 	***& 	 	E8_ 
 

1 %S F F Ff '**3G57PQQQ2 
  %z1F     e
	 	    c                    t                                          |           | j        D ]D}|                    dd            |                    dd           |                    dd           Et	          | j                                                  }t          |          dk    ot          j	        |d         d                   }|s;|D ]:}t          j
        t          |d                   t          j                  |d<   9d S d S )Nr   r   Fr   r   r    r   )r%   __setstate__r'   
setdefaultlistr(   valueslenr)   	is_tensorr*   floatr+   )r0   r(   r2   state_valuesstep_is_tensorsr5   s         r6   r9   zAdagrad.__setstate__?   s   U###& 	6 	6EY---Z///-u5555DJ--//00l++q0 
eoOF#7
 7
  	P! P P!Lqy)9)9OOO&			P 	PP Pr7   c                 ~    | j         D ]4}|d         D ])}| j        |         }|d                                          *5d S )Nr   r"   )r'   r(   share_memory_)r0   r2   r3   r(   s       r6   share_memoryzAdagrad.share_memoryN   sZ    & 	- 	-E8_ - -
1e**,,,,-	- 	-r7   c                 h   d\  }}|d         D ]}|j         ||j         j        z  }|t          j        |          z  }|                    |           |                    |j                    | j        |         }	|                    |	d                    |                    |	d                    ||fS )N)FFr   r"   r    )grad	is_sparser)   r,   appendr(   )
r0   r2   params_with_gradgrads
state_sumsstate_stepshas_sparse_gradhas_complexr3   r(   s
             r6   _init_groupzAdagrad._init_groupT   s    '3$x 	2 	2Av!16#33u/222 ''***QV$$$
1!!%,///""5=111++r7   c                 `   d}|5t          j                    5   |            }ddd           n# 1 swxY w Y   | j        D ]l}g }g }g }g }|                     |||||          \  }}	t	          |||||d         |d         |d         |d         ||d         |d         |d         |		           m|S )
zPerform a single optimization step.

        Args:
            closure (Callable, optional): A closure that reevaluates the model
                and returns the loss.
        Nr   r   r   r   r   r   r   )	r   r   r   r   rN   r   r   r   rO   )r)   enable_gradr'   rP   r   )
r0   closurelossr2   rJ   rK   rL   rM   rN   rO   s
             r6   r    zAdagrad.stepb   s7    "$$ ! !wyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! & 	 	E!EJK+/+;+;ECSUZ\fhs+t+t(O[ ;">2z*%L /i(z*$%56'      s   /33)r   r   r   r   r   NN)__name__
__module____qualname__r   boolr&   r9   rE   rP   r   r    __classcell__)r5   s   @r6   r   r      s         "#"&1 $1 1 1 $1 1 1 1 1 1 1 1fP P P P P- - -, , , "% % % "!% % % % %r7   a[  Implements Adagrad algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \: \theta_0 \text{ (params)}, \: f(\theta)
                \text{ (objective)}, \: \lambda \text{ (weight decay)},                          \\
            &\hspace{12mm}    \tau \text{ (initial accumulator value)}, \: \eta\text{ (lr decay)}\\
            &\textbf{initialize} :  state\_sum_0 \leftarrow 0                             \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\
            &\hspace{5mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})           \\
            &\hspace{5mm} \tilde{\gamma}    \leftarrow \gamma / (1 +(t-1) \eta)                  \\
            &\hspace{5mm} \textbf{if} \: \lambda \neq 0                                          \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda \theta_{t-1}                             \\
            &\hspace{5mm}state\_sum_t  \leftarrow  state\_sum_{t-1} + g^2_t                      \\
            &\hspace{5mm}\theta_t \leftarrow
                \theta_{t-1}- \tilde{\gamma} \frac{g_t}{\sqrt{state\_sum_t}+\epsilon}            \\
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    For further details regarding the algorithm we refer to `Adaptive Subgradient Methods for Online Learning
    and Stochastic Optimization`_.
    a  
    Args:
        params (iterable): iterable of parameters to optimize or dicts defining
            parameter groups
        lr (float, optional): learning rate (default: 1e-2)
        lr_decay (float, optional): learning rate decay (default: 0)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-10)
        z	
        z

    .. _Adaptive Subgradient Methods for Online Learning and Stochastic
        Optimization: http://jmlr.org/papers/v12/duchi11a.html

    Fr   rK   rL   rM   rN   r   r   rO   r   r   r   r   r   c                n   t          d |D                       st          d          |t          | |d          \  }}|r-t          j                                        rt          d          |r&t          j                                        st          }nt          } || |||||	|
|||||           dS )ztFunctional API that performs Adagrad algorithm computation.

    See :class:`~torch.optim.Adagrad` for details.
    c              3   J   K   | ]}t          |t          j                  V  d S rU   )
isinstancer)   r   ).0ts     r6   	<genexpr>zadagrad.<locals>.<genexpr>   s.      @@qz!U\**@@@@@@r7   zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF)	use_fusedz6torch.jit.script not supported with foreach optimizersr   r   r   r   rN   r   r   rO   )allRuntimeErrorr	   r)   jitis_scripting_multi_tensor_adagrad_single_tensor_adagrad)r   rK   rL   rM   rN   r   r   rO   r   r   r   r   r   _funcs                  r6   r   r      s    , @@K@@@@@ 
^
 
 	
 1&.TYZZZ
7 U59))++ USTTT &uy--// &$%D!'%     r7   c                     |                                  }|                                dk    s|                                dk    rt          j        |           S t          j        |||          S )Nr   )sizenumelr)   
empty_likesparse_coo_tensor)rG   grad_indicesr<   rl   s       r6   _make_sparserq      s^    99;;Dq  FLLNNa$7$7%%%"<>>>r7   c          
         t          | |||          D ]F\  }}}}|dz  }t          |          }|	s|n| }|dk    r-|j        rt          d          |                    ||          }|d|dz
  |z  z   z  }|j        r|                                }|                                }|                                }|                    t          |||
                    d                               |                    |          }|                                                                                    |          }|                    t          ||||z            |            Xt          j        |          }|r<t          j        |          }t          j        |          }t          j        |          }|                    ||d           |
r|                                |z   }n'|                                                    |          }|                    |||            |r(t          j        |          }t          j        |          }Hd S )Nr   r   z;weight_decay option is not compatible with sparse gradientsalpha   value)zipr   rH   rd   addcoalesce_indices_valuesadd_rq   powsparse_masksqrt_r)   r,   view_as_realaddcmul_sqrtaddcdiv_view_as_complex)r   rK   rL   rM   r   r   r   r   rN   r   r   rO   paramrG   	state_sumstep_tr    clrrp   grad_valuesstd
std_valuesr,   s                          r6   rh   rh      sf     -0z;,W,W (= (=(i!&!!#.tt$1~ "Q   88E866DAX--.> 	===??D==??L,,..KNN<lKOOA<N<NOOPPP''--C,,..33C88JJJT<z1IJJSVRV      )%00J 2)$//!.y99	*511tT333 1nn&&,nn&&++C00NN4SDN111 =-e44!1)<<	Q(= (=r7   c                   |
r
J d            t          |           dk    rd S t          j        | |||g          }|                                D ]\  \  }}}}}|ot	          d |D                       }|rt          ||||||dd|
|           D|	rt          j        |          }|rt          |||           |d         j	        r,t          j
        |t          j        dd	          d
           nt          j
        |d           |dk    r1|	rt          j
        |||
           nt          j        |||
          }fd|D             }t          j        |||d           t          j        |          }t          j
        ||           |dk    s|	rt          j        ||           |}nt          j        ||          }t          j        |||           d S )Nz#_foreach ops don't support autogradr   c              3   $   K   | ]}|j         V  d S rU   )rH   )r^   rG   s     r6   r`   z(_multi_tensor_adagrad.<locals>.<genexpr>G  s$      8a8aD8a8a8a8a8a8ar7   TFrb   g      ?cpu)devicers   r   c                 H    g | ]} d t          |          d z
  z  z   z  S )r   )r   )r^   r    r   r   s     r6   
<listcomp>z)_multi_tensor_adagrad.<locals>.<listcomp>q  s7    bbbtbSAD!1!1A!5 AABbbbr7   rv   )r=   r   "_group_tensors_by_device_and_dtyper<   anyrh   r)   _foreach_negr   is_cpu_foreach_add_r*   _foreach_add_foreach_addcmul__foreach_sqrt_foreach_mul__foreach_mul_foreach_addcdiv_)r   rK   rL   rM   r   r   r   r   rN   r   r   rO   grouped_tensorlistsdevice_paramsdevice_gradsdevice_state_sumsdevice_state_stepsri   device_has_sparse_grad	minus_clrr   	numerators       ` `               r6   rg   rg   /  sq     DDDDD 6{{a#FPUWacnGoppUhUoUoUqUq 9? 9?Q	M-'8:Lq!0!aS8a8aT`8a8a8a5a5a! 	"!")! $-'     	< -l;;L  	J-7HIII a ' 	7 2ELU4S4S4S[^_____ 2A6661 c#L-|TTTTT$1,UabbbbbbbbOabbb	 1<UVWWWW!"344C%%%1i888$II*<CCIy#>>>>s9? 9?r7   )NNFF)r)   r   	optimizerr   r   r   r   r	   r
   r   r   typingr   r   __all__r   __doc__rY   r?   r   rq   rh   rg    r7   r6   <module>r      sI         h h h h h h h h h h h h h h h h h h h h ! ! ! ! ! ! ! !i
 } } } } }i } } }@2 
  
  
  3)f !" 3 3L3<3 V3 f	3 3 d^3 3 3 	3 3 3 
3  !3 3 3 3l? ? ?8=L8=<8= V8= f	8= 	8= 8= 8= 
8= 8= 8= 8= 8= 8= 8= 8=vP?LP?<P? VP? f	P? 	P? P? P? 
P? P? P? P? P? P? P? P? P? P?r7   