
    kh	                     \    d Z ddlZddlmc mZ ddlmZmZ ddl	Z	ddl
mZ  G d de      Zy)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                   `     e Zd Zedddddddf fd	Z ej                         dd       Z xZS )SGDPr   Fg:0yE>g?c
           
      T    t        ||||||||	      }
t        t        |   ||
       y )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              K/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/optim/sgdp.pyr   zSGDP.__init__   s:     %	
 	dD"684    c                    d }|$t        j                         5   |       }d d d        | j                  D ]   }|d   }|d   }|d   }|d   }|d   D ]   }|j                  |j                  }	| j                  |   }
t        |
      dk(  rt        j                  |      |
d<   |
d   }|j                  |      j                  |	d|z
         |r	|	||z  z   }n|}d}t        |j                        d	kD  rt        ||	||d
   |d   |d         \  }}|dk7  r&|j                  d|d   |d   z  |z  d	|z
  z  z
         |j                  ||d            # |S # 1 sw Y   <xY w)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   stepz	SGDP.step,   s   ""$ !y! && "	0E 0LZ(Hk*IZ(H8_ 066>vv

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