
    kh{                     z    d Z ddlZddlZddlZddlZddlmZ ddlm	Z	  ej                  e      Z G d de	      Zy)zv TanH Scheduler

TanH schedule with warmup, cycle/restarts, noise.

Hacked together by / Copyright 2021 Ross Wightman
    N)List   )	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df fdZ	dede
e   fdZddZ xZS )TanhLRSchedulerzu
    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returnc           
      b   t         |   |d||||||       |dkD  sJ |dk\  sJ ||k  sJ |dk\  sJ |	dk\  sJ |
dk\  sJ || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        | j                  rr| j                  r| j                  n| j                  | 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_fieldt_in_epochsnoise_range_t	noise_pct	noise_std
noise_seed
initializer   r   )super__init__r
   r   r	   r   r   r   r   warmup_twarmup_lr_initwarmup_prefix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                        R/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/scheduler/tanh_lr.pyr   zTanhLRScheduler.__init__   sG   ( 	"#'!! 	 		
 1}}{{Bwwa1}}"""""&& ,*==&*&8&8$""dll4==>YCOR S!!n"4!E SDG!$"5"56,0,<,< =q =D !T !>s   D'	D,tc                 &   || j                   k  r+| j                  D cg c]  }| j                  ||z  z    }}|S | j                  r|| j                   z
  }| j                  dk7  rt        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                  k  r| j                  |z  }| j                  D cg c]  }||z  	 }	}||z  }
|	D cg c]Z  }| j                  d|| j                  z
  z  dt        j                  | j                  d|
z
  z  | j                  |
z  z         z
  z  z   \ }}|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   tanhr
   r   )r#   r)   slrsit_it_currgammar%   lr_max_valuestrlr_maxr&   s                r(   r    zTanhLRScheduler._get_lrO   s   t}}8<8I8IJ14&&Q.JCJ2 
/ !!%~~"JJtxxA,>!dnnBT,U(UW[WeWefgnn)DNN:a$..A"55!dnn:LMPTP^P^^^'nndnnq014###((A-484D4D EqU E Ec\ #0 KK#$++)=">!diiPTPWPW[]`b[bPcfjfmfmprfrPrFsBs"tt  
 -1,<,<=qt{{==
3 K  !F
 >s   G? H7A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   r+   )	maxr   r   r	   intr,   r-   r   r   )r#   cyclesr)   s      r(   get_cycle_lengthz TanhLRScheduler.get_cycle_lengthl   s    Q2$"2"23>>S 'ADJJ$..F2JQ2NOSTW[WeWeSefghA$($6$6q4== =A=    )g      g      @g        r+   r+   r   r   r   FTNgq=
ףp?r+   *   T)r   )__name__
__module____qualname____doc__torchoptim	Optimizerr;   floatr   r   r    r=   __classcell__)r'   s   @r(   r   r      s     !!# %4>{{,,4> 4> 	4>
 4> 4> 4> 4> 4>& 
'4>l e :>r>   r   )rC   loggingr,   numpynprD   typingr   	schedulerr   	getLoggerr@   _loggerr    r>   r(   <module>rQ      s@           '

H
%_>i _>r>   