Ë
    éÓ^jû  ã                   ó‚   — d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZ  ej                  e«      Z G d„ de«      Zy)zv TanH Scheduler

TanH schedule with warmup, cycle/restarts, 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	de
ee   eeef   edf   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 )ÚTanhLRSchedulerzu
    Hyberbolic-Tangent decay with restarts.
    This is described in the paper https://arxiv.org/abs/1806.01593
    NÚ	optimizerÚ	t_initialÚlbÚubÚ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Ú
initializeÚreturnc           
      ób  •— t         ‰| �  |d||||||¬«       |dkD  sJ ‚|dk\  sJ ‚||k  sJ ‚|dk\  sJ ‚|	dk\  sJ ‚|
dk\  sJ ‚|| _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        | j                  rr| j                  r| j                  n| j                  | j                  «      }|D �cg c]  }||
z
  | j                  z  ‘Œ c}| _        t         ‰| �=  | 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   )ÚsuperÚ__init__r   r   r   r   r   r   r   r   r   r   Úbase_valuesÚ_get_lrÚwarmup_stepsÚupdate_groups)Úselfr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Út_vÚvÚ_Ú	__class__s                        €úa/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/tanh_lr.pyr    zTanhLRScheduler.__init__   sG  ø€ ô( 	‰ÑØØ"Ø#Ø'ØØØ!Ø!ð 	ô 		
ð ˜1Š}Ðˆ}Ø˜Š{Ðˆ{Ø�BŠwˆˆwØ˜aÒÐÐØ˜1Š}Ðˆ}Ø Ò"Ð"Ð"ØˆŒØˆŒØ"ˆŒØˆŒØ"ˆŒØ&ˆÔØ&ˆÔØ ˆŒØ,ˆÔØ*ˆÔØ�=Š=Ø&*×&8Ò&8�$×"Ò"¸d¿l¹lÈ4Ï=É=Ó>YˆCØORÖ SÈ! ! nÑ"4¸¿¹Ó!EÒ SˆDÔÜ‰GÑ! $×"5Ñ"5Õ6à,0×,<Ñ,<Ö = q¢Ò =ˆDÕùò !Tùò !>s   ÃD'Ä	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                  k  r—| j                  |z  }| j                  D �cg c]  }||z  ‘Œ	 }	}||z  }
|	D �cg c]Z  }| j                  d|| j                  z
  z  dt        j                  | j                  d|
z
  z  | j                  |
z  z   «      z
  z  z   ‘Œ\ }}|S | j                  D �cg c]  }| j                  ‘Œ }}|S c c}w c c}w c c}w c c}w )Nr   g      à?ç      ð?)r   r#   r   r   r   ÚmathÚfloorÚlogr   r   r   r!   r   Útanhr   r   )r%   r+   ÚsÚlrsÚiÚt_iÚt_currÚgammar'   Úlr_max_valuesÚtrÚlr_maxr(   s                r*   r"   zTanhLRScheduler._get_lrO   s  € Øˆt�}‰}ÒØ8<×8IÑ8IÖJ°1�4×&Ñ&¨¨Q©Ó.ÐJˆCÐJð2 ˆ
ð/ ×!Ò!Ø˜Ÿ™Ñ%�à�~‰~ Ò"Ü—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�à�4×#Ñ#Ò#Ø×(Ñ(¨AÑ-�Ø48×4DÑ4DÖ E¨q  U£Ð E�Ð Eà˜c‘\�ð #0öàð —K‘K #¨°$·+±+Ñ)=Ñ">À!ÄdÇiÁiÐPT×PWÑPWÐ[]Ð`bÑ[bÑPcÐfj×fmÑfmÐprÑfrÑPrÓFsÑBsÑ"tÓtð�ð ð ˆ
ð -1×,<Ñ,<Ö= q�t—{“{Ð=�Ð=Øˆ
ùò3 Kùò  !Fùòùò
 >s   žG?Å HÅ7AH	Ç(H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   r-   )	Úmaxr   r   r   Úintr.   r/   r   r   )r%   Úcyclesr+   s      r*   Úget_cycle_lengthz TanhLRScheduler.get_cycle_lengthl   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      Àg      @ç        r-   r-   r   r   rA   FTNgq=
×£på?r-   é*   T)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚoptimÚ	Optimizerr=   ÚfloatÚboolr   r   r   r    r"   r?   Ú__classcell__)r)   s   @r*   r	   r	      s/  ø„ ñð ØØØ!Ø!#Ø ØØ$&Ø"'Ø $ØJNØ#Ø"Ø Ø#ñ%4>à—{‘{×,Ñ,ð4>ð ð4>ð ð	4>ð
 ð4>ð ð4>ð ð4>ð ð4>ð ð4>ð ð4>ð "ð4>ð  ð4>ð ð4>ð !  c¡¨E°#°s°(©O¸SÀ$Ð!FÑGð4>ð ð4>ð  ð!4>ð" ð#4>ð$ ð%4>ð& 
õ'4>ðl˜ð   e¡ó ÷:>r@   r	   )rF   Úloggingr.   ÚnumpyÚnprG   Útypingr   r   r   Ú	schedulerr   Ú	getLoggerrC   Ú_loggerr	   © r@   r*   ú<module>rU      sC   ðñó Û Û Û ß %Ñ %å  ð ˆ'×
Ñ
˜HÓ
%€ô_>�iõ _>r@   