U
    ©Ê¹j½  ã                   @   sf   U d dl mZmZmZ d dlZd dlm  mZ d dlm	Z	 g Z
ee ed< ejjG dd„ dƒƒZdS )é    )ÚDictÚListÚOptionalN)ÚTensorÚ__all__c                   @   sH   e Zd Zdee eeeeeeeeedœ
dd„Zeee  d	œd
d„Z	dS )Ú_FunctionalRMSpropç{®Gáz„?ç®Gáz®ï?ç:Œ0âŽyE>ç        F)
ÚparamsÚlrÚalphaÚepsÚweight_decayÚmomentumÚcenteredÚforeachÚmaximizeÚ_allow_empty_param_listc                 C   sn   |||||dœ| _ || _|| _|	| _t|ƒdkr<|
s<tdƒ‚d|i| _tj 	t
tjt
ttjf f i ¡| _d S )N)r   r   r   r   r   r   z%optimizer got an empty parameter listr   )Údefaultsr   r   r   ÚlenÚ
ValueErrorÚparam_groupÚtorchÚjitZannotater   r   ÚstrÚstate)Úselfr   r   r   r   r   r   r   r   r   r   © r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/distributed/optim/functional_rmsprop.pyÚ__init__   s    û
z_FunctionalRMSprop.__init__)Ú	gradientsc                 C   sÊ  | j d }g }g }g }g }g }| jd }| jd }	| jd }
| jd }| jd }t|ƒt|ƒkr†tddt|ƒ› d	� d
t|ƒ› � ƒ‚t||ƒD ]ö\}}|d k	r�| |¡ | |¡ || jk�r0i | j|< | j| }t d¡|d< tj	|tj
d�|d< |dk�rtj	|tj
d�|d< | j�r0tj	|tj
d�|d< | j| }| |d ¡ |dk�r`| |d ¡ | j�rv| |d ¡ |d  d7  < q�t ¡ �0 tj|||||||	|
||| j| j| jd� W 5 Q R X d S )Nr   r   r   r   r   r   zEthe gradients passed in does not equal to the size of the parameters!zParams length: z. zGradients length: r   Ústep)Zmemory_formatZ
square_avgr   Zmomentum_bufferZgrad_avgé   )r   r   r   r   r   r   r   r   )r   r   r   r   ÚzipÚappendr   r   ZtensorZ
zeros_likeZpreserve_formatr   Zno_gradÚFZrmspropr   r   )r   r"   r   Zparams_with_gradZgradsZsquare_avgsZ	grad_avgsZmomentum_buffer_listr   r   r   r   r   ÚparamZgradientr   r   r   r    r#   6   s€    





ÿþÿ



 ÿ

 ÿ
 ÿ



óz_FunctionalRMSprop.stepN)	r   r	   r
   r   r   FFFF)
Ú__name__Ú
__module__Ú__qualname__r   r   ÚfloatÚboolr!   r   r#   r   r   r   r    r      s,            õõ!r   )Útypingr   r   r   r   Ztorch.optim._functionalZoptimZ_functionalr'   r   r   r   Ú__annotations__r   Úscriptr   r   r   r   r    Ú<module>   s    