o
    o°×i€  ã                   @   sT   d dl Z d dlZ	 	 				ddededededed	ed
edededefdd„ZdS )é    Néÿÿÿÿé   Ú
base_valueÚfinal_valueÚepochsÚniter_per_epÚwarmup_epochsÚstart_warmup_valueÚwarmup_stepsÚinitial_ep_per_cycleÚcycle_decayÚ	cycle_mulc
              	   C   st  t  g ¡}
|| }|dkr|}|dkrt  || |¡}
|| | }|dkr,|}d}|g}n@tt|| ƒƒ}|	dkrItt |||  ¡ƒ}|g| }n#d}g }d}t|ƒ|k rl|d7 }| ||	|  ¡ |d7 }t|ƒ|k sUg }t	|ƒD ]*}| ||  }t  
|| ¡}|d||  dt  t j| t|ƒ ¡   }| |¡ qrt  |
g|¢R ¡}|d|| … }t|ƒ|| ks¸J ‚|S )z$Adopted from official ConvNeXt repo.r   r   r   g      à?N)ÚnpÚarrayÚlinspaceÚintÚroundÚmathÚceilÚsumÚappendÚrangeÚarangeÚcosÚpiÚlenÚconcatenate)r   r   r   r   r   r	   r
   r   r   r   Úwarmup_scheduleÚwarmup_itersÚiters_after_warmupÚ
num_cyclesÚcycle_lengthsÚinitial_cycle_iterÚiÚschedule_cyclesÚcycle_base_valueÚitersÚschedule© r(   úC/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/df/lr.pyÚcosine_scheduler   sF   
ýÿr*   )r   r   r   r   r   r   )r   Únumpyr   Úfloatr   r*   r(   r(   r(   r)   Ú<module>   s:    öÿþýüûúùø	÷
ö