
    9i	                     &    S SK Jr   " S S\5      rg)    )_LRSchedulerc                   b   ^  \ rS rSrSr  SU 4S jjrS rS rS rS r	S r
\S	 5       rS
rU =r$ )
BaseWarmup   zBase warmup scheduler

Args:
    base_scheduler (torch.optim._LRScheduler): an instance of torch.optim._LRScheduler type
    warmup_iters (int | list): Warmup iterations
    last_epoch (int): The index of last epoch.
c                 |   > Xl         X l        U R                   R                  nSU l        [        [
        U ]  XSUS9  g )NT)
last_epochverbose)base_schedulerwarmup_iters	optimizer_is_init_stepsuperr   __init__)selfr
   r   r   r	   r   	__class__s         k/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/trainers/lrscheduler/warmup/base.pyr   BaseWarmup.__init__   sC    
 -(''11	!j$(g 	) 	?    c                 6    U R                   R                  5       $ N)r
   get_lrr   s    r   r   BaseWarmup.get_lr   s    ""))++r   c                 6    U R                   R                  5       $ r   )r
   
state_dictr   s    r   r   BaseWarmup.state_dict   s    ""--//r   c                 8    U R                   R                  U5      $ r   )r
   load_state_dict)r   r   s     r   r   BaseWarmup.load_state_dict!   s    ""22:>>r   c                    U R                  U R                  R                  S-
  5      n[        U[        [
        45      (       a8  [        [        U R                  R                  5      5       Vs/ s H  o!PM     nnO[        U[        [        45      (       d   S5       e[        U5      [        U R                  R                  5      :X  d=   SR                  [        U5      [        U R                  R                  5      5      5       e[        U R                  R                  5       H  u  p4US==   X   -  ss'   M     gs  snf )z"Scale the learning rates.
           z Only support list or tuple type!zSize mismatch {} != {}lrN)get_warmup_scaler
   _step_count
isinstanceintfloatrangelenr   param_groupslisttupleformat	enumerate)r   scale_value_igroups        r   scaleBaseWarmup.scale$   s&    ++D,?,?,K,K./-0 1kC<00%*3t~~/J/J+K%L%L%L  K dE], , P-OP ,{#s++(- - I/G/N/N$c$..*E*E&F0HI - "$.."="=>HA$K;>)K ?s   .D?c                 |   U R                   R                  U R                  :  a  U R                   R                  " U0 UD6$ [	        U R
                  R                  U R                  5       H	  u  p4XCS'   M     U R                  (       a  SU l        OU R                   R                  " U0 UD6  U R                  5         g)zc
When ``self.base_scheduler._step_count`` is less than ``self.warmup_iters``, multiply lr by scale
r"   FN)
r
   r$   r   stepzipr   r*   base_lrsr   r3   )r   argskwargsr2   r"   s        r   r6   BaseWarmup.step7   s     **T->->>&&++T<V<<T^^88$--HIE$K I !&D$$d5f5

r   c                     g r    )r   cur_iters     r   r#   BaseWarmup.get_warmup_scaleI   s    r   )r   r
   r   )F)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r3   r6   classmethodr#   __static_attributes____classcell__)r   s   @r   r   r      sB     	?,0?*&$  r   r   N)torch.optim.lr_schedulerr   r   r=   r   r   <module>rJ      s    1F Fr   