class_docstr: Uses glow decoder with some modifications.
  ::
  
      Squeeze -> ActNorm -> InvertibleConv1x1 -> AffineCoupling -> Unsqueeze
  
  Args:
      in_channels (int): channels of input tensor.
      hidden_channels (int): hidden decoder channels.
      kernel_size (int): Coupling block kernel size. (Wavenet filter kernel size.)
      dilation_rate (int): rate to increase dilation by each layer in a decoder block.
      num_flow_blocks (int): number of decoder blocks.
      num_coupling_layers (int): number coupling layers. (number of wavenet layers.)
      dropout_p (float): wavenet dropout rate.
      sigmoid_scale (bool): enable/disable sigmoid scaling in coupling layer.
docstr: Input shapes:
      - x:  :math:`[B, C, T]`
      - x_len :math:`[B]`
      - g: :math:`[B, C]`
  
  Output shapes:
      - x:  :math:`[B, C, T]`
      - x_len :math:`[B]`
      - logget_tot :math:`[B]`
code: def forward(self, x, x_len, g=None, reverse=False):
      """
      Input shapes:
          - x:  :math:`[B, C, T]`
          - x_len :math:`[B]`
          - g: :math:`[B, C]`
  
      Output shapes:
          - x:  :math:`[B, C, T]`
          - x_len :math:`[B]`
          - logget_tot :math:`[B]`
      """
      x, x_len, x_max_len = self.preprocess(x, x_len, x_len.max())
      x_mask = torch.unsqueeze(sequence_mask(x_len, x_max_len), 1).to(
          x.dtype
      )
      x, logdet_tot = self.glow_decoder(x, x_mask, g, reverse)
      return x, x_len, logdet_tot
  
file_path: TTS/TTS/tts/layers/overflow/decoder.py
imports: import torch
  from torch import nn
  from TTS.tts.layers.glow_tts.decoder import Decoder
  from TTS.tts.utils.helpers import sequence_mask
label_desc: Use image node_id 2 for calling the Decoder obj's underlying member method code with example usage: obj.forward(x, x_len, g, reverse) and returns: x,  x_len,  logdet_tot