o
    
jd                     @   sT   d dl Z d dlmZ G dd de jjZG dd de jjZG dd de jjZdS )	    N)
functionalc                       s&   e Zd Zd fdd	Zdd Z  ZS )	Stretch2dnearestc                    s    t    || _|| _|| _d S )N)super__init__x_scaley_scalemode)selfr   r   r	   	__class__ N/home/kuhnn/.local/lib/python3.10/site-packages/TTS/vocoder/layers/upsample.pyr      s   

zStretch2d.__init__c                 C   s   t j|| j| jf| jdS )z~
        x (Tensor): Input tensor (B, C, F, T).
        Tensor: Interpolated tensor (B, C, F * y_scale, T * x_scale),
        )scale_factorr	   )Finterpolater   r   r	   )r
   xr   r   r   forward   s   zStretch2d.forward)r   __name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    r   c                       s0   e Zd Zdi dddf fdd	Zdd Z  ZS )	UpsampleNetworkNr      Fc                    s   t    || _tj | _|D ]a}t|d|}|  j|g7  _|d d dks,J d|d d }	||d d f}
|rC|	|d f}n|	|f}tjjdd|
|dd}|  j|g7  _|d urqt	tj|di |}|  j|g7  _qd S )Nr      r   z.Not support even number freq axis kernel size.F)kernel_sizepaddingbiasr   )
r   r   use_causal_convtorchnn
ModuleList	up_layersr   Conv2dgetattr)r
   upsample_factorsnonlinear_activationnonlinear_activation_paramsinterpolate_modefreq_axis_kernel_sizer   scalestretchfreq_axis_paddingr   r   conv	nonlinearr   r   r   r      s&   
	zUpsampleNetwork.__init__c                 C   s(   | d}| jD ]}||}q|dS )zG
        c :  (B, C, T_in).
        Tensor: (B, C, T_upsample)
        r   )	unsqueezer#   squeeze)r
   cfr   r   r   r   7   s   



zUpsampleNetwork.forwardr   r   r   r   r   r      s    !r   c                       s4   e Zd Zdi dddddf fdd	Zd	d
 Z  ZS )ConvUpsampleNr   r   P   r   Fc	           
         sf   t    || _|o|dk| _|r|d nd| d }	tjj|||	dd| _t||||||d| _	d S )Nr   r   r   F)r   r   )r&   r'   r(   r)   r*   r   )
r   r   aux_context_windowr   r    r!   Conv1dconv_inr   upsample)
r
   r&   r'   r(   r)   r*   aux_channelsr6   r   r   r   r   r   r   D   s   
zConvUpsample.__init__c                 C   s<   |  |}| jr|ddddd| j f n|}| |S )zH
        c : (B, C, T_in).
        Tensor: (B, C, T_upsampled),
        N)r8   r   r6   r9   )r
   r2   c_r   r   r   r   _   s   
(
zConvUpsample.forwardr   r   r   r   r   r4   B   s    r4   )	r    torch.nnr   r   r!   Moduler   r   r4   r   r   r   r   <module>   s
    .