o
    wi                     @   sL   d dl Z d dlmZmZ d dlmZmZmZ d dlm	Z	 G dd deZ
dS )    N)Loss	typecheck)LossTypeNormalDistributionSamplesTypeVoidType)
NeuralTypec                   @   s<   e Zd ZdZedd Zedd Ze dddd	Zd
S )WaveGlowLossz3 A Loss module that computes loss for WaveGlow
    c                 C   s0   t dt t dt gt t dgt dddS )N)B	flowgroupTelements_typeT)optional)z
log_s_listlog_det_W_listsigma)r   r   r   self r   e/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/nemo/collections/tts/losses/waveglowloss.pyinput_types   s
   
zWaveGlowLoss.input_typesc                 C   s   dt t diS )Nlossr   )r   r   r   r   r   r   output_types"   s   zWaveGlowLoss.output_typesg      ?)r   c          
      C   s   t |D ]\}}|dkrt|}|| }q|t| }||| 7 }qt|| d| |  | | }	|	|d|d |d  S )Nr         )	enumeratetorchsumsize)
r   r   r   r   r   ilog_slog_s_totallog_det_W_totalr   r   r   r   forward(   s   

""zWaveGlowLoss.forwardN)	__name__
__module____qualname____doc__propertyr   r   r   r$   r   r   r   r   r      s    

r   )r   nemo.core.classesr   r   nemo.core.neural_types.elementsr   r   r   "nemo.core.neural_types.neural_typer   r   r   r   r   r   <module>   s
   