class_docstr: This class is used to instantiate the complex
  layer-normalization as introduced by "Deep Complex Networks",
  Trabelsi C. et al.
  
  Arguments
  ---------
  input_shape : tuple
      Expected shape of the input.
  input_size : int
      Expected size of the input dimension.
  dim : int, optional
      It defines the axis that should be normalized. It usually correspond to
      the channel dimension (default -1).
  eps : float, optional
      Term used to stabilize operation (default 1e-4).
  scale : bool, optional,
      It defines if scaling should be used or not. It is
      equivalent to the real-valued batchnormalization scaling (default True).
  center : bool, optional
      It defines if centering should be used or not. It is
      equivalent to the real-valued batchnormalization centering
      (default True).
  
  Example
  -------
  >>> inp_tensor = torch.rand([10, 16, 30])
  >>> CBN = CLayerNorm(input_shape=inp_tensor.shape)
  >>> out_tensor = CBN(inp_tensor)
  >>> out_tensor.shape
  torch.Size([10, 16, 30])
class_docstr_tok: ["This","class","is","used","to","instantiate","the","complex","layer-normalization","as","introduced","by","``","Deep","Complex","Networks","''",",","Trabelsi","C.","et","al",".","Arguments","--","--","--","--","-","input_shape",":","tuple","Expected","shape","of","the","input",".","input_size",":","int","Expected","size","of","the","input","dimension",".","dim",":","int",",","optional","It","defines","the","axis","that","should","be","normalized",".","It","usually","correspond","to","the","channel","dimension","(","default","-1",")",".","eps",":","float",",","optional","Term","used","to","stabilize","operation","(","default","1e-4",")",".","scale",":","bool",",","optional",",","It","defines","if","scaling","should","be","used","or","not",".","It","is","equivalent","to","the","real-valued","batchnormalization","scaling","(","default","True",")",".","center",":","bool",",","optional","It","defines","if","centering","should","be","used","or","not",".","It","is","equivalent","to","the","real-valued","batchnormalization","centering","(","default","True",")",".","Example","--","--","--","-",">",">",">","inp_tensor","=","torch.rand","(","[","10",",","16",",","30","]",")",">",">",">","CBN","=","CLayerNorm","(","input_shape=inp_tensor.shape",")",">",">",">","out_tensor","=","CBN","(","inp_tensor",")",">",">",">","out_tensor.shape","torch.Size","(","[","10",",","16",",","30","]",")"]
docstr: Checks the input and returns the number of complex values.
          
docstr_tok: ["Checks","the","input","and","returns","the","number","of","complex","values","."]
code: def _check_input(self, input_shape):
      """Checks the input and returns the number of complex values."""
  
      if input_shape[self.dim] % 2 == 0:
          return input_shape[self.dim] // 2
      else:
          msg = (
              "ComplexBatchNorm dim must be dividble by 2 ! Got "
              + str(input_shape[self.dim])
          )
          raise ValueError(msg)
  
imports: import torch
  from torch.nn import Parameter
  import numpy
  from speechbrain.nnet.complex_networks.c_ops import multi_mean
label_desc: Use image node_id 4 for calling the CLayerNorm obj's underlying member method code with example usage: obj._check_input(input_shape) and returns: unknown