
    ^jF                     z    d Z ddlZddlZddlmZmZmZ ddlZddlm	Z	  ej                  e      Z G d de	      Zy)zu Polynomial Scheduler

Polynomial LR schedule with warmup, noise.

Hacked together by / Copyright 2021 Ross Wightman
    N)ListTuple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	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 )PolyLRSchedulerz Polynomial LR Scheduler w/ warmup, noise, and k-decay

    k-decay option based on `k-decay: A New Method For Learning Rate Schedule` - https://arxiv.org/abs/2004.05909
    N	optimizer	t_initialpower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         | A  | 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   r   base_valueswarmup_stepsupdate_groups)selfr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   v_	__class__s                       a/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/poly_lr.pyr    zPolyLRScheduler.__init__   s   ( 	"#'!! 	 		
 1}}{{>i1n1AOO J K"
"&& ,*==OSO_O_ `!!n"4!E `DG!$"5"56,0,<,< =q =D !a !>s   +D4	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                  |z  }| j                  D cg c]  }||z  	 }	}| j                  }
|| j                  k  rG|	D cg c]:  }| j                  || j                  z
  d||
z  ||
z  z  z
  | j                  z  z  z   < }}|S | j                  D cg c]  }| j                   }}|S c c}w c c}w c c}w c c}w )Nr   )r   r$   r   r   r   mathfloorlogr   r   r#   r   r   r   r   )r&   r+   slrsit_it_currgammar'   lr_max_valuesklr_maxr(   s                r*   _get_lrzPolyLRScheduler._get_lrM   s   t}}8<8I8IJ14&&Q.JCJ4 
1 !!%~~"JJtxxA,>!dnnBT,U(UW[WeWefgnn)DNN:a$..A"55!dnn:LMPTP^P^^^'nndnnq01$$)E040@0@A1QYAMAA4### #0 KK6DKK#7A!cUVh@V<V[_[e[e;e"ee  
 -1,<,<=qt{{==
5 K B
 >s   G&G+>?G0G5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 PolyLRScheduler.get_cycle_lengthk   s    Q2$"2"23>>S 'ADJJ$..F2JQ2NOSTW[WeWeSefghA$($6$6q4== =A=    )g      ?        r;   r;   r   r   rA   FTNgq=
ףp?r;   *   r;   T)r   )__name__
__module____qualname____doc__torchoptim	Optimizerr=   floatboolr   r   r   r    r9   r?   __classcell__)r)   s   @r*   r	   r	      s/    !!# $&"' $JN#"  #%2>{{,,2> 2> 	2>
 2> 2> 2> 2> 2> "2>  2> 2> !cE#s(OS$!FG2> 2> 2>  !2>" #2>$ %2>& 
'2>h e <>r@   r	   )rF   r-   loggingtypingr   r   r   rG   	schedulerr   	getLoggerrC   r!   r	    r@   r*   <module>rR      s@      % %    '

H
%^>i ^>r@   