o
    @Ti                     @   sP   d dl Z d dlmZ ddedefddZG dd dejZG d	d
 d
ejZdS )    N   kernel_sizedilationc                 C   s   | d | d S Nr       )r   r   r   r   L/home/ubuntu/.local/lib/python3.10/site-packages/linacodec/module/postnet.pyget_padding   s   r	   c                       s*   e Zd Zdef fddZdd Z  ZS )Normchannelsc                    s   t    t|| _d S )N)super__init__nn	LayerNormnorm)selfr   	__class__r   r   r      s   
zNorm.__init__c                 C   s"   | dd}| |}| ddS r   )	transposer   )r   xr   r   r   forward   s   
zNorm.forward)__name__
__module____qualname__intr   r   __classcell__r   r   r   r   r
      s    r
   c                       sL   e Zd Z						ddededed	ed
edef fddZdd Z  ZS )PostNetd               ?Finput_channelsr   r   
num_layersdropoutuse_layer_normc           	         s   t    t|}t | _| jttj||||d|r!t	|nt
| td|d D ]}| jttj||||d|rDt	|nt
| q/| jttj||||d|r_t	|nt
| t|| _d S )N)r   paddingr   )r   r   r	   r   
ModuleListconvolutionsappend
SequentialConv1dr
   BatchNorm1drangeDropoutr#   )	r   r!   r   r   r"   r#   r$   r%   ir   r   r   r      s.   
	
zPostNet.__init__c                 C   s^   |}t t| jd D ]}| j| |}t|}| |}q| jd |}| |}|| S )Nr   )r,   lenr'   torchtanhr#   )r   r   residualr.   r   r   r   r   <   s   

zPostNet.forward)r   r   r   r   r    F)	r   r   r   r   floatboolr   r   r   r   r   r   r   r      s*    $r   )r   )r1   torch.nnr   r   r	   Moduler
   r   r   r   r   r   <module>   s
   