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                   @   sL   e Zd Zdee eeeeeeeeeeedœdd	„Zeee  d
œdd„Z	dS )Ú_FunctionalAdagradç{®Gáz„?ç        ç      ð?ç»½×Ùß|Û=TF)ÚparamsÚlrÚlr_decayÚweight_decayÚinitial_accumulator_valueÚwarmup_lr_multiplierÚwarmup_num_itersÚepsÚcoalesce_gradÚforeachÚmaximizeÚ_allow_empty_param_listc                 C   s¢   |||||||dœ| _ |	| _|
| _|| _tj ttjtt	tjf f i ¡| _
t|ƒdkrd|sdtdƒ‚d|i| _| jd D ]$}t |j|¡t d¡dœ| j
|< qxd S )N)r   r   r   r   r   r   r   r   z%optimizer got an empty parameter listr   r	   )ÚsumÚstep)Údefaultsr   r   r   ÚtorchÚjitZannotater   r   ÚstrÚstateÚlenÚ
ValueErrorÚparam_groupZ	full_likeÚdataZtensor)Úselfr   r   r   r   r   r   r   r   r   r   r   r   Úp© r%   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/distributed/optim/functional_adagrad.pyÚ__init__   s&    ù	$
þz_FunctionalAdagrad.__init__)Ú	gradientsc                 C   s  | j d }g }g }g }g }t|ƒt|ƒkrPtddt|ƒ› d� dt|ƒ› � ƒ‚d}t| j d |ƒD ]T\}}	|	d k	rd|	jr~d}| |¡ | |	¡ | j| }
| |
d ¡ | |
d	 ¡ qdt ¡ �B t	j
||||| jd
 | jd | jd | jd || j| jd� W 5 Q R X d S )Nr   zEthe gradients passed in does not equal to the size of the parameters!zParams length: z. zGradients length: FTr   r   r   r   r   r   )r   r   r   r   Úhas_sparse_gradr   r   )r!   r   r    ÚzipZ	is_sparseÚappendr   r   Zno_gradÚFZadagradr   r   r   )r#   r(   r   Zparams_with_gradZgradsZ
state_sumsZstate_stepsr)   ÚparamZgradientr   r%   r%   r&   r   A   sJ    
ÿþÿ



õz_FunctionalAdagrad.stepN)r   r	   r	   r	   r
   r	   r   TFFF)
Ú__name__Ú
__module__Ú__qualname__r   r   ÚfloatÚboolr'   r   r   r%   r%   r%   r&   r      s4              óó,r   )Útypingr   r   r   r   Ztorch.optim._functionalZoptimZ_functionalr,   r   r   r   Ú__annotations__r   Úscriptr   r%   r%   r%   r&   Ú<module>   s    