class_docstr: SBD (Sub-band Discriminator) from https://arxiv.org/pdf/2206.13404.pdf
class_docstr_tok: ["SBD","(","Sub-band","Discriminator",")","from","https",":","\/\/arxiv.org\/pdf\/2206.13404.pdf"]
code: def forward(self, y, y_hat):
      y_d_rs = []
      y_d_gs = []
      fmap_rs = []
      fmap_gs = []
      y_in = self.pqmf.analysis(y)
      y_hat_in = self.pqmf.analysis(y_hat)
      if self.f_pqmf is not None:
          y_in_f = self.f_pqmf.analysis(y)
          y_hat_in_f = self.f_pqmf.analysis(y_hat)
  
      for d, br, tr in zip(
          self.discriminators,
          self.config.band_ranges,
          self.config.transpose,
      ):
          if tr:
              _y_in = y_in_f[:, br[0] : br[1], :]
              _y_hat_in = y_hat_in_f[:, br[0] : br[1], :]
              _y_in = torch.transpose(_y_in, 1, 2)
              _y_hat_in = torch.transpose(_y_hat_in, 1, 2)
          else:
              _y_in = y_in[:, br[0] : br[1], :]
              _y_hat_in = y_hat_in[:, br[0] : br[1], :]
          y_d_r, fmap_r = d(_y_in)
          y_d_g, fmap_g = d(_y_hat_in)
          y_d_rs.append(y_d_r)
          fmap_rs.append(fmap_r)
          y_d_gs.append(y_d_g)
          fmap_gs.append(fmap_g)
  
      return y_d_rs, y_d_gs, fmap_rs, fmap_gs
  
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 SBD obj's underlying member method code with example usage: obj.forward(y, y_hat) and returns: y_d_rs,  y_d_gs,  fmap_rs,  fmap_gs