Ë
    éÓ^jÿ  ã                   óV   — d dl Z d dl mZ d dlmZmZmZmZmZmZ d dl	Z	 G d„ de«      Z
y)é    N)ÚABC)ÚAnyÚDictÚListÚOptionalÚTupleÚUnionc                   ó¶  — e Zd ZdZ	 	 	 	 	 	 	 d dej
                  j                  dedede	e
e   eeef   edf   deded	ed
ee   deddfd„Zdeeef   fd„Zdeeef   ddfd„Zej*                  dede
e   fd„«       Zd!dededee
e      fd„Zd"dedee   ddfd„Zd"dedee   ddfd„Zde	ee
e   f   ddfd„Zde
e   dede
e   fd„Zdedefd„Zdefd„Zy)#Ú	Schedulera   Parameter Scheduler Base Class
    A scheduler base class that can be used to schedule any optimizer parameter groups.

    Unlike the builtin PyTorch schedulers, this is intended to be consistently called
    * At the END of each epoch, before incrementing the epoch count, to calculate next epoch's value
    * At the END of each optimizer update, after incrementing the update count, to calculate next update's value

    The schedulers built on this should try to remain as stateless as possible (for simplicity).

    This family of schedulers is attempting to avoid the confusion of the meaning of 'last_epoch'
    and -1 values for special behaviour. All epoch and update counts must be tracked in the training
    code and explicitly passed in to the schedulers on the corresponding step or step_update call.

    Based on ideas from:
     * https://github.com/pytorch/fairseq/tree/master/fairseq/optim/lr_scheduler
     * https://github.com/allenai/allennlp/tree/master/allennlp/training/learning_rate_schedulers
    NÚ	optimizerÚparam_group_fieldÚt_in_epochsÚnoise_range_tÚ
noise_typeÚ	noise_pctÚ	noise_stdÚ
noise_seedÚ
initializeÚreturnc
                 ó¦  — || _         || _        d|› �| _        |	r\t        | j                   j                  «      D ]9  \  }
}||vrt        |› d|
› d�«      ‚|j                  | j                  ||   «       Œ; nPt        | j                   j                  «      D ].  \  }
}| j                  |vsŒt        | j                  › d|
› d�«      ‚ | j                   j                  D �cg c]  }|| j                     ‘Œ c}| _        d | _        || _	        || _
        || _        || _        || _        |�|nd| _        | j                  | j                  «       y c c}w )NÚinitial_z missing from param_groups[ú]é*   )r   r   Ú_initial_param_group_fieldÚ	enumerateÚparam_groupsÚKeyErrorÚ
setdefaultÚbase_valuesÚmetricr   r   r   r   r   r   Úupdate_groups)Úselfr   r   r   r   r   r   r   r   r   ÚiÚgroups               úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/scheduler/scheduler.pyÚ__init__zScheduler.__init__   sf  € ð #ˆŒØ!2ˆÔØ,4Ð5FÐ4GÐ*HˆÔ'ÙÜ% d§n¡n×&AÑ&AÓBò \‘��5Ø$¨EÑ1Ü"Ð&7Ð%8Ð8SÐTUÐSVÐVWÐ#XÓYÐYØ× Ñ  ×!@Ñ!@À%ÐHYÑBZÕ[ñ\ô
 & d§n¡n×&AÑ&AÓBò h‘��5Ø×2Ñ2¸%Ò?Ü" d×&EÑ&EÐ%FÐFaÐbcÐadÐdeÐ#fÓgÐgðhð QU×P^ÑP^×PkÑPkÖlÀu˜E $×"AÑ"AÓBÒlˆÔØˆŒØ&ˆÔØ*ˆÔØ"ˆŒØ$ˆŒØ"ˆŒØ(2Ð(>™*ÀBˆŒØ×Ñ˜4×+Ñ+Õ,ùò ms   ÃEc                 óv   — | j                   j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}S c c}}w )Nr   )Ú__dict__Úitems)r"   ÚkeyÚvalues      r%   Ú
state_dictzScheduler.state_dict=   s2   € Ø-1¯]©]×-@Ñ-@Ó-B×Y™z˜s EÀcÈ[ÓFX��U‘
ÓYÐYùÓYs   ž5¬5r,   c                 ó:   — | j                   j                  |«       y ©N)r(   Úupdate)r"   r,   s     r%   Úload_state_dictzScheduler.load_state_dict@   s   € Ø�‰×Ñ˜ZÕ(ó    Útc                  ó   — y r.   © )r"   r2   s     r%   Ú_get_lrzScheduler._get_lrC   s   € àr1   Úon_epochc                 ór   — |xr | j                   xs | xr | j                    }|sy | j                  |«      S r.   )r   r5   )r"   r2   r6   Úproceeds       r%   Ú_get_valueszScheduler._get_valuesG   s;   € ØÒ0 × 0Ñ 0Ò\¸(°lÒ6[È4×K[ÑK[ÐG[ˆÙØØ�|‰|˜A‹Ðr1   Úepochr    c                 ó„   — || _         | j                  |d¬«      }|�$| j                  ||«      }| j                  |«       y y )NT©r6   ©r    r9   Ú
_add_noiser!   )r"   r:   r    Úvaluess       r%   ÚstepzScheduler.stepM   sG   € ØˆŒØ×!Ñ! %°$Ð!Ó7ˆØÐØ—_‘_ V¨UÓ3ˆFØ×Ñ˜vÕ&ð r1   Únum_updatesc                 ó„   — || _         | j                  |d¬«      }|�$| j                  ||«      }| j                  |«       y y )NFr<   r=   )r"   rA   r    r?   s       r%   Ústep_updatezScheduler.step_updateT   sG   € ØˆŒØ×!Ñ! +¸Ð!Ó>ˆØÐØ—_‘_ V¨[Ó9ˆFØ×Ñ˜vÕ&ð r1   r?   c                 ó  — t        |t        t        f«      s#|gt        | j                  j
                  «      z  }t        | j                  j
                  |«      D ].  \  }}d|v r||d   z  || j                  <   Œ ||| j                  <   Œ0 y )NÚlr_scale)Ú
