
    RЦi	                     \    S r SSKrSSKJs  Jr  SSKJrJr  SSK	r	SSK
Jr   " S S\5      rg)a1  
SGDP Optimizer Implementation copied from https://github.com/clovaai/AdamP/blob/master/adamp/sgdp.py

Paper: `Slowing Down the Weight Norm Increase in Momentum-based Optimizers` - https://arxiv.org/abs/2006.08217
Code: https://github.com/clovaai/AdamP

Copyright (c) 2020-present NAVER Corp.
MIT license
    N)	Optimizerrequired   )
projectionc                   n   ^  \ rS rSr\SSSSSSS4U 4S jjr\R                  " 5       S	S j5       rSr	U =r
$ )
SGDP   r   Fg:0yE>g?c
                 L   > [        UUUUUUUU	S9n
[        [        U ]  X5        g )N)lrmomentum	dampeningweight_decaynesterovepsdeltawd_ratio)dictsuperr   __init__)selfparamsr   r   r   r   r   r   r   r   defaults	__class__s              N/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/optim/sgdp.pyr   SGDP.__init__   s8     %	
 	dD"64    c                    S nUb%  [         R                  " 5          U" 5       nS S S 5        U R                   GH#  nUS   nUS   nUS   nUS   nUS    GH  nUR                  c  M  UR                  n	U R                  U   n
[        U
5      S:X  a  [         R                  " U5      U
S'   U
S   nUR                  U5      R                  U	SU-
  S9  U(       a  XU-  -   nOUnSn[        UR                  5      S	:  a  [        XXS
   US   US   5      u  pUS:w  a&  UR                  SUS   US   -  U-  S	U-
  -  -
  5        UR                  XS   * S9  GM     GM&     U$ ! , (       d  f       GNE= f)Nr   r   r   r   r   r   g      ?)alphar   r   r   r   r   )torchenable_gradparam_groupsgradstatelen
zeros_likemul_add_shaper   )r   closurelossgroupr   r   r   r   pr"   r#   bufd_pr   s                 r   step	SGDP.step,   s   ""$y % &&E 0LZ(Hk*IZ(H8_66>vv

1 u:?(-(8(8(;E*% J'"''BN'CC/CC qww<!#$.q7^US]M^`efk`l$mMC  1$FF2deN.C Ch NRST\R\ ]]^ s;,/9 % 'H O %$s   E!!
E0 )N)__name__
__module____qualname____firstlineno__r   r   r   no_gradr/   __static_attributes____classcell__)r   s   @r   r   r      s<     50 ]]_* *r   r   )__doc__r   torch.nn.functionalnn
functionalFtorch.optim.optimizerr   r   mathadampr   r   r1   r   r   <module>rA      s,       5  D9 Dr   