o
     …›i²  ã                   @   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 dee dee dee dee dee dedededededdf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ÚmaximizeÚreturnc                   sR  t | ƒD ]¢\}
}||
 ‰ |	sˆ nˆ  ‰ ˆ  ¡ ‰ ˆ  ¡ ‰ˆ  ¡ }| ¡ dkr&qˆ  ¡ ‰||
 }||
 }||
 }‡ ‡‡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   )ÚnewÚdimÚ
resize_as_)ÚvaluesÚconstructor©ÚgradÚgrad_indicesÚsize© úY/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/torch/optim/_functional.pyÚmake_sparse8   s   z sparse_adam.<locals>.make_sparser   é   N)Ú	enumerateÚcoalesceÚ_indicesÚ_valuesÚnumelr#   Úsparse_maskÚsubÚmul_Úadd_ÚpowÚsub_Úsqrt_ÚmathÚsqrtÚdiv_)r   r   r   r   r   r   r   r   r   r   ÚiÚparamÚgrad_valuesÚexp_avgÚ
exp_avg_sqÚstepr&   Úold_exp_avg_valuesÚexp_avg_update_valuesÚold_exp_avg_sq_valuesÚexp_avg_sq_update_valuesÚnumerÚdenomÚbias_correction1Úbias_correction2Ú	step_sizer$   r    r%   Úsparse_adam   s:   	ÿ

ÕrF   )Ú__doc__r4   Útorchr   r   r   r   r   r   r	   r
   r   r   r   r   r   ÚlistÚintÚfloatÚboolrF   r$   r$   r$   r%   Ú<module>   sJ   ÿþýüûùø	÷
öõô