U
    ¯Ê¹jƒ  ã                   @   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 d"ee dœdd„Zd#eedœdd„Zd$eeeeee eeeeeeeeeee f eeeeeeeeeedœd d!„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k	r"|rdnd}nd|kr.dnd}t| jt | ddƒt | d	d
ƒt | dd
dgƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | ddƒt | d d!ƒt | d"dƒt | d#dƒt | d$d%ƒt | d&dƒ|t | d'dƒ d(�}|S ))zz cfg/argparse to kwargs helper
    Convert scheduler args in argparse args or cfg (.dot) like object to keyword args.
    Úeval_metricZtop1NÚminÚmaxZlossZepochséd   Údecay_epochsé   Údecay_milestonesé<   Úwarmup_epochsé   Úcooldown_epochsr   Úpatience_epochsé
   Ú
decay_rateçš™™™™™¹?Úmin_lrg        Ú	warmup_lrçñhãˆµøä>Úwarmup_prefixFZlr_noiseZlr_noise_pctçq=
×£på?Zlr_noise_stdç      ð?Úseedé*   Zlr_cycle_mulZlr_cycle_decayZlr_cycle_limitr   Z
lr_k_decayZsched_on_updates)ÚschedÚ
num_epochsr   r   r   r   r   r   r   r   r    ÚnoiseÚ	noise_pctÚ	noise_stdÚ
noise_seedÚ	cycle_mulÚcycle_decayÚcycle_limitÚk_decayÚplateau_modeÚstep_on_epochs)ÚgetattrÚdictr%   )Úcfgr   r   r/   Úkwargs© r5   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/scheduler/scheduler_factory.pyÚscheduler_kwargs   s8    
















ër7   )Ú	optimizerÚupdates_per_epochc                 C   s   t f d|it| ƒd|i—ŽS )Nr8   r9   )Úcreate_scheduler_v2r7   )Úargsr8   r9   r5   r5   r6   Úcreate_scheduler3   s    ÿþýr<   Úcosineé,  éZ   ©r?   é´   i  r   r   r   Fr!   r"   r$   r   T)r8   r%   r&   r   r   r   r   r   r   r   r   r    r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r9   c                     s  |‰ |
}|}|}|sVˆdks$t dƒ‚ˆ ˆ ‰ |ˆ }|ˆ }‡fdd„|D ƒ}|ˆ }t|	||d�}|d k	r¬t|ttfƒr¢‡ fdd„|D ƒ}t|ƒdkrª|d }q°|ˆ  }nd }t||||d�}t|||d	�}d }|d
krþt| fˆ ||dœ|||d|i—Ž}næ|dk�r&t| fˆ ||dœ|||—Ž}n¾|dk�rLt| f|||dœ||—Ž}n˜|dk�rrt	| f|||dœ||—Ž}nr|dk�rº|�sŠt dƒ‚| 
dd¡ t| f||ddœ|||dœ|—Ž}n*|dk�rät| f|ˆ |||dœ|||—Ž}t|dƒ�r| ¡ | }|�r|}n|ˆ }||fS )Nr   z=updates_per_epoch must be set to number of dataloader batchesc                    s   g | ]}|ˆ  ‘qS r5   r5   )Ú.0Úd)r9   r5   r6   Ú
<listcomp>b   s     z'create_scheduler_v2.<locals>.<listcomp>)Zwarmup_lr_initÚwarmup_tr    c                    s   g | ]}|ˆ  ‘qS r5   r5   )rB   Ún)Ú	t_initialr5   r6   rD   o   s     r   )Znoise_range_tr(   r)   r*   )r+   r,   r-   r=   )rG   Úlr_minÚt_in_epochsr.   ÚtanhÚstep)Údecay_tr   rI   Z	multistepZplateauz(Plateau LR only supports step per epoch.r    F)r   Z
patience_tÚ
cooldown_t)rH   ÚmodeZpoly)ÚpowerrG   rH   rI   r.   Úget_cycle_length)ÚAssertionErrorr2   Ú
isinstanceÚlistÚtupleÚlenr   r   r   r   Úpopr	   r
   ÚhasattrrP   ) r8   r%   r&   r   r   r   r   r   r   r   r   r    r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r9   rE   rL   rM   Zwarmup_argsZnoise_rangeZ
noise_argsZ
cycle_argsZlr_schedulerZt_with_cycles_and_cooldownr5   )rG   r9   r6   r:   ?   sî    ý

üýÿüùø


ÿüù	
ÿüú
ÿüú
ÿüùø

ÿú÷r:   )N)r   )r=   r>   r?   r@   r   r   r   r   r   r   FNr!   r"   r$   r"   r   r   r"   r   Tr   )Ú__doc__Útypingr   r   r   Ztorch.optimr   Z	cosine_lrr   Zmultistep_lrr   Z
plateau_lrr	   Zpoly_lrr
   Zstep_lrr   Ztanh_lrr   Úboolr7   Úintr<   ÚstrÚfloatr:   r5   r5   r5   r6   Ú<module>   sz   & ýý                      éé