class_docstr: This class implements a learnable Gaussian lowpass pooling from
  
  Neil Zeghidour, Olivier Teboul, F{'e}lix de Chaumont Quitry & Marco Tagliasacchi, "LEAF: A LEARNABLE FRONTEND
  FOR AUDIO CLASSIFICATION", in Proc. of ICLR 2021 (https://arxiv.org/abs/2101.08596)
  
  Arguments
  ---------
  in_channels : int
      The number of input channels.
  kernel_size: int
      Kernel size of the gaussian lowpass filters.
  stride : int
      Stride factor of the convolutional filters. When the stride factor > 1,
      a decimation in time is performed.
  padding : str
      (same, valid). If "valid", no padding is performed.
      If "same" and stride is 1, output shape is the same as the input shape.
  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.
  skip_transpose : bool
      If False, uses batch x time x channel convention of speechbrain.
      If True, uses batch x channel x time convention.
  
  Example
  -------
  >>> inp_tensor = torch.rand([10, 8000, 40])
  >>> low_pass_pooling = GaussianLowpassPooling(
  ...     40, kernel_size=401, stride=160,
  ... )
  >>> # parameters corresponding to a window of 25 ms and stride 10 ms at 16000 kHz
  >>> out_tensor = low_pass_pooling(inp_tensor)
  >>> out_tensor.shape
  torch.Size([10, 50, 40])
docstr: Performs GaussianLowpass Pooling.
  
  Arguments
  ---------
  x : torch.Tensor
      3D tensor in input [batch,time,channels].
docstr_tok: ["Performs","GaussianLowpass","Pooling",".","Arguments","--","--","--","--","-","x",":","torch.Tensor","3D","tensor","in","input","[","batch",",","time",",","channels","]","."]
code: def forward(self, x):
      """Performs GaussianLowpass Pooling.
  
      Arguments
      ---------
      x : torch.Tensor
          3D tensor in input [batch,time,channels].
      """
      if not self.skip_transpose:
          x = x.transpose(1, -1)
  
      kernel = self._get_impulse_responses(self.weights)
      kernel = kernel.reshape(-1, self.kernel_size, self.in_channels)
      kernel = kernel.permute(2, 0, 1)
  
      if self.padding == "same":
          x = self._manage_padding(x, self.kernel_size)
      elif self.padding == "valid":
          pass
      else:
          raise ValueError(
              "Padding must be 'same' or 'valid'. Got " + self.padding
          )
      outputs = F.conv1d(
          x,
          kernel,
          bias=self._bias,
          stride=self.stride,
          padding=0,
          groups=self.in_channels,
      )
      if not self.skip_transpose:
          outputs = outputs.transpose(1, -1)
      return outputs
  
imports: import torch
  import logging
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 3 for calling the GaussianLowpassPooling obj's underlying member method code with example usage: obj.forward(x) and returns: outputs