class_docstr: Building block for the Temporal Blocks of Masknet in ConvTasNet.
  
  Arguments
  ---------
  input_shape : tuple
      Expected shape of the input.
  out_channels : int
      Number of output channels.
  kernel_size : int
      The kernel size in the convolutions.
  stride : int
      Convolution stride in convolutional layers.
  padding : str
      The type of padding in the convolutional layers,
      (same, valid, causal). If "valid", no padding is performed.
  dilation : int
      Amount of dilation in convolutional layers.
  norm type : str
      The type of normalization, in ['gLN', 'cLN'].
  causal : bool
      To use causal or non-causal convolutions, in [True, False].
  
  Example
  -------
  >>> x = torch.randn(14, 100, 10)
  >>> DSconv = DepthwiseSeparableConv(x.shape, 10, 11, 1, 'same', 1)
  >>> y = DSconv(x)
  >>> y.shape
  torch.Size([14, 100, 10])
code: def __init__(
      self,
      input_shape,
      out_channels,
      kernel_size,
      stride,
      padding,
      dilation,
      norm_type="gLN",
      causal=False,
  ):
      super().__init__(input_shape=input_shape)
  
      batchsize, time, in_channels = input_shape
  
      # [M, K, H] -> [M, K, H]
      if causal:
          paddingval = dilation * (kernel_size - 1)
          padding = "causal"
          default_padding = "same"
      else:
          default_padding = 0
  
      self.append(
          sb.nnet.CNN.Conv1d,
          out_channels=in_channels,
          kernel_size=kernel_size,
          stride=stride,
          padding=padding,
          dilation=dilation,
          groups=in_channels,
          bias=False,
          layer_name="conv_0",
          default_padding=default_padding,
      )
  
      if causal:
          self.append(Chomp1d(paddingval), layer_name="chomp")
  
      self.append(nn.PReLU(), layer_name="act")
      self.append(choose_norm(norm_type, in_channels), layer_name="act")
  
      # [M, K, H] -> [M, K, B]
      self.append(
          sb.nnet.CNN.Conv1d,
          out_channels=out_channels,
          kernel_size=1,
          bias=False,
          layer_name="conv_1",
      )
  
imports: import torch
  import torch.nn
  import speechbrain
  import torch.nn.functional
  from speechbrain.processing.signal_processing import overlap_and_add
label_desc: Use image node_id 1 to create a new DepthwiseSeparableConv object from inherited base classes: sb.nnet.containers with example: obj = DepthwiseSeparableConv(input_shape, out_channels, kernel_size, stride, padding, dilation, norm_type, causal)