o
    }oi                     @   s   d dl Z d dlmZ d dlm  mZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ dd ZG dd	 d	ejZG d
d dejZG dd deZdS )    N)ConvLSTMLinear)ConvNormMaskedInstanceNorm1d)FFTransformer)get_mask_from_lengthsc                 C   s8   | d }| d }|dkrt di |}|S td|)Nnamehparamsdapz{} model is not supported )DAP	Exceptionformat)configr   r   modelr
   r
   k/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/tts/modules/attribute_prediction_model.pyget_attribute_prediction_model   s   r   c                       s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	AttributeProcessingFc                    s   t t|   || _d S N)superr   __init__take_log_of_input)selfr   	__class__r
   r   r   %   s   
zAttributeProcessing.__init__c                 C   s   | j r
t|d }|S N   )r   torchlogr   xr
   r
   r   	normalize)      zAttributeProcessing.normalizec                 C   s   | j r
t|d }|S r   )r   r   expr   r
   r
   r   denormalize.   r!   zAttributeProcessing.denormalizeF)__name__
__module____qualname__r   r    r#   __classcell__r
   r
   r   r   r   $   s    r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	BottleneckLayerLayer
weightnormreluFc           	         s   t t|   || _t|| }|| _| jdkr?|dkr!ddi}n|dkr*dti}ni }t||fddi|}|| _|| _	d S d S )	Nr   r*   use_weight_normTinstancenormnorm_fnkernel_size   )
r   r)   r   reduction_factorintout_dimr   r   projection_fnnon_linearity)	r   in_dimr1   normr5   	use_pconvreduced_dim	norm_argsfnr   r
   r   r   5   s   



zBottleneckLayerLayer.__init__c                 C   sZ   | j dkr+t||d }| ||}| jdkr!t|}|S | jdkr+t|}|S )Nr   r+   	leakyrelu)	r1   r   	unsqueezefloatr4   r5   Fr+   
leaky_relu)r   r   lensmaskr
   r
   r   forwardF   s   




zBottleneckLayerLayer.forward)r*   r+   F)r%   r&   r'   r   rC   r(   r
   r
   r   r   r)   4   s    r)   c                       s0   e Zd Zd	 fdd	Zdd Zd
ddZ  ZS )r   Fc                    s\   t t| | tdi || _| jj| |d< |r$tdi || _d S tdi || _d S )Nr6   r
   )	r   r   r   r)   bottleneck_layerr3   r   feat_pred_fnr   )r   n_speaker_dimbottleneck_hparamsr   arch_hparamsuse_transformerr   r
   r   r   S   s   zDAP.__init__c           	      C   s`   |d ur	|  |}| ||}|d dd|jd }t||fd}| ||}||d}|S )N).N   r   )x_hatr   )r    rD   expandshaper   catrE   )	r   txt_encspk_embr   rA   spk_emb_expandedcontextrL   outputsr
   r
   r   rC   \   s   

zDAP.forwardNc                 C   s$   | j ||d |dd }| |}|S )N)r   rA   rL   )rC   r#   )r   rP   rQ   rA   rL   r
   r
   r   inferg   s   
z	DAP.inferr$   r   )r%   r&   r'   r   rC   rU   r(   r
   r
   r   r   r   R   s    	r   )r   torch.nnnntorch.nn.functional
functionalr?   #nemo.collections.tts.modules.commonr   'nemo.collections.tts.modules.submodulesr   r   (nemo.collections.tts.modules.transformerr   (nemo.collections.tts.parts.utils.helpersr   r   Moduler   r)   r   r
   r
   r
   r   <module>   s   