code: def __init__(
      self,
      in_dim,
      reduction_factor,
      norm="weightnorm",
      non_linearity="relu",
      use_pconv=False,
  ):
      super(BottleneckLayerLayer, self).__init__()
  
      self.reduction_factor = reduction_factor
      reduced_dim = int(in_dim / reduction_factor)
      self.out_dim = reduced_dim
      if self.reduction_factor > 1:
          if norm == "weightnorm":
              norm_args = {"use_weight_norm": True}
          elif norm == "instancenorm":
              norm_args = {"norm_fn": MaskedInstanceNorm1d}
          else:
              norm_args = {}
          fn = ConvNorm(in_dim, reduced_dim, kernel_size=3, **norm_args)
          self.projection_fn = fn
          self.non_linearity = non_linearity
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from nemo.collections.tts.modules.common import ConvLSTMLinear
  from nemo.collections.tts.modules.submodules import ConvNorm, MaskedInstanceNorm1d
  from nemo.collections.tts.modules.transformer import FFTransformer
  from nemo.collections.tts.parts.utils.helpers import get_mask_from_lengths
label_desc: Use image node_id 1 to create a new BottleneckLayerLayer object from inherited base classes: nn with example: obj = BottleneckLayerLayer(in_dim, reduction_factor, norm, non_linearity, use_pconv)