o
    U)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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maximizec                   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dimZ
resize_as_)valuesconstructorZgradZgrad_indicessize c/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/torch/optim/_functional.pymake_sparse7   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numerdenomZbias_correction1Zbias_correction2Z	step_sizer    r   r!   sparse_adam   s:   	

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>   sF   	
