
    NgC                     ~    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dS )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
                @              ?r   r   FTNq=
ףp?*   	optimizer	t_initiallbublr_min	cycle_mulcycle_decaycycle_limitreturnc           
      L   
 t                                          |d||||||           |dk    sJ |dk    sJ ||k     sJ |dk    sJ |	dk    sJ 
dk    sJ | _        | _        | _        | _        | _        | _        | _        |	 _	        
 _
        | _         j	        rd j        r j        n                      j	                  } 
fd|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   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/tanh_lr.py
<listcomp>z,TanhLRScheduler.__init__.<locals>.<listcomp>J   s%     S S S!!n"4!E S S S    c                     g | ]}d S )r   r!   )r#   _s     r'   r(   z,TanhLRScheduler.__init__.<locals>.<listcomp>M   s     = = =q = = =r)   )super__init__r   r   r   r   r   r   r   r"   r&   warmup_prefixbase_values_get_lrwarmup_stepsupdate_groups)r%   r   r   r   r   r   r   r   r   r"   r&   r.   r   r   r   r   r   r   t_v	__class__s   `         `        r'   r-   zTanhLRScheduler.__init__   sn   ( 	"#'!! 	 		
 		
 		
 1}}}}{{{{Bwwwwa1}}}}""""""&& ,*= 	>&*&8Y$""dll4=>Y>YC S S S S Ss S S SDGG!!$"566666 = =D,< = = =Dr)   tc                 T     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        k     r2 j	        |z  fd j
        D             }||z   fd|D             }n fd j
        D             }|S )Nc                 *    g | ]}j         |z  z   S r!   )r&   )r#   sr%   r5   s     r'   r(   z+TanhLRScheduler._get_lr.<locals>.<listcomp>Q   s%    JJJ14&Q.JJJr)   r   c                     g | ]}|z  S r!   r!   )r#   r$   gammas     r'   r(   z+TanhLRScheduler._get_lr.<locals>.<listcomp>a   s     E E EqU E E Er)   c           
          g | ]E}j         d |j         z
  z  dt          j        j        dz
  z  j        z  z             z
  z  z   FS )g      ?r   r   )r   mathtanhr   r   )r#   lr_maxr%   trs     r'   r(   z+TanhLRScheduler._get_lr.<locals>.<listcomp>d   so        K#$+)=">!diPTPW[]`b[bPcfjfmprfrPrFsFsBs"tt  r)   c                     g | ]	}j         
S r!   )r   )r#   r+   r%   s     r'   r(   z+TanhLRScheduler._get_lr.<locals>.<listcomp>i   s    ===qt{===r)   )r"   r1   r.   r   r<   floorlogr   r   r   r/   )	r%   r5   lrsit_it_currlr_max_valuesr:   r?   s	   ``     @@r'   r0   zTanhLRScheduler._get_lrO   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4###(A- E E E ED4D E E Ec\    "/  
 >===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   intr<   rA   )r%   cycless     r'   get_cycle_lengthz TanhLRScheduler.get_cycle_lengthl   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   r   FTNr   r   r   T)r   )__name__
__module____qualname____doc__torchoptim	OptimizerrJ   floatr-   r   r0   rL   __classcell__)r4   s   @r'   r   r      s         !!# %4> 4>{,4> 4> 	4>
 4> 4> 4> 4> 4>& 
'4> 4> 4> 4> 4> 4>l e    :l l l l l l l lr)   r   )rP   loggingr<   numpynprQ   typingr   	schedulerr   	getLoggerrM   _loggerr   r!   r)   r'   <module>r]      s                              '
H
%
%^l ^l ^l ^l ^li ^l ^l ^l ^l ^lr)   