o
    ¡¿¯i&  ã                   @   s$   d Z ddlZG dd„ dejjƒZdS )zYVITS-related loss modules.

This code is based on https://github.com/jaywalnut310/vits.

é    Nc                   @   s>   e Zd ZdZdejdejdejdejdejdejfdd	„Zd
S )ÚKLDivergenceLosszKL divergence loss.Úz_pÚlogs_qÚm_pÚlogs_pÚz_maskÚreturnc                 C   sv   |  ¡ }|  ¡ }|  ¡ }|  ¡ }|  ¡ }|| d }|d|| d  t d| ¡ 7 }t || ¡}|t |¡ }|S )aä  Calculate KL divergence loss.

        Args:
            z_p (Tensor): Flow hidden representation (B, H, T_feats).
            logs_q (Tensor): Posterior encoder projected scale (B, H, T_feats).
            m_p (Tensor): Expanded text encoder projected mean (B, H, T_feats).
            logs_p (Tensor): Expanded text encoder projected scale (B, H, T_feats).
            z_mask (Tensor): Mask tensor (B, 1, T_feats).

        Returns:
            Tensor: KL divergence loss.

        g      à?é   g       À)ÚfloatÚtorchÚexpÚsum)Úselfr   r   r   r   r   ÚklÚloss© r   úM/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/gan_tts/vits/loss.pyÚforward   s   "zKLDivergenceLoss.forwardN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚTensorr   r   r   r   r   r      s    þýüûúùr   )r   r   ÚnnÚModuler   r   r   r   r   Ú<module>   s   