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                
   @   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   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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rúi | j|< | j| }t d
¡|d< tj	|tj
d�|d< tj	|tj
d�|d< | j| }| |d ¡ | |d ¡ q‚t ¡ �( 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!   2   sb    




ÿþÿ




 ÿ
 ÿ


ö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   r   Ú__annotations__r   Úscriptr   r   r   r   r   Ú<module>   s    