Ë
    ùÿæi²  ã                   óö   — 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ddfd„Zy)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          	      óÒ  ‡‡‡— 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     €€€úl/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/optim/_functional.pyÚmake_sparsez 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_adamrH      sÌ  ú€ ô" ˜f×%‰ˆˆ5Ø�Q‰xˆÙ#‰t¨$¨ˆØ�}‰}‹ˆØ—}‘}“ˆØ—l‘l“nˆØ×ÑÓ !Ò#àØ�y‰y‹{ˆà˜1‘+ˆØ  ‘^ˆ
Ø˜1‰~ˆö	;ð %×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 d™{™?ÐØ˜u d™{™?ÐØœŸ™Ð#3Ó4Ñ4Ð7GÑGˆ	à�
‰
‘; 	˜z¨E¯J©J°uÓ,=Ñ=Ó>Ö?ñW &r(   )Ú__doc__r6   Útorchr   r   r   r   r   r	   r
   r   r   r   r   r   r   ÚlistÚintÚfloatÚboolrH   © r(   r&   Ú<module>rP      s¾   ðá ã å å ß *Ý Ý Ý Ý Ý Ý Ý Ý Ý ð<@Ø�‰Lð<@à�‰<ð<@ð �6‰lð<@ð �f‘ð	<@ð
 �c‘ð<@ð 
ð<@ð ð<@ð ð<@ð 	ð<@ð ð<@ð 
ô<@r(   