a
    ¢º”hª  ã                   @   sØ   d Z ddlZddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	l	m	Z	 dd
l
m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ee ee ee ee ee eeeeedœ
dd„ZdS )zFunctional interface.é    N)ÚTensoré   )Úadadelta)Ú_make_sparseÚadagrad)Úadam)Úadamax)Úadamw)Úasgd)Únadam)Úradam)Úrmsprop)Úrprop)Úsgd)
ÚparamsÚgradsÚexp_avgsÚexp_avg_sqsÚstate_stepsÚepsÚbeta1Úbeta2ÚlrÚmaximizec                   sT  t | ƒD ]D\}
}||
 ‰ |	s"ˆ nˆ  ‰ ˆ  ¡ ‰ ˆ  ¡ ‰ˆ  ¡ }| ¡ dkrNqˆ  ¡ ‰||
 }||
 }||
 }‡ ‡‡fdd„}| ˆ ¡ ¡ }| |¡ d| ¡}| 	||ƒ¡ | ˆ ¡ ¡ }| 
d¡ |¡ d| ¡}| 	||ƒ¡ | 	|¡}| 	|¡ | ¡  	|¡}~~d||  }d||  }|t |¡ | }| 	|| | |¡ ƒ¡ qdS )z{Functional API that performs Sparse Adam algorithm computation.

    See :class:`~torch.optim.SparseAdam` for details.
    r   c                    s6   ˆ j }ˆ ¡ dks|  ¡ dkr*|ƒ  ˆ ¡S |ˆ| ˆƒS )Nr   )ÚnewZdimZ
resize_as_)ÚvaluesÚconstructor©ZgradZgrad_indicesÚsize© úE/var/www/auris/lib/python3.9/site-packages/torch/optim/_functional.pyÚmake_sparse8   s    z sparse_adam.<locals>.make_sparser   é   N)Ú	enumerateZcoalesceZ_indicesZ_valuesZnumelr   Zsparse_maskÚsubZmul_Zadd_ÚpowZsub_Zsqrt_ÚmathÚsqrtZdiv_)r   r   r   r   r   r   r   r   r   r   ÚiÚparamZgrad_valuesZexp_avgZ
exp_avg_sqÚstepr!   Zold_exp_avg_valuesZexp_avg_update_valuesZold_exp_avg_sq_valuesZexp_avg_sq_update_valuesZnumerZdenomZbias_correction1Zbias_correction2Z	step_sizer   r   r    Úsparse_adam   s8    	ÿ

r+   )Ú__doc__r&   Ztorchr   r   r   r   r   r   r	   r
   r   r   r   r   r   ÚlistÚintÚfloatÚboolr+   r   r   r   r    Ú<module>   s0   õ