o
    ´©i  ã                   @   s*   d dl Z d dlmZ G dd„ dejƒZdS )é    Nc                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )ÚMossFormerDecoderaÄ  A decoder layer that consists of ConvTranspose1d.

    Arguments
    ---------
    kernel_size : int
        Length of filters.
    in_channels : int
        Number of  input channels.
    out_channels : int
        Number of output channels.


    Example
    ---------
    >>> x = torch.randn(2, 100, 1000)
    >>> decoder = Decoder(kernel_size=4, in_channels=100, out_channels=1)
    >>> h = decoder(x)
    >>> h.shape
    torch.Size([2, 1003])
    c                    s   t t| ƒj|i |¤Ž d S )N)Úsuperr   Ú__init__)ÚselfÚargsÚkwargs©Ú	__class__© ú_/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/mossformer/mossformer_decoder.pyr      s   zMossFormerDecoder.__init__c                    sr   |  ¡ dvrtd | j¡ƒ‚tƒ  |  ¡ dkr|nt |d¡¡}t |¡  ¡ dkr2tj|dd}|S t |¡}|S )a  Return the decoded output.

        Arguments
        ---------
        x : torch.Tensor
            Input tensor with dimensionality [B, N, L].
                where, B = Batchsize,
                       N = number of filters
                       L = time points
        )é   é   z{} accept 3/4D tensor as inputr   é   )Údim)	r   ÚRuntimeErrorÚformatÚ__name__r   ÚforwardÚtorchÚ	unsqueezeÚsqueeze)r   Úxr   r
   r   r      s   $
ÿzMossFormerDecoder.forward)r   Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r
   r
   r   r   r      s    r   )r   Útorch.nnÚnnÚConvTranspose1dr   r
   r
   r
   r   Ú<module>   s    