o
    ߥi                     @   sP   d dl mZmZmZ d dlZd dlmZ G dd dejZG dd dej	Z
dS )    )absolute_importdivisionprint_functionNc                       s,   e Zd ZdZ fddZ fddZ  ZS )
CLayerNormz!Channel-wise layer normalization.c                    s   t t| j|i | d S N)superr   __init__)selfargskwargs	__class__ a/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/audio/separation/layer_norm.pyr      s   zCLayerNorm.__init__c                    sH   |  dkrtd| jt|dd}t |}t|dd}|S )\Forward function.

        Args:
            sample: [batch_size, channels, length]
           "{} only accept 3-D tensor as input      )dimRuntimeErrorformat__name__torch	transposer   forward)r	   sampler   r   r   r      s   zCLayerNorm.forward)r   
__module____qualname____doc__r   r   __classcell__r   r   r   r   r      s    r   c                       s2   e Zd ZdZd	 fdd	Zdd Zdd Z  ZS )

GLayerNormz&Global Layer Normalization for TasNet.h㈵>c                    sJ   t t|   || _|| _tt|| _	tt|| _
|   d S r   )r   r!   r   epsnorm_dimnn	Parameterr   Tensorgammabetareset_parameters)r	   channelsr#   r   r   r   r   &   s   zGLayerNorm.__init__c                 C   s    t j| j t j| j d S r   )r%   initones_r(   zeros_r)   )r	   r   r   r   r*   .   s   zGLayerNorm.reset_parametersc                 C   s   |  dkrtd| jt|dd}tj|ddd}tj|| d ddd}|| t|| j  | j	 | j
 }t|dd}|S )r   r   r   r   r   )r   r   T)keepdim)r   r   r   r   r   r   meansqrtr#   r(   r)   )r	   r   r0   varr   r   r   r   2   s$   zGLayerNorm.forward)r"   )r   r   r   r   r   r*   r   r    r   r   r   r   r!   #   s
    r!   )
__future__r   r   r   r   torch.nnr%   	LayerNormr   Moduler!   r   r   r   r   <module>   s
   