o
    
j	                     @   s*   d dl mZ d dlmZ G dd dZdS )    )	Generator)get_optimizerc                   @   s|   e Zd ZdZdededdfddZdd	 Zd
d ZdddZ	dd Z
dd ZededefddZededefddZdS )CapacitronOptimizerz0Double optimizer class for the Capacitron model.configmodel_paramsreturnNc                 C   s   |  |\| _| _t|j }t|j }t|d |d |j| jd| _	t|d | 
|d |d d | jd| _| j	j| _d S )Nr   )
parameters   lr)split_model_parametersprimary_paramssecondary_paramslistoptimizer_paramskeysvaluesr   r
   primary_optimizerextract_optimizer_parameterssecondary_optimizerparam_groups)selfr   r   optimizer_namesoptimizer_parameters r   Q/home/kuhnn/.local/lib/python3.10/site-packages/TTS/utils/capacitron_optimizer.py__init__	   s    
zCapacitronOptimizer.__init__c                 C   s"   | j   | j   | j  d S N)r   step	zero_gradr   r   r   r   r   
first_step   s   

zCapacitronOptimizer.first_stepc                 C   s   | j j| _| j   d S r   )r   r   r   r   r   r   r   r   $   s   
zCapacitronOptimizer.stepFc                 C   s   | j | | j| d S r   )r   r   r   )r   set_to_noner   r   r   r   )   s   zCapacitronOptimizer.zero_gradc                 C   s$   | j |d  | j|d  d S )Nr   r	   )r   load_state_dictr   )r   
state_dictr   r   r   r"   -   s   z#CapacitronOptimizer.load_state_dictc                 C   s   | j  | j gS r   )r   r#   r   r   r   r   r   r#   1   s   zCapacitronOptimizer.state_dictc                 C   sJ   g }g }| D ]\}}|j r|dkr|| q|| qt|t|gS )Nzcapacitron_vae_layer.beta)requires_gradappenditer)r   r   r   nameparamr   r   r   r   4   s   
z*CapacitronOptimizer.split_model_parametersparamsc                 C   s   dd |   D S )z1Extract parameters that are not the learning ratec                 S   s   i | ]\}}|d kr||qS )r
   r   ).0kvr   r   r   
<dictcomp>C   s    zDCapacitronOptimizer.extract_optimizer_parameters.<locals>.<dictcomp>)items)r)   r   r   r   r   @   s   z0CapacitronOptimizer.extract_optimizer_parameters)F)__name__
__module____qualname____doc__dictr   r   r    r   r   r"   r#   staticmethodr   r   r   r   r   r   r   r      s    
r   N)typingr   trainer.trainer_utilsr   r   r   r   r   r   <module>   s    