ó
    "Eñi²  ã                   óø   • S r SSKrSSKJr  SSKJr  SSKJrJr  SSKJr  SSKJr  SS	K	J	r	  SS
K
J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  S\\   S\\   S\\   S\\   S\\   S\S\S\S\S\SS4S jrg)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          	      óÚ  ^^^• [        U 5       GHØ  u  p«X   mU	(       d  TOT* mTR                  5       mTR                  5       mTR                  5       nUR	                  5       S:X  a  M\  TR                  5       mX*   nX:   nXJ   nUUU4S jnUR                  T5      R                  5       nUR                  U5      R                  SU-
  5      nUR                  U" U5      5        UR                  T5      R                  5       nUR                  S5      R                  U5      R                  SU-
  5      nUR                  U" U5      5        UR                  U5      nUR                  U5        UR                  5       R                  U5      nAASXo-  -
  nSX-  -
  nU[        R                  " U5      -  U-  nUR                  U" U* UR                  U5      -  5      5        GMÛ     g)zsFunctional API that performs Sparse Adam algorithm computation.

See :class:`~torch.optim.SparseAdam` for details.
r   c                 ó¬   >• TR                   nTR                  5       S:X  d  U R                  5       S:X  a  U" 5       R                  T5      $ U" TU T5      $ )Nr   )ÚnewÚdimÚ
resize_as_)ÚvaluesÚconstructorÚgradÚgrad_indicesÚsizes     €€€ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/optim/_functional.pyÚmake_sparseÚ sparse_adam.<locals>.make_sparse8   sL   ø€ ØŸ(™(ˆKØ×ÑÓ! QÓ&¨&¯*©*«,¸!Ó*;Ù"“}×/Ñ/°Ó5Ð5Ù˜|¨V°TÓ:Ð:ó    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_adamrI      s¾  ú€ ô" ˜f×%‰ˆØ‰xˆÞ#‰t¨$¨ˆØ�}‰}‹ˆØ—}‘}“ˆØ—l‘l“nˆØ×ÑÓ !Ó#áØ�y‰y‹{ˆà‘+ˆØ ‘^ˆ
Ø‰~ˆ÷	;ð %×0Ñ0°Ó6×>Ñ>Ó@ÐØ +§¡Ð0BÓ C× HÑ HÈÈUÉÓ SÐØ�‰‘[Ð!6Ó7Ô8Ø *× 6Ñ 6°tÓ <× DÑ DÓ FÐà�O‰O˜AÓ×#Ñ#Ð$9Ó:×?Ñ?ÀÀEÁ	ÓJð 	!ð 	�‰™Ð$<Ó=Ô>ð &×*Ñ*Ð+=Ó>ˆØ ×%Ñ%Ð&;Ô<Ø(×.Ñ.Ó0×5Ñ5°cÓ:ˆØ!Ð#;à˜u™{™?ÐØ˜u™{™?ÐØœŸšÐ#3Ó4Ñ4Ð7GÑGˆ	à�
‰
‘; 	˜z¨E¯J©J°uÓ,=Ñ=Ó>×?òW &r)   )Ú__doc__r7   Útorchr   r   r   r   r   r	   r
   r   r   r   r   r   r   ÚlistÚintÚfloatÚboolrI   © r)   r&   Ú<module>rQ      s¾   ðá ã å å ß *Ý Ý Ý Ý Ý Ý Ý Ý Ý ð<@Ø�‰Lð<@à�‰<ð<@ð �6‰lð<@ð �f‘ð	<@ð
 �c‘ð<@ð 
ð<@ð ð<@ð ð<@ð 	ð<@ð ð<@ð 
õ<@r)   