o
    ¡¿¯i@
  ã                   @   s<   d Z ddlZddlmZ ddlmZ G dd„ dejjƒZdS )z#Variance predictor related modules.é    N)Úcheck_argument_types)Ú	LayerNormc                       sd   e Zd ZdZ					ddeded	ed
ededef‡ fdd„Zddej	dej	dej	fdd„Z
‡  ZS )ÚVariancePredictora  Variance predictor module.

    This is a module of variacne predictor described in `FastSpeech 2:
    Fast and High-Quality End-to-End Text to Speech`_.

    .. _`FastSpeech 2: Fast and High-Quality End-to-End Text to Speech`:
        https://arxiv.org/abs/2006.04558

    é   é€  é   Tç      à?ÚidimÚn_layersÚn_chansÚkernel_sizeÚbiasÚdropout_ratec           	         s¢   t ƒ sJ ‚tƒ  ¡  tj ¡ | _t|ƒD ]2}|dkr|n|}|  jtj tjj	|||d|d d |dtj 
¡ t|ddtj |¡¡g7  _qtj |d¡| _dS )a]  Initilize duration predictor module.

        Args:
            idim (int): Input dimension.
            n_layers (int): Number of convolutional layers.
            n_chans (int): Number of channels of convolutional layers.
            kernel_size (int): Kernel size of convolutional layers.
            dropout_rate (float): Dropout rate.

        r   é   r   )ÚstrideÚpaddingr   )ÚdimN)r   ÚsuperÚ__init__ÚtorchÚnnÚ
ModuleListÚconvÚrangeÚ
SequentialÚConv1dÚReLUr   ÚDropoutÚLinearÚlinear)	Úselfr	   r
   r   r   r   r   ÚidxÚin_chans©Ú	__class__© ú^/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/tts/fastspeech2/variance_predictor.pyr      s*   


ú

õ
ÿzVariancePredictor.__init__NÚxsÚx_masksÚreturnc                 C   sJ   |  dd¡}| jD ]}||ƒ}q	|  |  dd¡¡}|dur#| |d¡}|S )a  Calculate forward propagation.

        Args:
            xs (Tensor): Batch of input sequences (B, Tmax, idim).
            x_masks (ByteTensor): Batch of masks indicating padded part (B, Tmax).

        Returns:
            Tensor: Batch of predicted sequences (B, Tmax, 1).

        r   éÿÿÿÿr   Ng        )Ú	transposer   r   Úmasked_fill)r    r'   r(   Úfr%   r%   r&   ÚforwardB   s   

zVariancePredictor.forward)r   r   r   Tr   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚboolÚfloatr   r   ÚTensorr.   Ú__classcell__r%   r%   r#   r&   r      s*    ùþýüûúù&)r   )	r2   r   Ú	typeguardr   Ú2espnet.nets.pytorch_backend.transformer.layer_normr   r   ÚModuler   r%   r%   r%   r&   Ú<module>   s
   