o
    iW                     @   st   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	m
Z
 d dlmZ d dlmZmZmZ G dd	 d	eZdS )
    )TupleN)check_argument_types)
AbsEncoder)get_vgg2l_odim)make_pad_mask)RNNRNNPVGG2Lc                       s   e Zd ZdZ								dded	ed
edededede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
jf fddZ  ZS )VGGRNNEncodera  VGGRNNEncoder class.

    Args:
        input_size: The number of expected features in the input
        bidirectional: If ``True`` becomes a bidirectional LSTM
        use_projection: Use projection layer or not
        num_layers: Number of recurrent layers
        hidden_size: The number of hidden features
        output_size: The number of output features
        dropout: dropout probability

    lstmT   @             
input_sizernn_typebidirectionaluse_projection
num_layershidden_sizeoutput_sizedropout
in_channelc
                    s   t  sJ t   || _|| _|| _|| _|dvr!td| tj	|d tj
d}
|r/dnd| }|rOtjt|	tt||	d||||
||dg| _d S tjt|	tt||	d|||||dg| _d S )	N>   grur   zNot supported rnn_type=r   )dtypeb )r   )typ)r   super__init___output_sizer   r   r   
ValueErrornponesint64torchnn
ModuleListr	   r   r   encr   )selfr   r   r   r   r   r   r   r   r   	subsample	__class__ W/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/asr/encoder/vgg_rnn_encoder.pyr      sH   





zVGGRNNEncoder.__init__returnc                 C   s   | j S N)r    )r)   r-   r-   r.   r   R   s   zVGGRNNEncoder.output_sizeNxs_padilensprev_statesc                 C   s   |d u rd gt | j }t |t | jksJ g }t| j|D ]\}}||||d\}}}|| q| jrA|t||dd n
|t||dd}|||fS )N)
prev_stater   r   )lenr(   zipappendr   masked_fill_r   masked_fill)r)   r1   r2   r3   current_statesmoduler4   statesr-   r-   r.   forwardU   s   
zVGGRNNEncoder.forward)r   TTr   r   r   r   r   r0   )__name__
__module____qualname____doc__intstrboolfloatr   r   r%   Tensorr   r=   __classcell__r-   r-   r+   r.   r
      sP    	
7r
   )typingr   numpyr"   r%   	typeguardr   espnet2.asr.encoder.abs_encoderr   espnet.nets.e2e_asr_commonr   &espnet.nets.pytorch_backend.nets_utilsr   (espnet.nets.pytorch_backend.rnn.encodersr   r   r	   r
   r-   r-   r-   r.   <module>   s    