
    Ng              /       Z   d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ d4dee         fdZ	 d5dedefdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6dededed ed!ee         d"ed#ed$ed%ed&ed'ed(ed)eeee         f         d*ed+ed,ed-ed.ed/ed0ed1ed2edef.d3ZdS )7zE Scheduler Factory
Hacked together by / Copyright 2021 Ross Wightman
    )ListOptionalUnion)	Optimizer   )CosineLRScheduler)MultiStepLRScheduler)PlateauLRScheduler)PolyLRScheduler)StepLRScheduler)TanhLRSchedulerNdecreasing_metricc                 &   t          | dd          }||rdnd}nd|v rdnd}t          d4i d| j        dt          | d	d
          dt          | dd          dt          | dddg          dt          | dd          dt          | dd          dt          | dd          dt          | dd          dt          | dd          dt          | dd          dt          | dd          dt          | dd          dt          | d d!          d"t          | d#d$          d%t          | d&d'          d(t          | d)d$          d*t          | d+d          d,t          | d-d.          d/t          | d0d$          d1|d2t          | d3d           }|S )5zz cfg/argparse to kwargs helper
    Convert scheduler args in argparse args or cfg (.dot) like object to keyword args.
    eval_metrictop1Nminmaxlosssched
num_epochsepochsd   decay_epochs   decay_milestones<   warmup_epochs   cooldown_epochsr   patience_epochs
   
decay_rate皙?min_lrg        	warmup_lrh㈵>warmup_prefixFnoiselr_noise	noise_pctlr_noise_pctq=
ףp?	noise_stdlr_noise_std      ?
noise_seedseed*   	cycle_mullr_cycle_mulcycle_decaylr_cycle_decaycycle_limitlr_cycle_limitr   k_decay
lr_k_decayplateau_modestep_on_epochssched_on_updates )getattrdictr   )cfgr   r   r;   kwargss        \/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/scheduler/scheduler_factory.pyscheduler_kwargsrD      sW    #}f55K$ 1<uuu &+ 5 5uu5   ii3#... S."555 !&82r(CCC	
 c?A666  %6:::  %6;;; 3c222 sHb))) #{D111 c?E::: c:t,,, #~t444 #~r222 3+++  #~r222!" C!13777#$ C!11555%& \3///'( "\)* #3(:EBBBB+F. M    	optimizerupdates_per_epochc                 @    t          dd|it          |           d|iS )NrF   rG   r>   )create_scheduler_v2rD   )argsrF   rG   s      rC   create_schedulerrK   3   sG    
   
4
 
   ,   rE   cosine,  Z   rN      i  r!   r#   r&   Fr,   r/   r2   r   Tr   r   r   r   r   r    r"   r$   r%   r   r'   r(   r*   r-   r0   r3   r5   r7   r9   r;   r<   c           	          | |
}|}|}|s2dk    s
J d             z   |z  }|z  }fd|D             }|z  }t          |	||          }|Lt          |t          t          f          r* fd|D             }t	          |          dk    r|d         }n| z  }nd }t          ||||          }t          |||          }d }|d	k    rt          | f ||d
|||d|i}n|dk    rt          | f ||d
|||}n|dk    rt          | f|||d||}nx|dk    rt          | f|||d||}n^|dk    r;|s
J d            |	                    dd           t          | f||dd|||d|}n|dk    rt          | f| |||d|||}t          |d          r!|                                |z   }|r|}n|z  }||fS )Nr   z=updates_per_epoch must be set to number of dataloader batchesc                     g | ]}|z  S r>   r>   ).0drG   s     rC   
<listcomp>z'create_scheduler_v2.<locals>.<listcomp>b   s    LLLaA 11LLLrE   )warmup_lr_initwarmup_tr'   c                     g | ]}|z  S r>   r>   )rS   n	t_initials     rC   rU   z'create_scheduler_v2.<locals>.<listcomp>o   s    888Q1y=888rE   r   )noise_range_tr*   r-   r0   )r3   r5   r7   rL   )rZ   lr_mint_in_epochsr9   tanhstep)decay_tr"   r]   	multistepplateauz(Plateau LR only supports step per epoch.r'   F)r"   
patience_t
cooldown_t)r\   modepoly)powerrZ   r\   r]   r9   get_cycle_length)r@   
isinstancelisttuplelenr   r   r   r	   popr
   r   hasattrrh   )!rF   r   r   r   r   r   r    r"   r$   r%   r   r'   r(   r*   r-   r0   r3   r5   r7   r9   r;   r<   rG   rW   r`   rd   warmup_argsnoise_range
noise_args
cycle_argslr_schedulert_with_cycles_and_cooldownrZ   s!                         `         @rC   rI   rI   ?   s   2 IHG J 4 1$$$&e$$$ 11	//--LLLL;KLLL"33
  #  K edE]++ 	,8888%888K;1$$)!n)+KK!	  J   J L(	
&		
 	

 	
 	
 	
 	
 	
 	
 	
 
&&
&	
 

 
 
 
 
 
&&
!&	
 

 
 
 
 
+		+
$!&	
 

 
 
 
 
)		IIIIII///)	
!&		
 	

 	
 	
 	
 	
 	
 	
 
&&

&

 

 

 

 

 

 |/00 I%1%B%B%D%Dz%Q" 	I3JJ37HHJ##rE   )N)r   )rL   rM   rN   rO   r   r!   r#   r   r&   r   FNr,   r/   r2   r/   r#   r   r/   r   Tr   )__doc__typingr   r   r   torch.optimr   	cosine_lrr   multistep_lrr	   
plateau_lrr
   poly_lrr   step_lrr   tanh_lrr   boolrD   intrK   strfloatrI   r>   rE   rC   <module>r      s{    ) ( ( ( ( ( ( ( ( ( ! ! ! ! ! ! ( ( ( ( ( ( . . . . . . * * * * * * $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $   Xd^        L "#	 		 	 	 	 	 &4 !#+/ !#!"/O$ O$O$O$ O$ 	O$
 s)O$ O$ O$ O$ O$ O$ O$ O$ UDK'(O$ O$ O$  !O$" #O$$ %O$& 'O$( )O$* +O$, -O$. /O$ O$ O$ O$ O$ O$rE   