
    Yh                        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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          	         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     i/var/www/tools.fuzzalab.pt/emblema-extractor/venv/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_adamrG      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__r5   torchr   r   r   r   r   r	   r
   r   r   r   r   r   r   listintfloatboolrG    r'   r%   <module>rO      s                  * * * * * * * *                                                      <@L<@<<@ 6l<@ f	<@
 c<@ 
<@ <@ <@ 	<@ <@ <@ <@ <@ <@ <@r'   