Ë
    éÓ^jð  ã                   ó‚   — d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZ  ej                  e«      Z G d„ de«      Zy)z† Cosine Scheduler

Cosine LR schedule with warmup, cycle/restarts, noise, k-decay.

Hacked together by / Copyright 2021 Ross Wightman
é    N)ÚTupleÚListÚUnioné   )Ú	Schedulerc            #       óê   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddej
                  j                  dededededed	ed
ede	de	de
ee   eeef   edf   dedededede	ddf"ˆ fd„Zdedee   fd„Zdd„Zˆ xZS )ÚCosineLRSchedulera\  
    Cosine decay with restarts.
    This is described in the paper https://arxiv.org/abs/1608.03983.

    Inspiration from
    https://github.com/allenai/allennlp/blob/master/allennlp/training/learning_rate_schedulers/cosine.py

    k-decay option based on `k-decay: A New Method For Learning Rate Schedule` - https://arxiv.org/abs/2004.05909
    NÚ	optimizerÚ	t_initialÚlr_minÚ	cycle_mulÚcycle_decayÚcycle_limitÚwarmup_tÚwarmup_lr_initÚwarmup_prefixÚt_in_epochsÚnoise_range_tÚ	noise_pctÚ	noise_stdÚ
noise_seedÚk_decayÚ
initializeÚreturnc           
      ó  •— t         ‰| �  |d|
|||||¬«       |dkD  sJ ‚|dk\  sJ ‚|dk(  r|dk(  r|dk(  rt        j                  d«       || _        || _        || _        || _        || _        || _	        || _
        |	| _        || _        | j                  rI| j                  D �cg c]  }||z
  | j                  z  ‘Œ c}| _        t         ‰| �=  | j                  «       y | j                  D �cg c]  }d‘Œ c}| _        y c c}w c c}w )NÚlr)Úparam_group_fieldr   r   r   r   r   r   r   r   zjCosine annealing scheduler will have no effect on the learning rate since t_initial = t_mul = eta_mul = 1.)ÚsuperÚ__init__Ú_loggerÚwarningr   r   r   r   r   r   r   r   r   Úbase_valuesÚwarmup_stepsÚupdate_groups)Úselfr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚvÚ_Ú	__class__s                      €úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/cosine_lr.pyr   zCosineLRScheduler.__init__   s  ø€ ô& 	‰ÑØØ"Ø#Ø'ØØØ!Ø!ð 	ô 		
ð ˜1Š}Ðˆ}Ø˜Š{Ðˆ{Ø˜Š>˜i¨1šn°ÀÒ1AÜ�O‰Oð>ô?ð #ˆŒØˆŒØ"ˆŒØ&ˆÔØ&ˆÔØ ˆŒØ,ˆÔØ*ˆÔØˆŒØ�=Š=ØOS×O_ÑO_Ö `È! ! nÑ"4¸¿¹Ó!EÒ `ˆDÔÜ‰GÑ! $×"5Ñ"5Õ6à,0×,<Ñ,<Ö = q¢Ò =ˆDÕùò !aùò !>s   Â$C?Ã-	DÚtc                 ó(  — || j                   k  r+| j                  D �cg c]  }| j                  ||z  z   ‘Œ }}|S | j                  r|| j                   z
  }| j                  dk7  r¢t        j                  t        j                  d|| j                  z  d| j                  z
  z  z
  | j                  «      «      }| j                  |z  | j                  z  }|d| j                  |z  z
  d| j                  z
  z  | j                  z  z
  }n-|| j                  z  }| j                  }|| j                  |z  z
  }| j                  |z  }| j                  D �cg c]  }||z  ‘Œ	 }	}| j                  }
|| j                  k  ra|	D �cg c]T  }| j                  d|| j                  z
  z  dt        j                  t
        j                  ||
