o
    iL                     @   s   d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlm	Z	 d dlm
Z d dlZd dlmZ d d	lmZ d d
lmZ d dlZd dlmZ G dd de	jZG dd deZdS )    )List)Optional)Sequence)Tuple)UnionN)
functional)make_pad_mask)	LayerNorm)
AbsEncoder)repeatc                       s>   e Zd Z					d fdd	Zedd Zdd
dZ  ZS )EncoderLayer   tanh   Fc           
         s   t    t|| d }|| | }	t||	fd| _t||||| _| 	|| _
|r7tj|ddd| _|| _|| _|| _|| _|| _d S )N           gGz?gMbP?)momentumeps)super__init__mathceilnnConstantPad1dconv_paddingConv1dconv1dget_activation
activationBatchNorm1dbnresidualinclude_batch_norminput_units	num_unitsstride)
selfr#   r$   kernel_sizer   r%   r"   r!   left_paddingright_padding	__class__ [/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/sond/encoder/conv_encoder.pyr      s$   


zEncoderLayer.__init__c                 C   s   | dkrt  S t  S )Nr   )r   TanhReLU)r   r,   r,   r-   r   0   s   zEncoderLayer.get_activationNc                 C   sR   |  | |}| jr| jdkr| j| jkr|| }| jr"| |}| ||fS )Nr   )	r   r   r!   r%   r#   r$   r"   r    r   )r&   xs_padilensoutputsr,   r,   r-   forward7   s   
zEncoderLayer.forward)r   r   r   FFN)__name__
__module____qualname__r   staticmethodr   r3   __classcell__r,   r,   r*   r-   r      s    
r   c                       s   e Zd ZdZ													
	ddedef fddZdefddZ	ddej	dej	dej	de
ej	ej	eej	 f fddZ  ZS )ConvEncoderzh
    Author: Speech Lab of DAMO Academy, Alibaba Group
    Convolution encoder in OpenNMT framework
    r   333333?Nr   TFr   r   speaker_encoderEAND/speaker_encoder!tf2torch_tensor_name_prefix_torchtf2torch_tensor_name_prefix_tfc                    s8  t    _|____|_|_|	_	|_
|
_ _|__|_|_|_t|trB|gj _n|_d_jD ]	} j|9  _qKt|_tj fdd_j	d urt| d }| | }t||fd_t|	_ jrt!|	_"d S d S )Nr   c              	      s8   t | dkrn j|  | dkrddS ddS )Nr   TF)r!   )r   r%   )lnumr   include_batchnormr#   r'   r$   r&   r,   r-   <lambda>y   s    
z&ConvEncoder.__init__.<locals>.<lambda>r   r   )#r   r   _output_size
num_layersr#   r$   r'   dropout_rateposition_encoder	out_unitsauxiliary_statesout_normr   out_residualr"   regularization_weightr>   r?   
isinstanceintr%   downsample_rater   Dropoutdropoutr   cnn_ar   r   r   out_paddingr   conv_outr	   
after_norm)r&   rE   r#   r$   r'   rF   rG   r   rI   rH   rJ   rK   rB   rL   r%   r>   r?   sr(   r)   r*   rA   r-   r   I   sP   



zConvEncoder.__init__returnc                 C   s   | j S r4   )r$   )r&   r,   r,   r-   output_size   s   zConvEncoder.output_sizer0   r1   prev_statesc                 C   s   |}| j d ur|  |}| jdkr| |}| |dd|\}}| jd ur/| | |}|dd}| jr=| 	|}| j
rD|| }||d fS )Nr   r   r   )rG   rF   rQ   rR   	transposerH   rT   rS   rJ   rU   rK   )r&   r0   r1   rY   inputsr2   _r,   r,   r-   r3      s   






zConvEncoder.forward)r   r;   Nr   TNFFFr   r   r<   r=   r4   )r5   r6   r7   __doc__strr   rN   rX   torchTensorr   r   r3   r9   r,   r,   r*   r-   r:   C   s>    
Hr:   )typingr   r   r   r   r   loggingr_   torch.nnr   r   Fnumpynp*funasr.models.transformer.utils.nets_utilsr   $funasr.models.transformer.layer_normr	   !funasr.models.encoder.abs_encoderr
   r   &funasr.models.transformer.utils.repeatr   Moduler   r:   r,   r,   r,   r-   <module>   s"    1