
    $hX8                     (   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	 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e         dee         d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e         d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e         d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_default_to_fused_or_foreach_use_grad_for_differentiable_differentiable_doc_foreach_doc_maximize_doc_view_as_real)ListOptionalRMSproprmspropc                   t     e Zd Z	 	 	 	 	 	 	 	 	 ddee         ded	ef fd
Z fdZd Zedd            Z	 xZ
S )r   {Gz?Gz?:0yE>r   FNforeachmaximizedifferentiablec                 l   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                                          ||           d S )Ng        zInvalid learning rate: zInvalid epsilon value: zInvalid momentum value: zInvalid weight_decay value: zInvalid alpha value: )	lrmomentumalphaepscenteredweight_decayr   r   r   )
ValueErrordictsuper__init__)selfparamsr   r   r   r   r   r   r   r   r   defaults	__class__s               S/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torch/optim/rmsprop.pyr!   zRMSprop.__init__   s     byy;r;;<<<czz<s<<===hBBBCCCl""JLJJKKKe||<U<<===%)

 

 

 	*****    c                 :   t                                          |           | j        D ]p}|                    dd           |                    dd           |                    dd            |                    dd           |                    dd           qd S )Nr   r   r   Fr   r   r   )r    __setstate__param_groups
setdefault)r"   stategroupr%   s      r&   r)   zRMSprop.__setstate__0   s    U###& 	6 	6EZ+++Z///Y---Z///-u5555	6 	6r'   c                    d}|d         D ]}|j         |t          j        |          z  }|                    |           |j         j        rt          d          |                    |j                    | j        |         }	t          |	          dk    rd|	d<   t          j        |t          j	                  |	d<   |d         dk    r#t          j        |t          j	                  |	d	<   |d
         r#t          j        |t          j	                  |	d<   |                    |	d                    |d         dk    r|                    |	d	                    |d
         r|                    |	d                    |d         r*t          |	d         t                    rt          d          |	dxx         dz  cc<   |S )NFr#   z)RMSprop does not support sparse gradientsr   step)memory_format
square_avgr   momentum_bufferr   grad_avgr   z`step` can't be a tensorr   )gradtorch
is_complexappend	is_sparseRuntimeErrorr,   len
zeros_likepreserve_format
isinstancer   )
r"   r-   params_with_gradgradssquare_avgsmomentum_buffer_list	grad_avgshas_complexpr,   s
             r&   _init_groupzRMSprop._init_group9   s   x $	 $	Av~5+A...K##A&&&v P"#NOOOLL   JqME 5zzQ !f&+&6U%:' ' 'l# $q((/4/?)>0 0 0E+, $ (-(8)>) ) )E*% u\2333Z 1$$$++E2C,DEEEZ  4  z!2333%& ?:eFmV+L+L ?"#=>>>&MMMQMMMMr'   c                 |   d}|5t          j                    5   |            }ddd           n# 1 swxY w Y   | j        D ]z}g }g }g }g }g }|                     ||||||          }	t	          ||||||d         |d         |d         |d         |d         |d         |d         |d	         |d
         |	           {|S )zPerforms 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   r   r   r   r   r   r   r   rC   )r5   enable_gradr*   rE   r   )
r"   closurelossr-   r>   r?   r@   rB   rA   rC   s
             r&   r/   zRMSprop.stepb   sH    "$$ ! !wyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! & 	 	E!EKI#% **52BE;XlnwxxK $;Gn%L">2z*z*i(z*$%56'    $ s   /33)	r   r   r   r   r   FNFF)N)__name__
__module____qualname__r   boolr!   r)   rE   r   r/   __classcell__)r%   s   @r&   r   r   
   s         "&$#+ #+ $#+ #+ #+ #+ #+ #+ #+ #+J6 6 6 6 6' ' 'R "' ' ' "!' ' ' ' 'r'   a  Implements RMSprop algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \alpha \text{ (alpha)},\: \gamma \text{ (lr)},
                \: \theta_0 \text{ (params)}, \: f(\theta) \text{ (objective)}                   \\
            &\hspace{13mm}   \lambda \text{ (weight decay)},\: \mu \text{ (momentum)},\: centered\\
            &\textbf{initialize} : v_0 \leftarrow 0 \text{ (square average)}, \:
                \textbf{b}_0 \leftarrow 0 \text{ (buffer)}, \: g^{ave}_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}if \: \lambda \neq 0                                                    \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm}v_t           \leftarrow   \alpha v_{t-1} + (1 - \alpha) g^2_t
                \hspace{8mm}                                                                     \\
            &\hspace{5mm} \tilde{v_t} \leftarrow v_t                                             \\
            &\hspace{5mm}if \: centered                                                          \\
            &\hspace{10mm} g^{ave}_t \leftarrow g^{ave}_{t-1} \alpha + (1-\alpha) g_t            \\
            &\hspace{10mm} \tilde{v_t} \leftarrow \tilde{v_t} -  \big(g^{ave}_{t} \big)^2        \\
            &\hspace{5mm}if \: \mu > 0                                                           \\
            &\hspace{10mm} \textbf{b}_t\leftarrow \mu \textbf{b}_{t-1} +
                g_t/ \big(\sqrt{\tilde{v_t}} +  \epsilon \big)                                   \\
            &\hspace{10mm} \theta_t \leftarrow \theta_{t-1} - \gamma \textbf{b}_t                \\
            &\hspace{5mm} else                                                                   \\
            &\hspace{10mm}\theta_t      \leftarrow   \theta_{t-1} -
                \gamma  g_t/ \big(\sqrt{\tilde{v_t}} + \epsilon \big)  \hspace{3mm}              \\
            &\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
    `lecture notes <https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf>`_ by G. Hinton.
    and centered version `Generating Sequences
    With Recurrent Neural Networks <https://arxiv.org/pdf/1308.0850v5.pdf>`_.
    The implementation here takes the square root of the gradient average before
    adding epsilon (note that TensorFlow interchanges these two operations). The effective
    learning rate is thus :math:`\gamma/(\sqrt{v} + \epsilon)` where :math:`\gamma`
    is the scheduled learning rate and :math:`v` is the weighted moving average
    of the squared gradient.
    a  
    Args:
        params (iterable): iterable of parameters to optimize or dicts defining
            parameter groups
        lr (float, optional): learning rate (default: 1e-2)
        momentum (float, optional): momentum factor (default: 0)
        alpha (float, optional): smoothing constant (default: 0.99)
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-8)
        centered (bool, optional) : if ``True``, compute the centered RMSProp,
            the gradient is normalized by an estimation of its variance
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        z	
        z

    Fr#   r?   r@   rB   rA   r   r   r   rC   r   r   r   r   r   r   c	                "   |t          | |d          \  }}|r-t          j                                        rt	          d          |r&t          j                                        st
          }nt          } || |||||	|
