o
    }oi                     @   sd   d dl Z d dl mZ d dlmZmZmZ d dlmZmZm	Z	m
Z
mZ dgZG dd dejeeZdS )    N)nn)SerializationTyping	typecheck)
LabelsTypeLengthsTypeLogprobsTypeLossType
NeuralTypeCTCLossc                       sP   e Zd Zedd Zedd Zd fdd	Zd	d
 Ze  fddZ	  Z
S )r   c                 C   s6   t dt t dt t tdt t tdt dS )z-Input types definitions for CTCLoss.
        )BTD)r   r   r   	log_probstargetsinput_lengthstarget_lengths)r
   r   r   tupler   self r   S/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/asr/losses/ctc.pyinput_types   s
   

zCTCLoss.input_typesc                 C   s   dt t diS )zYOutput types definitions for CTCLoss.
        loss:
            NeuralType(None)
        loss)elements_type)r
   r	   r   r   r   r   output_types%   s   zCTCLoss.output_typesF
mean_batchc                    sb   || _ |dvrtd|| _|dks|dkrd}d| _n	|dv r%|}d| _t j| j ||d	 d S )
N)nonemeansumr   mean_volumez?`reduction` must be one of [mean, sum, mean_batch, mean_volume]r   r!   r   T)r    r   r   F)blank	reductionzero_infinity)_blank
ValueErrorconfig_reduction_apply_reductionsuper__init__)r   num_classesr$   r#   ctc_reduction	__class__r   r   r*   -   s   zCTCLoss.__init__c                 C   s4   | j dkr| }|S | j dkr| |  }|S )Nr   r!   )r'   r   r    )r   lossesr   r   r   r   reduce<   s   

zCTCLoss.reducec                    sN   |  }|  }|  }|dd}t j||||d}| jr%| ||}|S )N   r   r   )long	transposer)   forwardr(   r0   )r   r   r   r   r   r   r-   r   r   r4   D   s   zCTCLoss.forward)Fr   )__name__
__module____qualname__propertyr   r   r*   r0   r   r4   __classcell__r   r   r-   r   r      s    


)torchr   nemo.core.classesr   r   r   nemo.core.neural_typesr   r   r   r	   r
   __all__r   r   r   r   r   <module>   s   