class_docstr: Bottleneck layer for reducing the dimensionality of a tensor.
  
  Args:
      in_dim: The number of input dimensions.
      reduction_factor: The factor by which to reduce the number of dimensions.
      norm: The normalization method to use. Can be "weightnorm" or "instancenorm".
      non_linearity: The non-linearity to use. Can be "relu" or "leakyrelu".
      kernel_size: The size of the convolutional kernel.
      use_partial_padding: Whether to use partial padding with the convolutional kernel.
  
  Shape:
      - Input: :math:`[N, in_dim]` where `N` is the batch size and `in_dim` is the number of input dimensions.
  
      - Output: :math:`[N, out_dim]` where `out_dim` is the number of output dimensions.
code: def forward(self, x):
      if self.reduction_factor > 1:
          x = self.projection_fn(x)
          x = self.non_linearity(x)
      return x
  
imports: import math
  from typing import Tuple
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from TTS.tts.layers.delightful_tts.conv_layers import ConvNorm
label_desc: Use image node_id 2 for calling the BottleneckLayer obj's underlying member method code with example usage: obj.forward(x) and returns: x