z  z  ||
z  z  «      z   z  z   ‘ŒV }}|S | j                  D �cg c]  }| j                  ‘Œ }}|S c c}w c c}w c c}w c c}w )Nr   g      à?)r   r#   r   r   r   ÚmathÚfloorÚlogr   r   r"   r   r   r   ÚcosÚpi)r%   r*   ÚsÚlrsÚiÚt_iÚt_currÚgammar&   Úlr_max_valuesÚkÚlr_maxr'   s                r)   Ú_get_lrzCosineLRScheduler._get_lrQ   sû  € Øˆt�}‰}ÒØ8<×8IÑ8IÖJ°1�4×&Ñ&¨¨Q©Ó.ÐJˆCÐJð4 ˆ
ð1 ×!Ò!Ø˜Ÿ™Ñ%�à�~‰~ Ò"Ü—J‘JœtŸx™x¨¨A°·±Ñ,>À!ÀdÇnÁnÑBTÑ,UÑ(UÐW[×WeÑWeÓfÓg�Ø—n‘n¨Ñ)¨D¯N©NÑ:�Ø˜a $§.¡.°AÑ"5Ñ5¸!¸d¿n¹nÑ:LÑMÐPT×P^ÑP^Ñ^Ñ^‘à˜Ÿ™Ñ'�Ø—n‘n�Ø˜dŸn™n¨qÑ0Ñ1�à×$Ñ$¨Ñ)ˆEØ04×0@Ñ0@ÖA¨1˜Q ›YÐAˆMÐAØ—‘ˆAà�4×#Ñ#Ò#ð #0öàð —K‘K #¨°$·+±+Ñ)=Ñ">À!ÄdÇhÁhÌtÏwÉwÐY_ÐcdÑYdÑOdÐgjÐnoÑgoÑOoÓFpÑBpÑ"qÓqð�ð ð ˆ
ð -1×,<Ñ,<Ö= q�t—{“{Ð=�Ð=àˆ
ùò5 Kùò Bùòùò
 >s   žH ÅHÅ>AH
Ç)Hc                 óF  — t        d|xs | j                  «      }| j                  dk(  r| j                  |z  }nLt	        t        j                  | j                   | j                  |z  dz
  z  d| j                  z
  z  «      «      }| j                  r|| j                  z   S |S )Nr   ç      ð?)	Úmaxr   r   r   Úintr,   r-   r   r   )r%   Úcyclesr*   s      r)   Úget_cycle_lengthz"CosineLRScheduler.get_cycle_lengtho   s�   € Ü�Q˜Ò2 $×"2Ñ"2Ó3ˆØ�>‰>˜SÒ Ø—‘ Ñ'‰Aä”D—J‘J §¡˜°$·.±.ÀFÑ2JÈQÑ2NÑOÐSTÐW[×WeÑWeÑSeÑfÓgÓhˆAØ$(×$6Ò$6ˆq�4—=‘=Ñ Ð=¸AÐ=ó    )ç        r<   r<   r   r   rB   FTNgq=
×£på?r<   é*   r<   T)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚoptimÚ	Optimizerr>   ÚfloatÚboolr   r   r   r   r:   r@   Ú__classcell__)r(   s   @r)   r	   r	      s"  ø„ ñð Ø!Ø!#Ø ØØ$&Ø"'Ø $ØJNØ#Ø"Ø Ø Ø#ñ#1>à—{‘{×,Ñ,ð1>ð ð1>ð ð	1>ð
 ð1>ð ð1>ð ð1>ð ð1>ð "ð1>ð  ð1>ð ð1>ð !  c¡¨E°#°s°(©O¸SÀ$Ð!FÑGð1>ð ð1>ð ð1>ð ð1>ð  ð!1>ð" ð#1>ð$ 
õ%1>ðf˜ð   e¡ó ÷<>rA   r	   )rG   Úloggingr,   ÚnumpyÚnprH   Útypingr   r   r   Ú	schedulerr   Ú	getLoggerrD   r    r	   © rA   r)   ú<module>rU      sC   ðñó Û Û Û ß %Ñ %å  ð ˆ'×
Ñ
˜HÓ
%€ôb>˜	õ b>rA   