
    kh              /       @   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_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/teggl/fontify/venv/lib/python3.12/site-packages/timm/scheduler/scheduler_factory.pyscheduler_kwargsrD      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 )NrF   rG   r>   )create_scheduler_v2rD   )argsrF   rG   s      rC   create_schedulerrK   3   s0    
  
4
  , rE   r   r   r   r   r   r    r"   r$   r%   r   r'   r(   r*   r-   r0   r3   r5   r7   r9   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-   r0   )r3   r5   r7   cosine)	t_initiallr_mint_in_epochsr9   tanhstep)decay_tr"   rS   	multistepplateauz(Plateau LR only supports step per epoch.r'   F)r"   
patience_t
cooldown_t)rR   modepoly)powerrQ   rR   rS   r9   get_cycle_length)r@   
isinstancelisttuplelenr   r   r   r	   popr
   r   hasattrr^   )#rF   r   r   r   r   r   r    r"   r$   r%   r   r'   r(   r*   r-   r0   r3   r5   r7   r9   r;   r<   rG   rQ   rN   rV   rZ   dwarmup_argsnnoise_range
noise_args
cycle_argslr_schedulert_with_cycles_and_cooldowns#                                      rC   rI   rI   ?   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   )rP   i,  Z   )rm      i  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 !#+/ !#!"/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$rE   