
    Χg                        d Z ddlZddlm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ZdS )zFunctional interface.    N)List)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          	         t          |           D ]B\  }
}||
         |	sn                                                                                                 }|                                dk    rj                                ||
         }||
         }||
         }fd}|                                                              }|                    |                              d|z
            }|	                     ||                     |                                                              }|
                    d                              |                              d|z
            }|	                     ||                     |	                    |          }|	                    |           |                                	                    |          }~~d||z  z
  }d||z  z
  }|t          j        |          z  |z  }|	                     || |                    |          z                       DdS )z{Functional API that performs Sparse Adam algorithm computation.

    See :class:`~torch.optim.SparseAdam` for details.
    r   c                     j         }                                dk    s|                                 dk    r |                                          S  ||           S )Nr   )newdim
resize_as_)valuesconstructorgradgrad_indicessizes     S/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/optim/_functional.pymake_sparsez sparse_adam.<locals>.make_sparse8   sa    (K!!Q&&&**,,!*;*;"{}}//555;|VT:::    r      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%   s                             @@@r&   sparse_adamrH      sg   " f%% +@ +@5Qx#.tt$}}}}llnn!##yy{{1+ ^
1~	; 	; 	; 	; 	; 	; 	; %0066>>@@ +0B C C H HU S S[[!677888 * 6 6t < < D D F FOOA##$9::??E	JJ 	! 	$<==>>> &**+=>> %%&;<<<(..0055c::!#;ud{?ud{?#34447GG	

;;	zEJJu,=,==>>????W+@ +@r(   )__doc__r6   typingr   torchr   r   r   r   r	   r
   r   r   r   r   r   r   r   intfloatboolrH    r(   r&   <module>rP      s                        * * * * * * * *                                                      <@L<@<<@ 6l<@ f	<@
 c<@ 
<@ <@ <@ 	<@ <@ <@ <@ <@ <@ <@r(   