isinstanceÚlistÚtupleÚlenr   r   Úzipr   )r"   r?   Úparam_groupr+   s       r%   r!   zScheduler.update_groups[   s‚   € Ü˜&¤4¬ -Ô0Ø�X¤ D§N¡N×$?Ñ$?Ó @Ñ@ˆFÜ"% d§n¡n×&AÑ&AÀ6Ó"Jò 	<ÑˆK˜Ø˜[Ñ(Ø6;¸kÈ*Ñ>UÑ6U�˜D×2Ñ2Ò3à6;�˜D×2Ñ2Ò3ñ		<r1   Úlrsc                 ó~   — | j                  |«      r&| j                  |«      }|D �cg c]
  }|||z  z   ‘Œ }}|S c c}w r.   )Ú_is_apply_noiseÚ_calculate_noise)r"   rL   r2   ÚnoiseÚvs        r%   r>   zScheduler._add_noised   sE   € Ø×Ñ Ô"Ø×)Ñ)¨!Ó,ˆEØ*-Ö. Q�1�q˜5‘y“=Ð.ˆCÐ.Øˆ
ùò /s   §:c                 óÜ   — d}| j                   �]t        | j                   t        t        f«      r.| j                   d   |cxk  xr | j                   d   k  }|S c }|S || j                   k\  }|S )z(Return True if scheduler in noise range.Fr   é   )r   rF   rG   rH   )r"   r2   Úapply_noises      r%   rN   zScheduler._is_apply_noisej   s|   € àˆØ×ÑÐ)Ü˜$×,Ñ,¬t´U¨mÔ<Ø"×0Ñ0°Ñ3°qÖP¸4×;MÑ;MÈaÑ;PÑP�ð Ðñ Q�ð Ðð   4×#5Ñ#5Ñ5�ØÐr1   c                 óz  — t        j                  «       }|j                  | j                  |z   «       | j                  dk(  rA	 t        j
                  d|¬«      j                  «       }t        |«      | j                  k  r|S Œ@dt        j                  d|¬«      j                  «       dz
  z  | j                  z  }|S )NÚnormalrS   )Ú	generatoré   g      à?)
ÚtorchÚ	GeneratorÚmanual_seedr   r   ÚrandnÚitemÚabsr   Úrand)r"   r2   ÚgrP   s       r%   rO   zScheduler._calculate_noiset   s˜   € Ü�O‰OÓˆØ	�‰�d—o‘o¨Ñ)Ô*Ø�?‰?˜hÒ&ØäŸ™ A°Ô3×8Ñ8Ó:�Ü�u“: §¡Ò.Ø �Lð	 ð œŸ™ A°Ô3×8Ñ8Ó:¸SÑ@ÑAÀDÇNÁNÑRˆEØˆr1   )TNrV   gq=
×£på?g      ð?NT)Tr.   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rY   ÚoptimÚ	OptimizerÚstrÚboolr	   r   Úintr   Úfloatr   r&   r   r   r,   r0   ÚabcÚabstractmethodr5   r9   r@   rC   r!   r>   rN   rO   r4   r1   r%   r   r      sÌ  „ ñð, !%ØJNØ&Ø#Ø"Ø(,Ø#ñ -à—{‘{×,Ñ,ð -ð  #ð -ð ð	 -ð
 !  c¡¨E°#°s°(©O¸SÀ$Ð!FÑGð -ð ð -ð ð -ð ð -ð ! ™ð -ð ð -ð 
ó -ðDZ˜D  c ™Nó Zð)¨$¨s°C¨x©.ð )¸Tó )ð 	×Ñð˜ð   e¡ò ó ðñ˜Sð ¨Dð ¸HÀTÈ%Á[Ñ<Qó ñ'˜#ð ' x°¡ð 'À$ó 'ñ' sð '°H¸U±Oð 'Ètó 'ð< E¨%°°e±Ð*<Ñ$=ð <À$ó <ð˜d 5™kð ¨cð °d¸5±kó ð ð ¨ó ð Uô r1   r   )rk   r   Útypingr   r   r   r   r   r	   rY   r   r4   r1   r%   ú<module>rn      s"   ðÛ 
Ý ß :× :ã ôw�õ wr1   