o
    i	                     @   s4   d Z ddlmZmZ ddlZG dd dejjZdS )znResidual stack module in MelGAN.

This code is modified from https://github.com/kan-bayashi/ParallelWaveGAN.

    )AnyDictNc                       s~   e Zd ZdZdddddddid	i fd
edededededeeef dedeeef f fddZ	de
jde
jfddZ  ZS )ResidualStackz+Residual stack module introduced in MelGAN.          T	LeakyReLUnegative_slopeg?ReflectionPad1dkernel_sizechannelsdilationbiasnonlinear_activationnonlinear_activation_paramspad
pad_paramsc	           	         s   t    |d d dksJ dtjttj|di |ttj||d d | fi |tjj|||||dttj|di |tjj||d|d| _tjj||d|d| _dS )	a  Initialize ResidualStack module.

        Args:
            kernel_size (int): Kernel size of dilation convolution layer.
            channels (int): Number of channels of convolution layers.
            dilation (int): Dilation factor.
            bias (bool): Whether to add bias parameter in convolution layers.
            nonlinear_activation (str): Activation function module name.
            nonlinear_activation_params (Dict[str, Any]): Hyperparameters for
                activation function.
            pad (str): Padding function module name before dilated convolution layer.
            pad_params (Dict[str, Any]): Hyperparameters for padding function.

        r      r   z$Not support even number kernel size.)r   r   )r   N )	super__init__torchnn
SequentialgetattrConv1dstack
skip_layer)	selfr   r   r   r   r   r   r   r   	__class__r   Y/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/gan_tts/melgan/residual_stack.pyr      s   
"
zResidualStack.__init__creturnc                 C   s   |  || | S )zCalculate forward propagation.

        Args:
            c (Tensor): Input tensor (B, channels, T).

        Returns:
            Tensor: Output tensor (B, chennels, T).

        )r   r   )r   r"   r   r   r!   forward<   s   
zResidualStack.forward)__name__
__module____qualname____doc__intboolstrr   r   r   r   Tensorr$   __classcell__r   r   r   r!   r      s8    

	*r   )r(   typingr   r   r   r   Moduler   r   r   r   r!   <module>   s   