o
    i                     @   sr   d dl mZ d dl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j	ZdS )    N)weight_norm   )	SnakeBeta)Activation1dc                  O   s   t tj| i |S N)r   nnConv1d)argskwargs r   C/home/ubuntu/.local/lib/python3.10/site-packages/neucodec/module.pyWNConv1d	   s   r   c                       s0   e Zd Zd	dedef fddZdd Z  ZS )
ResidualUnit   r   dimdilationc              
      s`   t    d| d }ttt|dddt||d||dtt|dddt||dd	| _d S )
N      Talpha_logscale
activation   )kernel_sizer   paddingr   )r   super__init__r   
Sequentialr   r   r   block)selfr   r   pad	__class__r   r   r      s   

zResidualUnit.__init__c                 C   s   ||  | S r   r   r    xr   r   r   forward   s   zResidualUnit.forward)r   r   __name__
__module____qualname__intr   r'   __classcell__r   r   r"   r   r      s    
r   c                       s0   e Zd Zd
dedef fddZdd	 Z  ZS )EncoderBlockr   r   r      	   r   stridec              
      sn   t     fdd|D }tjg |tt d dddt d  d| ||d |d  dR  | _d S )Nc                    s   g | ]
}t  d  |dqS )r   )r   )r   ).0dr   r   r   
<listcomp>   s    z)EncoderBlock.__init__.<locals>.<listcomp>r   Tr   r   )r   r2   r   r   )r    r   r2   	dilationsrunitsr"   r5   r   r      s   
zEncoderBlock.__init__c                 C   s
   |  |S r   r$   r%   r   r   r   r'   ,   s   
zEncoderBlock.forward)r   r   r/   r(   r   r   r"   r   r.      s    r.   c                       s@   e Zd Z		ddededededef
 fdd	Zd
d Z  ZS )SemanticEncoderr0   Tinput_channelscode_dimencode_channelsr   biasc                    s   t t|   tj|||d|d d dd| _ttjddtj|||d|d d |dtjddtj|||d|d d |d| _tj|||d|d d dd| _	d S )Nr   r   F)in_channelsout_channelsr   r2   r   r=   T)inplace)r   r2   r   r=   )
r   r9   r   r   r   initial_convr   ReLUresidual_blocks
final_conv)r    r:   r;   r<   r   r=   r"   r   r   r   1   sJ   
	




zSemanticEncoder.__init__c                 C   s&   |  |}| || }| |}|S r   )rA   rC   rD   r%   r   r   r   r'   b   s   

zSemanticEncoder.forward)r0   T)r)   r*   r+   r,   boolr   r'   r-   r   r   r"   r   r9   0   s    1r9   )torch.nnr   torch.nn.utilsr   activationsr   alias_free_torchr   r   Moduler   r.   r9   r   r   r   r   <module>   s    