U
    ds                     @   sV   d dl mZmZmZ d dlZd dlm  mZ d dlm	Z	 ej
jG dd deZdS )    )ListDictOptionalN)Tensorc                
   @   sD   e Zd Zdee eeeeeeedddZeee  d	d
dZ	dS )_FunctionalAdadelta      ??ư>        F)paramslrrhoepsweight_decayforeachmaximize_allow_empty_param_listc	           	      C   sf   ||||d| _ || _|| _t|dkr4|s4tdd|i| _tjt	tj
t	ttj
f f i | _d S )N)r   r   r   r   r   z%optimizer got an empty parameter listr   )defaultsr   r   len
ValueErrorparam_grouptorchjitZannotater   r   strstate)	selfr   r   r   r   r   r   r   r    r   O/tmp/pip-unpacked-wheel-ua33x9lu/torch/distributed/optim/functional_adadelta.py__init__   s    
z_FunctionalAdadelta.__init__)	gradientsc                 C   s\  | j d }g }g }g }g }| jd }| jd }| jd }	| jd }
t|t|krxtddt| d d	t|  t||D ]\}}|d k	r|| || || jkri | j|< | j| }td
|d< tj	|tj
d|d< tj	|tj
d|d< | j| }||d  ||d  qt ( tj|||||||	|
| j| jd
 W 5 Q R X d S )Nr   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_avgZ	acc_delta)r   r   r   r   r   r   )r   r   r   r   zipappendr   r   ZtensorZ
zeros_likeZpreserve_formatZno_gradFZadadeltar   r   )r   r   r   Zparams_with_gradZgradsZsquare_avgsZ
acc_deltasr   r   r   r   paramZgradientr   r   r   r   r    /   sT    











z_FunctionalAdadelta.stepN)r   r   r	   r
   FFF)
__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   scriptobjectr   r   r   r   r   <module>   s
   