Ë
    éÓ^jF  ã                   óz   — d Z ddlZddlZddlmZmZmZ ddlZddlm	Z	  ej                  e«      Z G d„ de	«      Zy)zu Polynomial Scheduler

Polynomial LR schedule with warmup, noise.

Hacked together by / Copyright 2021 Ross Wightman
é    N)ÚListÚTupleÚUnioné   )Ú	Schedulerc            %       óð   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddej
                  j                  dededededed	ed
edede	de	de
ee   eeef   edf   dedededede	ddf$ˆ fd„Zdedee   fd„Zdd„Zˆ xZS )ÚPolyLRSchedulerz® Polynomial LR Scheduler w/ warmup, noise, and k-decay

    k-decay option based on `k-decay: A New Method For Learning Rate Schedule` - https://arxiv.org/abs/2004.05909
    NÚ	optimizerÚ	t_initialÚpowerÚlr_minÚ	cycle_mulÚcycle_decayÚcycle_limitÚwarmup_tÚwarmup_lr_initÚwarmup_prefixÚt_in_epochsÚnoise_range_tÚ	noise_pctÚ	noise_stdÚ
noise_seedÚk_decayÚ
initializeÚreturnc           
      ó   •— t         ‰| �  |d||||||¬«       |dkD  sJ ‚|dk\  sJ ‚|dk(  r|dk(  r|dk(  rt        j                  d«       || _        || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        || _        | j                  rI| j                  D �cg c]  }||	z
  | j                  z  ‘Œ c}| _        t         ‰| �A  | j                  «       y | j                  D �cg c]  }d‘Œ c}| _        y c c}w c c}w )NÚlr)Úparam_group_fieldr   r   r   r   r   r   r   r   zjCosine annealing scheduler will have no effect on the learning rate since t_initial = t_mul = eta_mul = 1.)ÚsuperÚ__init__Ú_loggerÚwarningr   r   r   r   r   r   r   r   r   r   Úbase_valuesÚwarmup_stepsÚupdate_groups)Úselfr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚvÚ_Ú	__class__s                       €úa/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/poly_lr.pyr    zPolyLRScheduler.__init__   s  ø€ ô( 	‰ÑØØ"Ø#Ø'ØØØ!Ø!ð 	ô 		
ð ˜1Š}Ðˆ}Ø˜Š{Ðˆ{Ø˜Š>˜i¨1šn°ÀÒ1AÜ�O‰Oð Jô Kà"ˆŒØˆŒ
ØˆŒØ"ˆŒØ&ˆÔØ&ˆÔØ ˆŒØ,ˆÔØ*ˆÔØˆŒØ�=Š=ØOS×O_ÑO_Ö `È! ! nÑ"4¸¿¹Ó!EÒ `ˆDÔÜ‰GÑ! $×"5Ñ"5Õ6à,0×,<Ñ,<Ö = q¢Ò =ˆDÕùò !aùò !>s   Â+DÃ4	DÚtc           	      óô  — || j                   k  r+| j                  D �cg c]  }| j                  ||z  z   ‘Œ }}|S | j                  r|| j                   z
  }| j                  dk7  r¢t        j                  t        j                  d|| j                  z  d| j                  z
  z  z
  | j                  «      «      }| j                  |z  | j                  z  }|d| j                  |z  z
  d| j                  z
  z  | j                  z  z
  }n-|| j                  z  }| j                  }|| j                  |z  z
  }| j                  |z  }| j                  D �cg c]  }||z  ‘Œ	 }	}| j                  }
|| j                  k  rG|	D �cg c]:  }| j                  || j                  z
  d||
z  ||
z  z  z
  | j                  z  z  z   ‘Œ< }}|S | j                  D �cg c]  }| j                  ‘Œ }}|S c c}w c c}w c c}w c c}w )Nr   )r   r$   r   r   r   ÚmathÚfloorÚlogr   r   r#   r   r   r   r   )r&   r+   ÚsÚlrsÚiÚt_iÚt_currÚgammar'   Úlr_max_valuesÚkÚlr_maxr(   s                r*   Ú_get_lrzPolyLRScheduler._get_lrM   së  € Øˆt�}‰}ÒØ8<×8IÑ8IÖJ°1�4×&Ñ&¨¨Q©Ó.ÐJˆCÐJð4 ˆ
ð1 ×!Ò!Ø˜Ÿ™Ñ%�à�~‰~ Ò"Ü—J‘JœtŸx™x¨¨A°·±Ñ,>À!ÀdÇnÁnÑBTÑ,UÑ(UÐW[×WeÑWeÓfÓg�Ø—n‘n¨Ñ)¨D¯N©NÑ:�Ø˜a $§.¡.°AÑ"5Ñ5¸!¸d¿n¹nÑ:LÑMÐPT×P^ÑP^Ñ^Ñ^‘à˜Ÿ™Ñ'�Ø—n‘n�Ø˜dŸn™n¨qÑ0Ñ1�à×$Ñ$¨Ñ)ˆEØ04×0@Ñ0@ÖA¨1˜Q ›YÐAˆMÐAØ—‘ˆAà�4×#Ñ#Ò#ð #0öàð —K‘K 6¨D¯K©KÑ#7¸AÀÈ!ÁÈcÐUVÉhÑ@VÑ<VÐ[_×[eÑ[eÑ;eÑ"eÓeð�ð ð ˆ
ð -1×,<Ñ,<Ö= q�t—{“{Ð=�Ð=àˆ
ùò5 Kùò Bùòùò
 >s   žG&ÅG+Å>?G0ÇG5c                 óF  — t        d|xs | j                  «      }| j                  dk(  r| j                  |z  }nLt	        t        j                  | j                   | j                  |z  dz
  z  d| j                  z
  z  «      «      }| j                  r|| j                  z   S |S )Nr   ç      ð?)	Úmaxr   r   r   Úintr-   r.   r   r   )r&   Úcyclesr+   s      r*   Úget_cycle_lengthz PolyLRScheduler.get_cycle_lengthk   s�   € Ü�Q˜Ò2 $×"2Ñ"2Ó3ˆØ�>‰>˜SÒ Ø—‘ Ñ'‰Aä”D—J‘J §¡˜°$·.±.ÀFÑ2JÈQÑ2NÑOÐSTÐW[×WeÑWeÑSeÑfÓgÓhˆAØ$(×$6Ò$6ˆq�4—=‘=Ñ Ð=¸AÐ=ó    )g      à?ç        r;   r;   r   r   rA   FTNgq=
×£på?r;   é*   r;   T)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚoptimÚ	Optimizerr=   ÚfloatÚboolr   r   r   r    r9   r?   Ú__classcell__)r)   s   @r*   r	   r	      s/  ø„ ñð ØØ!Ø!#Ø ØØ$&Ø"'Ø $ØJNØ#Ø"Ø Ø Ø#ñ%2>à—{‘{×,Ñ,ð2>ð ð2>ð ð	2>ð
 ð2>ð ð2>ð ð2>ð ð2>ð ð2>ð "ð2>ð  ð2>ð ð2>ð !  c¡¨E°#°s°(©O¸SÀ$Ð!FÑGð2>ð ð2>ð ð2>ð  ð!2>ð" ð#2>ð$ ð%2>ð& 
õ'2>ðh˜ð   e¡ó ÷<>r@   r	   )rF   r-   ÚloggingÚtypingr   r   r   rG   Ú	schedulerr   Ú	getLoggerrC   r!   r	   © r@   r*   ú<module>rR      s@   ðñó Û ß %Ñ %ã å  ð ˆ'×
Ñ
˜HÓ
%€ô^>�iõ ^>r@   