o
    i                     @   s2   d dl Z d dlm  mZ G dd de jjZdS )    Nc                       sV   e Zd ZdZ			ddedededed	ef
 fd
dZdd Zdd Z	dd Z
  ZS )CTCzCTC module.

    Args:
        odim: dimension of outputs
        encoder_output_size: number of encoder projection units
        dropout_rate: dropout rate (0.0 ~ 1.0)
        reduce: reduce the CTC loss into a scalar
            Tr   odimencoder_output_sizedropout_ratereduceblank_idc                    sF   t    |}|| _tj||| _|| _tjjd|d| _	|| _
d S )Nnone)	reductionblank)super__init__r   torchnnLinearctc_lor   CTCLossctc_lossr   )selfr   r   r   r   r   kwargseprojs	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/fun_asr_nano/ctc.pyr      s   
	
zCTC.__init__c                 C      t j| |ddS )zsoftmax of frame activations

        Args:
            Tensor hs_pad: 3d tensor (B, Tmax, eprojs)
        Returns:
            torch.Tensor: softmax applied 3d tensor (B, Tmax, odim)
           dim)Fsoftmaxr   r   hs_padr   r   r   r           zCTC.softmaxc                 C   r   )zlog_softmax of frame activations

        Args:
            Tensor hs_pad: 3d tensor (B, Tmax, eprojs)
        Returns:
            torch.Tensor: log softmax applied 3d tensor (B, Tmax, odim)
        r   r   )r   log_softmaxr   r!   r   r   r   r$   *   r#   zCTC.log_softmaxc                 C   r   )zargmax of frame activations

        Args:
            torch.Tensor hs_pad: 3d tensor (B, Tmax, eprojs)
        Returns:
            torch.Tensor: argmax applied 2d tensor (B, Tmax)
        r   r   )r   argmaxr   r!   r   r   r   r%   4   r#   z
CTC.argmax)r   Tr   )__name__
__module____qualname____doc__intfloatboolr   r    r$   r%   __classcell__r   r   r   r   r      s&    

r   )r   torch.nn.functionalr   
functionalr   Moduler   r   r   r   r   <module>   s    