class_docstr: Channel-wise Layer Normalization (cLN).
docstr: Forward.
  
  Args:
      y: [M, N, K], M is batch size, N is channel size, K is length
  
  Returns:
      cLN_y: [M, N, K]
docstr_tok: ["Forward",".","Args",":","y",":","[","M",",","N",",","K","]",",","M","is","batch","size",",","N","is","channel","size",",","K","is","length","Returns",":","cLN_y",":","[","M",",","N",",","K","]"]
code: def forward(self, y):
      """Forward.
  
      Args:
          y: [M, N, K], M is batch size, N is channel size, K is length
  
      Returns:
          cLN_y: [M, N, K]
      """
  
      assert y.dim() == 3
  
      if self.shape == "BTD":
          y = y.transpose(1, 2).contiguous()
  
      mean = torch.mean(y, dim=1, keepdim=True)  # [M, 1, K]
      var = torch.var(
          y, dim=1, keepdim=True, unbiased=False
      )  # [M, 1, K]
      cLN_y = (
          self.gamma * (y - mean) / torch.pow(var + EPS, 0.5)
          + self.beta
      )
  
      if self.shape == "BTD":
          cLN_y = cLN_y.transpose(1, 2).contiguous()
  
      return cLN_y
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from espnet2.enh.layers.adapt_layers import make_adapt_layer
label_desc: Use image node_id 3 for calling the ChannelwiseLayerNorm obj's underlying member method code with example usage: obj.forward(y) and returns: cLN_y