class_docstr: Avocodo discriminator with additional MFD.
class_docstr_tok: ["Avocodo","discriminator","with","additional","MFD","."]
code: def forward(
      self, y: torch.Tensor, y_hats: torch.Tensor
  ) -> List[List[torch.Tensor]]:
      ys = [
          self.pqmf_lv2.analysis(y)[:, : self.projection_filters[1]],
          self.pqmf_lv1.analysis(y)[:, : self.projection_filters[2]],
          y,
      ]
  
      (
          combd_outs_real,
          combd_outs_fake,
          combd_fmaps_real,
          combd_fmaps_fake,
      ) = self.combd(ys, y_hats)
  
      (
          sbd_outs_real,
          sbd_outs_fake,
          sbd_fmaps_real,
          sbd_fmaps_fake,
      ) = self.sbd(y, y_hats[-1])
  
      mfd_fmaps_real = self.mfd(y)
      mfd_fmaps_fake = self.mfd(y_hats[-1])
      mfd_outs_real = mfd_fmaps_real[-1]
      mfd_outs_fake = mfd_fmaps_fake[-1]
  
      # Combine the outputs of both discriminators
      outs_real = combd_outs_real + sbd_outs_real + mfd_outs_real
      outs_fake = combd_outs_fake + sbd_outs_fake + mfd_outs_fake
      fmaps_real = combd_fmaps_real + sbd_fmaps_real + mfd_fmaps_real
      fmaps_fake = combd_fmaps_fake + sbd_fmaps_fake + mfd_fmaps_fake
  
      return outs_real, outs_fake, fmaps_real, fmaps_fake
  
imports: import logging
  from typing import Any, Dict, List, Optional
  import torch
  import torch.nn.functional
  from torch.nn import Conv1d
  from torch.nn.utils import spectral_norm, weight_norm
  from espnet2.gan_svs.visinger2.visinger2_vocoder import MultiFrequencyDiscriminator
  from espnet2.gan_tts.hifigan.residual_block import ResidualBlock
  from espnet2.gan_tts.melgan.pqmf import PQMF
label_desc: Use image node_id 2 for calling the AvocodoDiscriminatorPlus obj's underlying member method code with example usage: obj.forward(y, y_hats) and returns: outs_real,  outs_fake,  fmaps_real,  fmaps_fake