class_docstr: This function implements complex-valued 1d convolution.
  
  Arguments
  ---------
  out_channels : int
      Number of output channels. Please note
      that these are complex-valued neurons. If 256
      channels are specified, the output dimension
      will be 512.
  kernel_size : int
      Kernel size of the convolutional filters.
  stride : int, optional
      Stride factor of the convolutional filters (default 1).
  dilation : int, optional
      Dilation factor of the convolutional filters (default 1).
  padding : str, optional
      (same, valid, causal). If "valid", no padding is performed.
      If "same" and stride is 1, output shape is same as input shape.
      "causal" results in causal (dilated) convolutions. (default "same")
  padding_mode : str, optional
      This flag specifies the type of padding. See torch.nn documentation
      for more information (default "reflect").
  groups : int, optional
      This option specifies the convolutional groups. See torch.nn
      documentation for more information (default 1).
  bias : bool, optional
      If True, the additive bias b is adopted (default True).
  init_criterion : str, optional
      (glorot, he).
      This parameter controls the initialization criterion of the weights.
      It is combined with weights_init to build the initialization method of
      the complex-valued weights. (default "glorot")
  weight_init : str, optional
      (complex, unitary).
      This parameter defines the initialization procedure of the
      complex-valued weights. "complex" will generate random complex-valued
      weights following the init_criterion and the complex polar form.
      "unitary" will normalize the weights to lie on the unit circle. (default "complex")
      More details in: "Deep Complex Networks", Trabelsi C. et al.
  
  Example
  -------
  >>> inp_tensor = torch.rand([10, 16, 30])
  >>> cnn_1d = CConv1d(
  ...     input_shape=inp_tensor.shape, out_channels=12, kernel_size=5
  ... )
  >>> out_tensor = cnn_1d(inp_tensor)
  >>> out_tensor.shape
  torch.Size([10, 16, 24])
class_docstr_tok: ["This","function","implements","complex-valued","1d","convolution",".","Arguments","--","--","--","--","-","out_channels",":","int","Number","of","output","channels",".","Please","note","that","these","are","complex-valued","neurons",".","If","256","channels","are","specified",",","the","output","dimension","will","be","512.","kernel_size",":","int","Kernel","size","of","the","convolutional","filters",".","stride",":","int",",","optional","Stride","factor","of","the","convolutional","filters","(","default","1",")",".","dilation",":","int",",","optional","Dilation","factor","of","the","convolutional","filters","(","default","1",")",".","padding",":","str",",","optional","(","same",",","valid",",","causal",")",".","If","``","valid","''",",","no","padding","is","performed",".","If","``","same","''","and","stride","is","1",",","output","shape","is","same","as","input","shape",".","``","causal","''","results","in","causal","(","dilated",")","convolutions",".","(","default","``","same","''",")","padding_mode",":","str",",","optional","This","flag","specifies","the","type","of","padding",".","See","torch.nn","documentation","for","more","information","(","default","``","reflect","''",")",".","groups",":","int",",","optional","This","option","specifies","the","convolutional","groups",".","See","torch.nn","documentation","for","more","information","(","default","1",")",".","bias",":","bool",",","optional","If","True",",","the","additive","bias","b","is","adopted","(","default","True",")",".","init_criterion",":","str",",","optional","(","glorot",",","he",")",".","This","parameter","controls","the","initialization","criterion","of","the","weights",".","It","is","combined","with","weights_init","to","build","the","initialization","method","of","the","complex-valued","weights",".","(","default","``","glorot","''",")","weight_init",":","str",",","optional","(","complex",",","unitary",")",".","This","parameter","defines","the","initialization","procedure","of","the","complex-valued","weights",".","``","complex","''","will","generate","random","complex-valued","weights","following","the","init_criterion","and","the","complex","polar","form",".","``","unitary","''","will","normalize","the","weights","to","lie","on","the","unit","circle",".","(","default","``","complex","''",")","More","details","in",":","``","Deep","Complex","Networks","''",",","Trabelsi","C.","et","al",".","Example","--","--","--","-",">",">",">","inp_tensor","=","torch.rand","(","[","10",",","16",",","30","]",")",">",">",">","cnn_1d","=","CConv1d","(","...","input_shape=inp_tensor.shape",",","out_channels=12",",","kernel_size=5","...",")",">",">",">","out_tensor","=","cnn_1d","(","inp_tensor",")",">",">",">","out_tensor.shape","torch.Size","(","[","10",",","16",",","24","]",")"]
docstr: Returns the output of the convolution.
  
  Arguments
  ---------
  x : torch.Tensor
      (batch, time, channel).
      Input to convolve. 3d or 4d tensors are expected.
docstr_tok: ["Returns","the","output","of","the","convolution",".","Arguments","--","--","--","--","-","x",":","torch.Tensor","(","batch",",","time",",","channel",")",".","Input","to","convolve",".","3d","or","4d","tensors","are","expected","."]
code: def forward(self, x):
      """Returns the output of the convolution.
  
      Arguments
      ---------
      x : torch.Tensor
          (batch, time, channel).
          Input to convolve. 3d or 4d tensors are expected.
  
      """
      # (batch, channel, time)
      x = x.transpose(1, -1)
      if self.padding == "same":
          x = self._manage_padding(
              x, self.kernel_size, self.dilation, self.stride
          )
  
      elif self.padding == "causal":
          num_pad = (self.kernel_size - 1) * self.dilation
          x = F.pad(x, (num_pad, 0))
  
      elif self.padding == "valid":
          pass
  
      else:
          raise ValueError(
              "Padding must be 'same', 'valid' or 'causal'. Got %s."
              % (self.padding)
          )
  
      wx = complex_conv_op(
          x,
          self.real_weight,
          self.imag_weight,
          self.b,
          stride=self.stride,
          padding=0,
          dilation=self.dilation,
          conv1d=True,
      )
  
      wx = wx.transpose(1, -1)
      return wx
  
imports: import torch
  import torch.nn
  import logging
  import torch.nn.functional
  from speechbrain.nnet.CNN import get_padding_elem
  from speechbrain.nnet.complex_networks.c_ops import unitary_init, complex_init, affect_conv_init, complex_conv_op
label_desc: Use image node_id 2 for calling the CConv1d obj's underlying member method code with example usage: obj.forward(x) and returns: wx