o
    wi                     @   s(  d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ G dd	 d	eejZG d
d deeejZG dd deejZG dd de
ejZ	 eedu rfejeed eedu rtejeed eedu rejeed ee
du reje
ed dS dS )    )ListOptional)
DictConfig)adapter_utils)AlignmentEncoder)TemporalPredictor)FFTransformerDecoderFFTransformerEncoder)adapter_mixinsc                   @   h   e Zd ZdZdedefddZdefddZdde	e defddZ
dee fddZdefddZd	S )FFTransformerDecoderAdapterz> Inherit from FFTransformerDecoder and add support for adapternamecfgc                 C   &   |  |}| jD ]}||| qd S N_update_adapter_cfg_input_dimlayersadd_adapter)selfr   r   	fft_layer r   b/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/nemo/collections/tts/modules/adapters.pyr         

z'FFTransformerDecoderAdapter.add_adapterreturnc                 C      t dd | jD S )Nc                 S      g | ]}|  qS r   is_adapter_available).0	FFT_layerr   r   r   
<listcomp>#       zDFFTransformerDecoderAdapter.is_adapter_available.<locals>.<listcomp>anyr   r   r   r   r   r   "      z0FFTransformerDecoderAdapter.is_adapter_availableNTenabledc                 C      | j D ]	}|j||d qd S Nr   r'   r   set_enabled_adapters)r   r   r'   r    r   r   r   r,   %      
z0FFTransformerDecoderAdapter.set_enabled_adaptersc                 C   2   t g }| jD ]	}||  qtt|}|S r   setr   updateget_enabled_adapterssortedlist)r   namesr    r   r   r   r2   )   
   
z0FFTransformerDecoderAdapter.get_enabled_adaptersc                 C      t j| || jd}|S N)
module_dim)r   update_adapter_cfg_input_dimd_modelr   r   r   r   r   r   1      z9FFTransformerDecoderAdapter._update_adapter_cfg_input_dimNT__name__
__module____qualname____doc__strdictr   boolr   r   r,   r   r2   r   r   r   r   r   r   r          r   c                   @   s   e Zd ZdZdS )FFTransformerEncoderAdapterz> Inherit from FFTransformerEncoder and add support for adapterN)r@   rA   rB   rC   r   r   r   r   rH   6   s    rH   c                   @   sl   e Zd ZdZdedefddZdefddZdde	e defddZ
dee fddZdedefddZd	S )AlignmentEncoderAdapterz: Inherit from AlignmentEncoder and add support for adapterr   r   c                 C   s|   t | jD ]\}}|d dkr| ||jj}||| qt | jD ]\}}|d dkr;| ||jj}||| q#d S N   r   )	enumeratekey_projr   convout_channelsr   
query_proj)r   r   r   i
conv_layerr   r   r   r   A   s   z#AlignmentEncoderAdapter.add_adapterr   c                 C   s,   t dd t| jD dd t| jD  S )Nc                 S   $   g | ]\}}|d  dkr|  qS rK   r   r   r   rQ   rR   r   r   r   r!   O      $ z@AlignmentEncoderAdapter.is_adapter_available.<locals>.<listcomp>c                 S   rS   rT   r   rU   r   r   r   r!   P   rV   )r$   rL   rM   rP   r%   r   r   r   r   M   s
   z,AlignmentEncoderAdapter.is_adapter_availableNTr'   c                 C   s`   t | jD ]\}}|d dkr|j||d qt | jD ]\}}|d dkr-|j||d qd S )NrK   r   r*   )rL   rM   r,   rP   )r   r   r'   rQ   rR   r   r   r   r,   S   s   z,AlignmentEncoderAdapter.set_enabled_adaptersc                 C   st   t g }t| jD ]\}}|d dkr||  q	t| jD ]\}}|d dkr1||  q tt|}|S rJ   )r0   rL   rM   r1   r2   rP   r3   r4   )r   r5   rQ   rR   r   r   r   r2   [   s   z,AlignmentEncoderAdapter.get_enabled_adaptersr9   c                 C   s   t j| ||d}|S r8   )r   r:   )r   r   r9   r   r   r   r   g   s   z5AlignmentEncoderAdapter._update_adapter_cfg_input_dimr>   )r@   rA   rB   rC   rD   rE   r   rF   r   r   r,   r   r2   r   intr   r   r   r   r   rI   >   s    rI   c                   @   r   )TemporalPredictorAdapterz; Inherit from TemporalPredictor and add support for adapterr   r   c                 C   r   r   r   )r   r   r   rR   r   r   r   r   o   r   z$TemporalPredictorAdapter.add_adapterr   c                 C   r   )Nc                 S   r   r   r   )r   rR   r   r   r   r!   u   r"   zATemporalPredictorAdapter.is_adapter_available.<locals>.<listcomp>r#   r%   r   r   r   r   t   r&   z-TemporalPredictorAdapter.is_adapter_availableNTr'   c                 C   r(   r)   r+   )r   r   r'   rR   r   r   r   r,   w   r-   z-TemporalPredictorAdapter.set_enabled_adaptersc                 C   r.   r   r/   )r   r5   rR   r   r   r   r2   {   r6   z-TemporalPredictorAdapter.get_enabled_adaptersc                 C   r7   r8   )r   r:   filter_sizer<   r   r   r   r      r=   z6TemporalPredictorAdapter._update_adapter_cfg_input_dimr>   r?   r   r   r   r   rX   l   rG   rX   N)
base_classadapter_class)typingr   r   	omegaconfr    nemo.collections.asr.parts.utilsr   $nemo.collections.tts.modules.alignerr   &nemo.collections.tts.modules.fastpitchr   (nemo.collections.tts.modules.transformerr   r	   nemo.core.classesr
   AdapterModuleMixinr   rH   rI   rX   get_registered_adapterregister_adapterr   r   r   r   <module>   s.   
.