o
    
j:
                     @   sB   d dl Z d dl mZ d dlmZ d dlmZ G dd dejZdS )    N)nn)Decoder)sequence_maskc                       sF   e Zd ZdZ					d fdd	Zdd
dZdd Zdd Z  ZS )r   a  Uses glow decoder with some modifications.
    ::

        Squeeze -> ActNorm -> InvertibleConv1x1 -> AffineCoupling -> Unsqueeze

    Args:
        in_channels (int): channels of input tensor.
        hidden_channels (int): hidden decoder channels.
        kernel_size (int): Coupling block kernel size. (Wavenet filter kernel size.)
        dilation_rate (int): rate to increase dilation by each layer in a decoder block.
        num_flow_blocks (int): number of decoder blocks.
        num_coupling_layers (int): number coupling layers. (number of wavenet layers.)
        dropout_p (float): wavenet dropout rate.
        sigmoid_scale (bool): enable/disable sigmoid scaling in coupling layer.
                  Fr   c                    s2   t    t|||||||||	|
|| _|	| _d S N)super__init__GlowDecoderglow_decodern_sqz)selfin_channelshidden_channelskernel_sizedilation_ratenum_flow_blocksnum_coupling_layers	dropout_p
num_splitsnum_squeezesigmoid_scalec_in_channels	__class__ R/home/kuhnn/.local/lib/python3.10/site-packages/TTS/tts/layers/overflow/decoder.pyr
      s   

zDecoder.__init__Nc                 C   sP   |  ||| \}}}tt||d|j}| ||||\}}|||fS )a  
        Input shapes:
            - x:  :math:`[B, C, T]`
            - x_len :math:`[B]`
            - g: :math:`[B, C]`

        Output shapes:
            - x:  :math:`[B, C, T]`
            - x_len :math:`[B]`
            - logget_tot :math:`[B]`
           )
preprocessmaxtorch	unsqueezer   todtyper   )r   xx_lengreverse	x_max_lenx_mask
logdet_totr   r   r   forward8   s   
zDecoder.forwardc                 C   s\   |d urt j|| jdd| j }|d d d d d |f }t j|| jdd| j }|||fS )Nfloor)rounding_mode)r!   divr   )r   y	y_lengthsy_max_lengthr   r   r   r   I   s
   
zDecoder.preprocessc                 C   s   | j   d S r   )r   store_inverse)r   r   r   r   r3   P   s   zDecoder.store_inverse)r   r   r   Fr   )NF)	__name__
__module____qualname____doc__r
   r,   r   r3   __classcell__r   r   r   r   r      s    
r   )r!   r   TTS.tts.layers.glow_tts.decoderr   r   TTS.tts.utils.helpersr   Moduler   r   r   r   <module>   s
    