
    ^j              /       @   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 d'dee   fdZ	 d(dedefdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)d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d#ed$ed%edef.d&Zy)*zE 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_lr        	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        k/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/scheduler_factory.pyscheduler_kwargsrE      s    #}f5K$ 1uu &+ 5u5 ii3#. S."5 !&82r(C	
 c?A6  %6:  %6; 3c2 sHb) #{D1 c?E: c:t, #~t4 #~r2 3+  #~r2!" C!137#$ C!115%& \3/'( ")* #3(:EBB+F. M    	optimizerupdates_per_epochc                 6    t        dd|it        |       d|iS )NrG   rH   r?   )create_scheduler_v2rE   )argsrG   rH   s      rD   create_schedulerrL   3   s0    
  
4
  , rF   r   r   r   r   r   r    r"   r$   r&   r   r(   r)   r+   r.   r1   r4   r6   r8   r:   r<   r=   c           	      `   |}|
}|}|}|s2|dkD  sJ d       ||z  }||z  }||z  }|D cg c]  }||z  	 }}||z  }t        |	||      }|Bt        |t        t        f      r&|D cg c]  }||z  	 }}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||}!nk|dk(  rt        | f|||d||}!nS|dk(  r3|sJ d       |j                  dd       t        | f||dd|||d|}!n|dk(  rt        | f|||||d| ||}!t        |!d      r$|!j                         |z   }"|r|"}|!|fS |"|z  }|!|fS |r||
z  }|!|fS c c}w c c}w )Nr   z=updates_per_epoch must be set to number of dataloader batches)warmup_lr_initwarmup_tr(   r   )noise_range_tr+   r.   r1   )r4   r6   r8   cosine)	t_initiallr_mint_in_epochsr:   tanhstep)decay_tr"   rT   	multistepplateauz(Plateau LR only supports step per epoch.r(   F)r"   
patience_t
cooldown_t)rS   modepoly)powerrR   rS   rT   r:   get_cycle_length)rA   
isinstancelisttuplelenr   r   r   r	   popr
   r   hasattrr_   )#rG   r   r   r   r   r   r    r"   r$   r&   r   r(   r)   r+   r.   r1   r4   r6   r8   r:   r<   r=   rH   rR   rO   rW   r[   dwarmup_argsnnoise_range
noise_args
cycle_argslr_schedulert_with_cycles_and_cooldowns#                                      rD   rJ   rJ   ?   s.   2 IHG J 1$e&ee$ 11	//--;KLaA 11LL"33
  #K edE]+278Q1y=8K8;1$)!n)+K!	J J L(	
&		

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

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

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

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

 	
 	
 	
 
&&

&

 

 

 

 |/0 &2%B%B%Dz%Q"3J ## 47HHJ
 ## -'J##a M 9s   F&'F+)N)r   )rQ   i,  Z   )rn      i  r   r!   r#   r%   r'   r   FNr-   r0   r3   r0   r#   r   r0   r   Tr   )__doc__typingr   r   r   torch.optimr   	cosine_lrr   multistep_lrr	   
plateau_lrr
   poly_lrr   step_lrr   tanh_lrr   boolrE   intrL   strfloatrJ   r?   rF   rD   <module>r}      s   ) ( ! ( . * $ $ $ Xd^  L "#		 	 &4 !#+/ !#!"/S$S$S$ S$ 	S$
 s)S$ S$ S$ S$ S$ S$ S$ S$ UDK'(S$ S$ S$  !S$" #S$$ %S$& 'S$( )S$* +S$, -S$. /S$rF   