o
    
j                     @   s.   d dl mZ ddlmZ G dd dejZdS )    )nn   )	LayerNormc                       s(   e Zd ZdZ fddZdd Z  ZS )GatedConvBlockzGated convolutional block as in https://arxiv.org/pdf/1612.08083.pdf
    Args:
        in_out_channels (int): number of input/output channels.
        kernel_size (int): convolution kernel size.
        dropout_p (float): dropout rate.
    c              	      s   t    || _|| _t | _t | _t | _t	|D ]!}|  jtj
|d| ||d dg7  _|  jtd| g7  _qd S )N   )padding)super__init__	dropout_p
num_layersr   
ModuleListconv_layersnorm_layerslayersrangeConv1dr   )selfin_out_channelskernel_sizer
   r   _	__class__ T/home/kuhnn/.local/lib/python3.10/site-packages/TTS/tts/layers/generic/gated_conv.pyr	      s   



&zGatedConvBlock.__init__c                 C   sn   |}|}t | jD ]+}tjj|| j| jd}| j| || }| j| |}tjj	|dd}|| }|}q	|S )N)ptrainingr   )dim)
r   r   r   
functionaldropoutr
   r   r   r   glu)r   xx_maskoresidxr   r   r   forward   s   zGatedConvBlock.forward)__name__
__module____qualname____doc__r	   r%   __classcell__r   r   r   r   r      s    r   N)torchr   normalizationr   Moduler   r   r   r   r   <module>   s    