class_docstr: This function implements SincConv (SincNet).
  
  M. Ravanelli, Y. Bengio, "Speaker Recognition from raw waveform with
  SincNet", in Proc. of  SLT 2018 (https://arxiv.org/abs/1808.00158)
  
  Arguments
  ---------
  input_shape : tuple
      The shape of the input. Alternatively use ``in_channels``.
  in_channels : int
      The number of input channels. Alternatively use ``input_shape``.
  out_channels : int
      It is the number of output channels.
  kernel_size: int
      Kernel size of the convolutional filters.
  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.
  groups : int
      This option specifies the convolutional groups. See torch.nn
      documentation for more information.
  bias : bool
      If True, the additive bias b is adopted.
  sample_rate : int,
      Sampling rate of the input signals. It is only used for sinc_conv.
  min_low_hz : float
      Lowest possible frequency (in Hz) for a filter. It is only used for
      sinc_conv.
  min_low_hz : float
      Lowest possible value (in Hz) for a filter bandwidth.
  
  Example
  -------
  >>> inp_tensor = torch.rand([10, 16000])
  >>> conv = SincConv(input_shape=inp_tensor.shape, out_channels=25, kernel_size=11)
  >>> out_tensor = conv(inp_tensor)
  >>> out_tensor.shape
  torch.Size([10, 16000, 25])
code: def __init__(
      self,
      out_channels,
      kernel_size,
      input_shape=None,
      in_channels=None,
      stride=1,
      dilation=1,
      padding="same",
      padding_mode="reflect",
      sample_rate=16000,
      min_low_hz=50,
      min_band_hz=50,
  ):
      super().__init__()
      self.in_channels = in_channels
      self.out_channels = out_channels
      self.kernel_size = kernel_size
      self.stride = stride
      self.dilation = dilation
      self.padding = padding
      self.padding_mode = padding_mode
      self.sample_rate = sample_rate
      self.min_low_hz = min_low_hz
      self.min_band_hz = min_band_hz
  
      # input shape inference
      if input_shape is None and self.in_channels is None:
          raise ValueError(
              "Must provide one of input_shape or in_channels"
          )
  
      if self.in_channels is None:
          self.in_channels = self._check_input_shape(input_shape)
  
      if self.out_channels % self.in_channels != 0:
          raise ValueError(
              "Number of output channels must be divisible by in_channels"
          )
  
      # Initialize Sinc filters
      self._init_sinc_conv()
  
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 SincConv object from inherited base classes: nn with example: obj = SincConv(out_channels, kernel_size, input_shape, in_channels, stride, dilation, padding, padding_mode, sample_rate, min_low_hz, min_band_hz)