
    Ng                     v    d Z ddlZddlZddlmZ ddlZddlmZ  ej        e	          Z
 G d de          ZdS )zu Polynomial Scheduler

Polynomial LR schedule with warmup, 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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
          ?              ?r   r   FTNq=
ףp?*   	optimizer	t_initialpowerlr_min	cycle_mulcycle_decaycycle_limitreturnc           
         	 t                                          |d||||||           |dk    sJ |dk    sJ |dk    r&|dk    r |dk    rt                              d           | _        | _        | _        | _        | _        | _	        | _
        	 _        |
 _        | _         j
        rA 	fd j        D              _        t                                           j                   d S d  j        D              _        d S )Nlr)param_group_fieldt_in_epochsnoise_range_t	noise_pct	noise_std
noise_seed
initializer   r   zjCosine annealing scheduler will have no effect on the learning rate since t_initial = t_mul = eta_mul = 1.c                 *    g | ]}|z
  j         z  S  )warmup_t).0vselfwarmup_lr_inits     R/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/scheduler/poly_lr.py
<listcomp>z,PolyLRScheduler.__init__.<locals>.<listcomp>H   s%     ` ` `!!n"4!E ` ` `    c                     g | ]}d S r   r   )r!   _s     r%   r&   z,PolyLRScheduler.__init__.<locals>.<listcomp>K   s     = = =q = = =r'   )super__init___loggerwarningr   r   r   r   r   r   r    r$   warmup_prefixk_decaybase_valueswarmup_stepsupdate_groups)r#   r   r   r   r   r   r   r   r    r$   r/   r   r   r   r   r   r0   r   	__class__s   `        `        r%   r,   zPolyLRScheduler.__init__   sL   ( 	"#'!! 	 		
 		
 		
 1}}}}{{{{>>i1nn1A1AOO J K K K"
"&& ,*= 	> ` ` ` ` `tO_ ` ` `DGG!!$"566666 = =D,< = = =Dr'   tc                 `     j         k     r fd j        D             }n j        r
 j         z
   j        dk    rxt	          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  fd j	        D             } j
        | j        k     r fd|D             }n fd j	        D             }|S )Nc                 *    g | ]}j         |z  z   S r   )r$   )r!   sr#   r5   s     r%   r&   z+PolyLRScheduler._get_lr.<locals>.<listcomp>O   s%    JJJ14&Q.JJJr'   r   c                     g | ]}|z  S r   r   )r!   r"   gammas     r%   r&   z+PolyLRScheduler._get_lr.<locals>.<listcomp>^   s    AAA1QYAAAr'   c                 b    g | ]+}j         |j         z
  d z  z  z  z
  j        z  z  z   ,S r)   )r   r   )r!   lr_maxkr#   t_currt_is     r%   r&   z+PolyLRScheduler._get_lr.<locals>.<listcomp>b   sX        K6DK#7A!cUVh@V<V[_[e;e"ee  r'   c                     g | ]	}j         
S r   )r   )r!   r*   r#   s     r%   r&   z+PolyLRScheduler._get_lr.<locals>.<listcomp>g   s    ===qt{===r'   )r    r2   r/   r   mathfloorlogr   r   r1   r0   r   )	r#   r5   lrsilr_max_valuesr:   r=   r>   r?   s	   ``   @@@@r%   _get_lrzPolyLRScheduler._get_lrM   s   t}JJJJJ8IJJJCC! &%~""JtxA,>!dnBT,U(UW[Weffggn)DN:a$.A"55!dn:LMPTP^^^'ndnq01$)EAAAA0@AAAMA4###      "/  
 >===D,<===
r'   c                     t          d|p| j                  }| j        dk    r
| j        |z  S t	          t          j        | j         | j        |z  dz
  z  d| j        z
  z                      S )Nr   r
   )maxr   r   r   intrA   rB   )r#   cycless     r%   get_cycle_lengthz PolyLRScheduler.get_cycle_lengthk   sp    Q2$"233>S  >F**tz4>/T^v5MPQ5Q"RVWZ^ZhVh"ijjkkkr'   )r   r	   r
   r
   r   r   r   FTNr   r
   r   r
   T)r   )__name__
__module____qualname____doc__torchoptim	OptimizerrJ   floatr,   r   rG   rL   __classcell__)r4   s   @r%   r   r      s         !!# %2> 2>{,2> 2> 	2>
 2> 2> 2> 2>& 
'2> 2> 2> 2> 2> 2>h e    <l l l l l l l lr'   r   )rP   rA   loggingtypingr   rQ   	schedulerr   	getLoggerrM   r-   r   r   r'   r%   <module>rZ      s                          '
H
%
%]l ]l ]l ]l ]li ]l ]l ]l ]l ]lr'   