o
    پi                  /   @   s>  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 d7dee fddZ	d8dedefddZ																						d9d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d0ed1ed2ed3ed4edef.d5d6ZdS ):zE Scheduler Factory
Hacked together by / Copyright 2021 Ross Wightman
    )ListOptionalUnion)	Optimizer   )CosineLRScheduler)MultiStepLRScheduler)PlateauLRScheduler)PolyLRScheduler)StepLRScheduler)TanhLRSchedulerNdecreasing_metricc              	   C   s^  t | dd}|dur|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   r9   kwargsr<   r<   T/home/ubuntu/.local/lib/python3.10/site-packages/timm/scheduler/scheduler_factory.pyscheduler_kwargs   s`   	
rB   	optimizerupdates_per_epochc                 C   s   t dd|it| d|iS )NrC   rD   r<   )create_scheduler_v2rB   )argsrC   rD   r<   r<   rA   create_scheduler3   s   rG   cosine,  Z   rJ      i  r   r!   r$   Fr*   r-   r0   r   Tr   r   r   r   r   r   r    r"   r#   r   r%   r&   r(   r+   r.   r1   r3   r5   r7   r9   r:   c                     s>  | |
}|}|}|s+dksJ d   | }| }fdd|D }| }t |	||d}|d urVt|ttfrQ fdd|D }t|dkrP|d }n|  }nd }t ||||d}t |||d	}d }|d
krt| f ||d|||d|i}nu|dkrt| f ||d|||}n`|dkrt| f|||d||}nM|dkrt| f|||d||}n:|dkr|sJ d|	dd t
| f||dd|||d|}n|dkrt| f| |||d|||}t|dr| | }|r|}||fS | }||fS |r||
7 }||fS )Nr   z=updates_per_epoch must be set to number of dataloader batchesc                       g | ]}|  qS r<   r<   ).0d)rD   r<   rA   
<listcomp>b       z'create_scheduler_v2.<locals>.<listcomp>)warmup_lr_initwarmup_tr%   c                    rM   r<   r<   )rN   n)	t_initialr<   rA   rP   o   rQ   r   )noise_range_tr(   r+   r.   )r1   r3   r5   rH   )rU   lr_mint_in_epochsr7   tanhstep)decay_tr    rX   	multistepplateauz(Plateau LR only supports step per epoch.r%   F)r    
patience_t
cooldown_t)rW   modepoly)powerrU   rW   rX   r7   get_cycle_length)r>   
isinstancelisttuplelenr   r   r   r   popr	   r
   hasattrrc   ) rC   r   r   r   r   r   r   r    r"   r#   r   r%   r&   r(   r+   r.   r1   r3   r5   r7   r9   r:   rD   rS   r[   r_   warmup_argsnoise_range
noise_args
cycle_argslr_schedulert_with_cycles_and_cooldownr<   )rU   rD   rA   rE   ?   s
  


	
	rE   )N)r   )rH   rI   rJ   rK   r   r   r!   r   r$   r   FNr*   r-   r0   r-   r!   r   r-   r   Tr   )__doc__typingr   r   r   torch.optimr   	cosine_lrr   multistep_lrr   
plateau_lrr	   poly_lrr
   step_lrr   tanh_lrr   boolrB   intrG   strfloatrE   r<   r<   r<   rA   <module>   s    &
	
