o
    i	                     @   sH   d dl mZmZ d dlZd dlmZ d dlmZ G dd dejj	Z
dS )    )OptionalTupleN)check_argument_types)make_pad_maskc                
       sh   e Zd Z			ddededef fddZd	d
 Z	ddejdejde	eje
ej f fddZ  ZS )LabelAggregate      T
win_length
hop_lengthcenterc                    s*   t  sJ t   || _|| _|| _d S N)r   super__init__r	   r
   r   )selfr	   r
   r   	__class__ T/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/layers/label_aggregation.pyr   
   s
   


zLabelAggregate.__init__c                 C   s   d| j  d| j d| j dS )Nzwin_length=z, hop_length=z	, center=z, )r	   r
   r   )r   r   r   r   
extra_repr   s   
zLabelAggregate.extra_reprNinputilensreturnc           
      C   s  | d}| d}| d}| jro| jd }|d|  }tjj|dd||fdd}|dd|d| ddf |ddd|ddf< |dd|d|  || ddf |dd|| |ddf< || j | j d }|||| j|f|| | j| |df}t	|j
ddd| jd }| }|dur| jr| jd }|d|  }|| j | j d }	|t|	|dd ||	fS d}	||	fS )	zLabelAggregate forward function.

        Args:
            input: (Batch, Nsamples, Label_dim)
            ilens: (Batch)
        Returns:
            output: (Batch, Frames, Label_dim)

        r         constantNF)dimkeepdimg        )sizer   r	   torchnn
functionalpadr
   
as_stridedgtsumfloatmasked_fill_r   )
r   r   r   bs
max_length	label_dimr!   nframeoutputolensr   r   r   forward   s6   



4 
zLabelAggregate.forward)r   r   Tr   )__name__
__module____qualname__intboolr   r   r   Tensorr   r   r-   __classcell__r   r   r   r   r   	   s(    r   )typingr   r   r   	typeguardr   &espnet.nets.pytorch_backend.nets_utilsr   r   Moduler   r   r   r   r   <module>   s
    