class_docstr: Wavenet layers with weight norm and no input conditioning.
  
       |-----------------------------------------------------------------------------|
       |                                    |-> tanh    -|                           |
  res -|- conv1d(dilation) -> dropout -> + -|            * -> conv1d1x1 -> split -|- + -> res
  g -------------------------------------|  |-> sigmoid -|                        |
  o --------------------------------------------------------------------------- + --------- o
  
  Args:
      in_channels (int): number of input channels.
      hidden_channes (int): number of hidden channels.
      kernel_size (int): filter kernel size for the first conv layer.
      dilation_rate (int): dilations rate to increase dilation per layer.
          If it is 2, dilations are 1, 2, 4, 8 for the next 4 layers.
      num_layers (int): number of wavenet layers.
      c_in_channels (int): number of channels of conditioning input.
      dropout_p (float): dropout rate.
      weight_norm (bool): enable/disable weight norm for convolution layers.
code: def forward(
      self, x, x_mask=None, g=None, **kwargs
  ):  # pylint: disable=unused-argument
      output = torch.zeros_like(x)
      n_channels_tensor = torch.IntTensor([self.hidden_channels])
      if g is not None:
          g = self.cond_layer(g)
      for i in range(self.num_layers):
          x_in = self.in_layers[i](x)
          x_in = self.dropout(x_in)
          if g is not None:
              cond_offset = i * 2 * self.hidden_channels
              g_l = g[
                  :,
                  cond_offset : cond_offset + 2 * self.hidden_channels,
                  :,
              ]
          else:
              g_l = torch.zeros_like(x_in)
          acts = fused_add_tanh_sigmoid_multiply(
              x_in, g_l, n_channels_tensor
          )
          res_skip_acts = self.res_skip_layers[i](acts)
          if i < self.num_layers - 1:
              x = (
                  x + res_skip_acts[:, : self.hidden_channels, :]
              ) * x_mask
              output = (
                  output + res_skip_acts[:, self.hidden_channels :, :]
              )
          else:
              output = output + res_skip_acts
      return output * x_mask
  
file_path: TTS/TTS/tts/layers/generic/wavenet.py
imports: import torch
  from torch import nn
label_desc: Use image node_id 2 for calling the WN obj's underlying member method code with example usage: obj.forward(x, x_mask, g) and returns: unknown