class_docstr: This class implements the depthwise separable 1d convolution.
  
  First, a channel-wise convolution is applied to the input
  Then, a point-wise convolution to project the input to output
  
  Arguments
  ---------
  out_channels : int
      It is the number of output channels.
  kernel_size : int
      Kernel size of the convolutional filters.
  input_shape : tuple
      Expected shape of the input.
  stride : int
      Stride factor of the convolutional filters. When the stride factor > 1,
      a decimation in time is performed.
  dilation : int
      Dilation factor of the convolutional filters.
  padding : str
      (same, valid, causal). If "valid", no padding is performed.
      If "same" and stride is 1, output shape is the same as the input shape.
      "causal" results in causal (dilated) convolutions.
  padding_mode : str
      This flag specifies the type of padding. See torch.nn documentation
      for more information.
  bias : bool
      If True, the additive bias b is adopted.
  
  Example
  -------
  >>> inp = torch.randn([8, 120, 40])
  >>> conv = DepthwiseSeparableConv1d(256, 3, input_shape=inp.shape)
  >>> out = conv(inp)
  >>> out.shape
  torch.Size([8, 120, 256])
code: def __init__(
      self,
      out_channels,
      kernel_size,
      input_shape,
      stride=1,
      dilation=1,
      padding="same",
      bias=True,
  ):
      super().__init__()
  
      assert len(input_shape) == 3, "input must be a 3d tensor"
  
      bz, time, chn = input_shape
  
      self.depthwise = Conv1d(
          chn,
          kernel_size,
          input_shape=input_shape,
          stride=stride,
          dilation=dilation,
          padding=padding,
          groups=chn,
          bias=bias,
      )
  
      self.pointwise = Conv1d(
          out_channels,
          kernel_size=1,
          input_shape=input_shape,
      )
  
imports: import math
  import torch
  import logging
  import numpy
  import torch.nn
  import torch.nn.functional
  import torchaudio
  from typing import Tuple
  from speechbrain.processing.signal_processing import gabor_impulse_response, gabor_impulse_response_legacy_complex
label_desc: Use image node_id 1 to create a new DepthwiseSeparableConv1d object from inherited base classes: nn with example: obj = DepthwiseSeparableConv1d(out_channels, kernel_size, input_shape, stride, dilation, padding, bias)