Ë
    éÓ^j  ã                   ó6   — d dl Z d dlZd dlmZ  G d„ de«      Zy)é    N)Ú	Optimizerc                   ó^   ‡ — e Zd ZdZ	 	 	 	 	 dˆ fd„	Z ej                  «       dd„«       Zˆ xZS )ÚNAdamLegacyaa  Implements Nadam algorithm (a variant of Adam based on Nesterov momentum).

    NOTE: This impl has been deprecated in favour of torch.optim.NAdam and remains as a reference

    It has been proposed in `Incorporating Nesterov Momentum into Adam`__.

    Arguments:
        params (iterable): iterable of parameters to optimize or dicts defining
            parameter groups
        lr (float, optional): learning rate (default: 2e-3)
        betas (Tuple[float, float], optional): coefficients used for computing
            running averages of gradient and its square
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-8)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        schedule_decay (float, optional): momentum schedule decay (default: 4e-3)

    __ http://cs229.stanford.edu/proj2015/054_report.pdf
    __ http://www.cs.toronto.edu/~fritz/absps/momentum.pdf

        Originally taken from: https://github.com/pytorch/pytorch/pull/1408
        NOTE: Has potential issues but does work well on some problems.
    c                 óŒ   •— d|k  st        dj                  |«      «      ‚t        |||||¬«      }t        t        | �  ||«       y )Ng        zInvalid learning rate: {})ÚlrÚbetasÚepsÚweight_decayÚschedule_decay)Ú
ValueErrorÚformatÚdictÚsuperr   Ú__init__)	ÚselfÚparamsr   r   r	   r
   r   ÚdefaultsÚ	__class__s	           €ú[/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/optim/nadam.pyr   zNAdamLegacy.__init__    sO   ø€ ð �bŠyÜÐ8×?Ñ?ÀÓCÓDÐDÜØØØØ%Ø)ô
ˆô 	Œk˜4Ñ)¨&°(Õ;ó    c           	      ó8  — d}|�$t        j                  «       5   |«       }ddd«       | j                  D �]Ô  }|d   D �]È  }|j                  €Œ|j                  }| j                  |   }t        |«      dk(  r:d|d<   d|d<   t        j                  |«      |d<   t        j                  |«      |d<   |d   }|d	   }|d   |d   }
}	|d
   \  }}|d   }|dxx   dz  cc<   |d   }d||z  z
  }|d   dk7  r|j                  ||d   ¬«      }|ddd||z  z  z  z
  z  }|ddd|dz   |z  z  z  z
  z  }||z  }||z  |z  }||d<   |	j                  |«      j                  |d|z
  ¬«       |
j                  |«      j                  ||d|z
  ¬«       |
j                  «       t        j                  |«      z  j                  |«      }|j                  |||d    d|z
  z  d|z
  z  ¬«       |j                  |	||d    |z  d|z
  z  ¬«       �ŒË �Œ× |S # 1 sw Y   �ŒðxY w)z¶Performs a single optimization step.

        Arguments:
            closure (callable, optional): A closure that reevaluates the model
                and returns the loss.
        Nr   r   Ústepg      ð?Ú
m_scheduleÚexp_avgÚ
exp_avg_sqr   r   r	   é   r
   )Úalphag      à?g¸…ëQ¸î?)Úvaluer   )ÚtorchÚenable_gradÚparam_groupsÚgradÚstateÚlenÚ
zeros_likeÚaddÚmul_Úadd_Úaddcmul_ÚsqrtÚmathÚaddcdiv_)r   ÚclosureÚlossÚgroupÚpr"   r#   r   r   r   r   Úbeta1Úbeta2r	   ÚtÚbias_correction2Úmomentum_cache_tÚmomentum_cache_t_1Úm_schedule_newÚm_schedule_nextÚdenoms                        r   r   zNAdamLegacy.step4   s�  € ð ˆØÐÜ×"Ñ"Ó$ñ !Ù“y�÷!ð ×&Ñ&ó '	mˆEØ˜8‘_ó &m�Ø—6‘6�>ØØ—v‘v�ØŸ
™
 1™�ô �u“: ’?Ø$%�E˜&‘MØ*,�E˜,Ñ'Ü',×'7Ñ'7¸Ó':�E˜)Ñ$Ü*/×*:Ñ*:¸1Ó*=�E˜,Ñ'ð # <Ñ0�
Ø!&Ð'7Ñ!8�Ø&+¨IÑ&6¸¸lÑ8K˜�Ø$ W™~‘��uØ˜E‘l�Ø�f“ Ñ"“Ø˜&‘M�Ø#$ u°¡z¡>Ð à˜Ñ(¨AÒ-ØŸ8™8 A¨U°>Ñ-B˜8ÓC�Dà#(¨B°¸ÀÀ^ÑASÑ8TÑ1UÑ,UÑ#VÐ Ø%*¨b°3¸$ÀAÈÁEÈ^ÑC[Ñ:\Ñ3]Ñ.]Ñ%^Ð"Ø!+Ð.>Ñ!>�Ø",Ð/?Ñ"?ÐBTÑ"T�Ø&4��lÑ#ð —‘˜UÓ#×(Ñ(¨°R¸%±ZÐ(Ô@Ø—‘ Ó&×/Ñ/°°dÀ"ÀuÁ*Ð/ÔMà#Ÿ™Ó*¬T¯Y©YÐ7GÓ-HÑH×NÑNÈsÓS�Ø—
‘
˜4 ¨u°T©{¨l¸bÐCSÑ>SÑ.TÐXZÐ]kÑXkÑ.l�
ÔmØ—
‘
˜7 E°%¸±+°Ð@RÑ1RÐVXÐ[jÑVjÑ1k�
ÖlòM&mð'	mðR ˆ÷Y!ñ !ús   ™HÈH)gü©ñÒMb`?)gÍÌÌÌÌÌì?g+‡ÙÎ÷ï?g:Œ0âŽyE>r   gü©ñÒMbp?)N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úno_gradr   Ú__classcell__)r   s   @r   r   r      s:   ø„ ñð6 ØØØØõ<ð( €U‡]�]ƒ_ò5ó ô5r   r   )r+   r   Útorch.optim.optimizerr   r   © r   r   ú<module>rB      s   ðÛ ã Ý +ôc�)õ cr   