
    RЦi              /       L   S r SSKJrJrJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  S'S\\   4S jjr S(S\S\4S jjr                      S)S\S\S\S\S\\   S\S\S\S\S\S\S\S\\\\   4   S\S\S\S \S!\S"\S#\S$\S%\S\4.S& jjrg)*zDScheduler Factory
Hacked together by / Copyright 2021 Ross Wightman
    )ListOptionalUnion)	Optimizer   )CosineLRScheduler)MultiStepLRScheduler)PlateauLRScheduler)PolyLRScheduler)StepLRScheduler)TanhLRSchedulerNdecreasing_metricc                    [        U SS5      nUb  U(       a  SOSnO
SU;   a  SOSn[        S40 SU R                  _S[        U S	S
5      _S[        U SS5      _S[        U SSS/5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U SS5      _S[        U S S!5      _S"[        U S#S$5      _S%[        U S&S'5      _S([        U S)S$5      _S*[        U S+S5      _S,[        U S-S.5      _S/[        U S0S$5      _S1U_S2[        U S3S5      (       + _6nU$ )5zqcfg/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        _/var/www/html/ai-image-ml/venv/lib/python3.13/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    [        SSU0[        U 5      DSU0D6$ )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           	         UnU
nUnUnU(       d6  US:  d   S5       eUU-  nUU-  nUU-  nU Vs/ s H  nUU-  PM
     nnUU-  n[        U	UUS9nUbK  [        U[        [        45      (       a*  U Vs/ s H  nUU-  PM
     nn[	        U5      S:X  a  US   nOUU-  nOS n[        UUUUS9n[        UUUS9n S n!US:X  a  [        U 4UUUS.U DUDUDS	U0D6n!OUS
:X  a  [        U 4UUUS.U DUDUD6n!OUS:X  a  [        U 4UUUS.UDUD6n!OsUS:X  a  [        U 4UUUS.UDUD6n!OZUS:X  a8  U(       d   S5       eUR                  SS5        [        U 4UUSS.UDUUS.DUD6n!OUS:X  a  [        U 4UUUUUS.U DUDUD6n![        U!S5      (       a*  U!R                  5       U-   n"U(       a  U"nU!U4$ U"U-  n U!U4$ U(       a  X*-  nU!U4$ s  snf s  snf )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   ?   s7   2 IHG J 1$e&ee$ 11	//--;KL;KaA 11;KL"33
  #K edE]++278%Q1y=%K8;1$)!n)+K!	J J L(	
&		

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

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

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

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

 	
 	
 	
 
&&

&

 

 

 

 |/00 &2%B%B%Dz%Q"3J ## 47HHJ
 ## 'J##a M 9s   G
3G)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   