
    sg                         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y)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 ]  \  }
}||
   |	sn j                         j                         j                         }|j	                         dk(  rWj                         ||
   }||
   }||
   }fd}|j                        j                         }|j                  |      j                  d|z
        }|j                   ||             |j                        j                         }|j                  d      j                  |      j                  d|z
        }|j                   ||             |j                  |      }|j                  |       |j                         j                  |      }~~d||z  z
  }d||z  z
  }|t        j                  |      z  |z  }|j                   || |j                  |      z                y)z{Functional API that performs Sparse Adam algorithm computation.

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