class_docstr: VITS discriminator wrapping one Scale Discriminator and a stack of Period Discriminator.
  
  ::
      waveform -> ScaleDiscriminator() -> scores_sd, feats_sd --> append() -> scores, feats
             |--> MultiPeriodDiscriminator() -> scores_mpd, feats_mpd ^
  
  Args:
      use_spectral_norm (bool): if `True` swith to spectral norm instead of weight norm.
docstr: Args:
      x (Tensor): ground truth waveform.
      x_hat (Tensor): predicted waveform.
  
  Returns:
      List[Tensor]: discriminator scores.
      List[List[Tensor]]: list of list of features from each layers of each discriminator.
code: def forward(self, x, x_hat=None):
      """
      Args:
          x (Tensor): ground truth waveform.
          x_hat (Tensor): predicted waveform.
  
      Returns:
          List[Tensor]: discriminator scores.
          List[List[Tensor]]: list of list of features from each layers of each discriminator.
      """
      x_scores = []
      x_hat_scores = [] if x_hat is not None else None
      x_feats = []
      x_hat_feats = [] if x_hat is not None else None
      for net in self.nets:
          x_score, x_feat = net(x)
          x_scores.append(x_score)
          x_feats.append(x_feat)
          if x_hat is not None:
              x_hat_score, x_hat_feat = net(x_hat)
              x_hat_scores.append(x_hat_score)
              x_hat_feats.append(x_hat_feat)
      return x_scores, x_feats, x_hat_scores, x_hat_feats
  
file_path: TTS/TTS/tts/layers/vits/discriminator.py
imports: import torch
  from torch import nn
  from torch.nn.modules.conv import Conv1d
  from TTS.vocoder.models.hifigan_discriminator import DiscriminatorP, MultiPeriodDiscriminator
label_desc: Use image node_id 2 for calling the VitsDiscriminator obj's underlying member method code with example usage: obj.forward(x, x_hat) and returns: x_scores,  x_feats,  x_hat_scores,  x_hat_feats