|||||||           dS )zsFunctional API that performs rmsprop algorithm computation.
    See :class:`~torch.optim.RMSProp` for details.
    NF)	use_fusedz6torch.jit.script not supported with foreach optimizers)	r   r   r   r   r   r   r   r   rC   )r   r5   jitis_scriptingr9   _multi_tensor_rmsprop_single_tensor_rmsprop)r#   r?   r@   rB   rA   r   r   r   rC   r   r   r   r   r   r   _funcs                    r&   r   r      s    0 1&.TYZZZ
7 U59))++ USTTT &uy--// &$%D!%     r'   c       	            t          |           D ]\  }}||         }|s|n| }||         }|dk    r|                    ||          }t          j        |          }|r<t          j        |          }t          j        |          }t          j        |          }|                    |                              ||d|z
             |
rb||         }|rt          j        |          }|                    |d|z
             |                    ||d          	                                }n|
                                }|r|                    |          }n|                    |          }|	dk    ra||         }|rt          j        |          }|                    |	                              ||           |                    ||            |                    |||            d S )Nr   r   r   value)	enumerateaddr5   r6   view_as_realmul_addcmul_lerp_addcmulsqrt_sqrtadd_addcdiv_)r#   r?   r@   rB   rA   r   r   r   r   r   r   r   r   rC   iparamr4   r1   is_complex_paramr3   avgbufs                         r&   rT   rT      s   $ f%% %1 %15Qx#.tt$ ^
188E866D +E22 	8&u--E%d++D+J77J''d!e)'DDD 	$ |H 8 -h77NN4U+++$$Xxr$BBHHJJCC//##C 	 ''#,,CC((3--Ca<<&q)C .(--HHX''c222JJs2#J&&&&NN4RCN0000K%1 %1r'   c       	         4   t          |           dk    rd S |r
J d            t          j        | ||||g          }|                                D ]\  \  }}}}}}|rt	          j        |          }|dk    r1|rt	          j        |||           nt	          j        |||          }t          |          }|rC||g}|	dk    r|	                    |           |
r|	                    |           t          |g|R   t	          j        ||           t	          j        |||d|z
             |
r[t	          j        ||d|z
             t	          j        |||d          }t	          j        |           t	          j        ||           n)t	          j        |          }t	          j        ||           |	dk    rEt	          j        ||	           t	          j        |||           t	          j        |||            t	          j        ||||            d S )Nr   z#_foreach ops don't support autogradrX   r   rY   r[   )r:   r   "_group_tensors_by_device_and_dtypevaluesr5   _foreach_neg_foreach_add__foreach_addlistr7   r   _foreach_mul__foreach_addcmul__foreach_lerp__foreach_addcmul_foreach_sqrt__foreach_sqrt_foreach_addcdiv_)r#   r?   r@   rB   rA   r   r   r   r   r   r   r   r   rC   grouped_tensorsgrouped_paramsgrouped_gradsgrouped_square_avgsgrouped_grad_avgsgrouped_momentum_buffer_listrU   state_and_gradsrj   s                          r&   rS   rS   9  s   $ 6{{aDDDDDBFES^`ik  DA  B  BO/>/E/E/G/G'S 'S 	, '>=*=?P	% 	>!.}==M1 f#M>VVVVV % 2=.Xd e e e]++ 	<,.ABO!||&&'CDDD :&&'8999.;?;;;;/777 3]MYZ]bYbcccc 	* !2M1u9MMM()<>OQbjlmmmC %%%S))))%&9::CS)))a<< <hGGG#$@-QTUUU0LUWTWXXXXX#NM3rcRRRRRO'S 'Sr'   )NFFF)r5   r   	optimizerr   r   r   r   r	   r
   r   typingr   r   __all__r   __doc__rM   floatr   rT   rS    r'   r&   <module>r      sz         Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ! ! ! ! ! ! ! !i
 @ @ @ @ @i @ @ @F*T 
  
  
  U:J # 2 2L2<2 f2 F|	2
 v,2 d^2 2 2 2 	2 2 
2  !2" #2$ %2 2 2 2j71L71<71 f71 F|	71
 v,71 	71 71 
71 71 71 71 71 71 71 71 71 71t?SL?S<?S f?S F|	?S
 v,?S 	?S ?S 
?S ?S ?S ?S ?S ?S ?S ?S ?S ?S ?S ?Sr'   