
    RЦi                         S r SSKrSSKrSSKrSSKrSSKJrJrJ	r	  SSK
Jr  \R                  " \5      r " S S\5      rg)zuTanH Scheduler

TanH schedule with warmup, cycle/restarts, noise.

Hacked together by / Copyright 2021 Ross Wightman
    N)ListTupleUnion   )	Schedulerc            %         ^  \ rS rSrSr               SS\R                  R                  S\S\	S\	S\	S	\	S
\	S\S\S\	S\
S\
S\\\   \\\4   \S4   S\	S\	S\S\
SS4$U 4S jjjrS\S\\	   4S jrSS jrSrU =r$ )TanhLRScheduler   zi
Hyberbolic-Tangent decay with restarts.
This is described in the paper https://arxiv.org/abs/1806.01593
N	optimizer	t_initiallbub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
initializereturnc                 r  > [         TU ]  USUUUUUUS9  US:  d   eUS:  d   eX4:  d   eUS:  d   eU	S:  d   eU
S:  d   eX0l        X@l        X l        XPl        X`l        Xpl        Xl        Xl	        Xl
        Xl        U R                  (       az  U R                  (       a  U R                  OU R                  U R                  5      nU Vs/ s H  nUU
-
  U R                  -  PM     snU l        [         TU ]=  U R                  5        g U R                   Vs/ s H  nSPM     snU l        g s  snf s  snf )Nlr)param_group_fieldr   r   r   r   r   r   r   r   )super__init__r   r   r   r   r   r   r   r   r   r   base_values_get_lrwarmup_stepsupdate_groups)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   t_vv_	__class__s                        U/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/scheduler/tanh_lr.pyr!   TanhLRScheduler.__init__   s;   ( 	"#'!! 	 		
 1}}{{wwa1}}"""""&& ,*==&*&8&8$""dll4==>YCOR Ss!!n"4!Es SDG!$"5"56,0,<,< =,<q,< =D !T !>s   D/D4tc                 <   XR                   :  a,  U R                   Vs/ s H  o R                  X-  -   PM     nnU$ U R                  (       a  XR                   -
  nU R                  S:w  a  [
        R                  " [
        R                  " SXR                  -  SU R                  -
  -  -
  U R                  5      5      nU R                  U-  U R                  -  nUSU R                  U-  -
  SU R                  -
  -  U R                  -  -
  nO+XR                  -  nU R                  nXR                  U-  -
  nX@R                  :  a  U R                  U-  nU R                   Vs/ s H  oU-  PM	     n	nXe-  n
U	 Vs/ s H[  nU R                  SXR                  -
  -  S[
        R                  " U R                  SU
-
  -  U R                  U
-  -   5      -
  -  -   PM]     nnU$ U R                   Vs/ s H  oR                  PM     nnU$ s  snf s  snf s  snf s  snf )Nr   g      ?      ?)r   r$   r   r   r   mathfloorlogr   r   r   r"   r   tanhr   r   )r&   r-   slrsit_it_currgammar(   lr_max_valuestrlr_maxr)   s                r+   r#   TanhLRScheduler._get_lrO   s   }}8<8I8IJ8I1&&.8ICJ2 
/ !!%~~"JJtxxA,>!dnnBT,U(UW[WeWefgnn)DNN:a$..A"55!dnn:LMPTP^P^^^'nnnnq01###((A-484D4D E4DqU4D E\ #0"/ KK#++)=">!diiPTPWPW[]`b[bPcfjfmfmprfrPrFsBs"tt"/   
 -1,<,<=,<q{{,<=
3 K  !F
 >s   H
%H=A"H1Hc                 \   [        SU=(       d    U R                  5      nU R                  S:X  a  U R                  U-  nOM[	        [
        R                  " U R                  * U R                  U-  S-
  -  SU R                  -
  -  5      5      nU R                  (       a  X R                  -   $ U$ )Nr   r/   )	maxr   r   r   intr0   r1   r   r   )r&   cyclesr-   s      r+   get_cycle_length TanhLRScheduler.get_cycle_lengthl   s    Q2$"2"23>>S 'ADJJ$..F2JQ2NOSTW[WeWeSefghA$($6$6q== =A=    )r   r   r   r   r   r   r   r   r   r$   r   )g      g      @        r/   r/   r   r   rE   FTNgq=
ףp?r/   *   T)r   )__name__
__module____qualname____firstlineno____doc__torchoptim	Optimizerr@   floatboolr   r   r   r!   r#   rB   __static_attributes____classcell__)r*   s   @r+   r	   r	      s9    !!# $&"' $JN#" #%4>{{,,4> 4> 	4>
 4> 4> 4> 4> 4> 4> "4>  4> 4> !cE#s(OS$!FG4> 4>  !4>" #4>$ %4>& 
'4> 4>l e :> >rD   r	   )rK   loggingr0   numpynprL   typingr   r   r   	schedulerr   	getLoggerrG   _loggerr	    rD   r+   <module>r[      sA        % %   

H
%_>i _>rD   