o
    i
                     @   s4   d Z ddlmZmZ ddlZG dd dejjZdS )z+VGG2L module definition for custom encoder.    )TupleUnionNc                       s   e Zd ZdZddededejjf fddZdej	d	ej	d
e
eej	ej	f eeej	ej	f ej	f f fddZd	ej	d
ej	fddZ  ZS )VGG2LzVGG2L module for custom encoder.

    Args:
        idim: Input dimension.
        odim: Output dimension.
        pos_enc: Positional encoding class.

    Nidimodimpos_encc                    s   t    tjtjjddddddtj tjjddddddtj tjdtjjddddddtj tjjddddddtj tjd
| _|durftjtj	d|d	 d	  ||| _
dS tj	d|d	 d	  || _
dS )
zConstruct a VGG2L object.   @      )stridepadding)r
         )r   r   Nr   )super__init__torchnn
SequentialConv2dReLU	MaxPool2dvgg2lLinearoutput)selfr   r   r   	__class__ `/home/ubuntu/.local/lib/python3.10/site-packages/espnet/nets/pytorch_backend/transducer/vgg2l.pyr      s$   



 zVGG2L.__init__feats
feats_maskreturnc           	      C   sn   | d}| |}| \}}}}| |dd |||| }|dur1| |}||fS |}||fS )az  Forward VGG2L bottleneck.

        Args:
            feats: Feature sequences. (B, F, D_feats)
            feats_mask: Mask of feature sequences. (B, 1, F)

        Returns:
            vgg_output: VGG output sequences.
                   (B, sub(F), D_out) or ((B, sub(F), D_out), (B, sub(F), D_att))
            vgg_mask: Mask of VGG output sequences. (B, 1, sub(F))

        r   r   N)	unsqueezer   sizer   	transpose
contiguousviewcreate_new_mask)	r   r   r    
vgg_outputbctfvgg_maskr   r   r   forward*   s   


zVGG2L.forwardc                 C   s   | d| dd  }|ddddd|f dddddddf }| d| dd  }|ddddd|f dddddddf }|S )zCreate a subsampled mask of feature sequences.

        Args:
            feats_mask: Mask of feature sequences. (B, 1, F)

        Returns:
            vgg_mask: Mask of VGG2L output sequences. (B, 1, sub(F))

        r   r
   N)r#   )r   r    
vgg1_t_lenr-   
vgg2_t_lenr   r   r   r'   L   s
   
22zVGG2L.create_new_mask)N)__name__
__module____qualname____doc__intr   r   Moduler   Tensorr   r   r.   r'   __classcell__r   r   r   r   r      s     	
"r   )r4   typingr   r   r   r   r6   r   r   r   r   r   <module>   s    