class_docstr: Ying decoder module.
docstr: Forward pass of the decoder.
  
  Args:
      z_yin (torch.Tensor): The input yin note sequence of shape (B, C, T_yin).
      yin_gt (torch.Tensor): The ground truth yin note sequence of shape
                             (B, C, T_yin).
      z_mask (torch.Tensor): The mask tensor of shape (B, 1, T_yin).
      g (torch.Tensor): The global conditioning tensor.
  Returns:
      torch.Tensor: The predicted yin note sequence of shape (B, C, T_yin).
      torch.Tensor: The shifted ground truth yin note sequence of shape
                    (B, C, T_yin).
      torch.Tensor: The cropped ground truth yin note sequence of shape
                    (B, C, T_yin).
      torch.Tensor: The cropped input yin note sequence of shape (B, C, T_yin).
      torch.Tensor: The scope shift tensor of shape (B,).
code: def forward(self, z_yin, yin_gt, z_mask, g=None):
      """Forward pass of the decoder.
  
      Args:
          z_yin (torch.Tensor): The input yin note sequence of shape (B, C, T_yin).
          yin_gt (torch.Tensor): The ground truth yin note sequence of shape
                                 (B, C, T_yin).
          z_mask (torch.Tensor): The mask tensor of shape (B, 1, T_yin).
          g (torch.Tensor): The global conditioning tensor.
      Returns:
          torch.Tensor: The predicted yin note sequence of shape (B, C, T_yin).
          torch.Tensor: The shifted ground truth yin note sequence of shape
                        (B, C, T_yin).
          torch.Tensor: The cropped ground truth yin note sequence of shape
                        (B, C, T_yin).
          torch.Tensor: The cropped input yin note sequence of shape (B, C, T_yin).
          torch.Tensor: The scope shift tensor of shape (B,).
  
      """
      B = z_yin.shape[0]
      scope_shift = torch.randint(
          -self.yin_shift_range,
          self.yin_shift_range,
          (B,),
          dtype=torch.int,
      )
      z_yin_crop = self.crop_scope(z_yin, self.yin_start, scope_shift)
      yin_gt_shifted_crop = self.crop_scope(
          yin_gt, self.yin_start, scope_shift
      )
      yin_gt_crop = self.crop_scope(
          yin_gt, self.yin_start, torch.zeros_like(scope_shift)
      )
      x = self.pre(z_yin_crop) * z_mask
      x = self.dec(x, z_mask, g=g)
      yin_hat_crop = self.proj(x) * z_mask
      return (
          yin_gt_crop,
          yin_gt_shifted_crop,
          yin_hat_crop,
          z_yin_crop,
          scope_shift,
      )
  
file_path: espnet/espnet2/gan_svs/pits/ying_decoder.py
imports: import torch
  import torch.nn
  import espnet2.gan_svs.pits.modules
label_desc: Use image node_id 4 for calling the YingDecoder obj's underlying member method code with example usage: obj.forward(z_yin, yin_gt, z_mask, g) and returns: yin_gt_crop,  yin_gt_shifted_crop,  yin_hat_crop,  z_yin_crop,  scope_shift