class_docstr: Speech Quality and Intelligibility Measures (SQUIM) model that predicts **objective** metric scores
  for speech enhancement (e.g., STOI, PESQ, and SI-SDR).
  
  Args:
      encoder (torch.nn.Module): Encoder module to transform 1D waveform to 2D feature representation.
      dprnn (torch.nn.Module): DPRNN module to model sequential feature.
      branches (torch.nn.ModuleList): Transformer branches in which each branch estimate one objective metirc score.
docstr: Args:
      x (torch.Tensor): Input waveforms. Tensor with dimensions `(batch, time)`.
  
  Returns:
      List(torch.Tensor): List of score Tenosrs. Each Tensor is with dimension `(batch,)`.
docstr_tok: ["Args",":","x","(","torch.Tensor",")",":","Input","waveforms",".","Tensor","with","dimensions","`","(","batch",",","time",")","`",".","Returns",":","List","(","torch.Tensor",")",":","List","of","score","Tenosrs",".","Each","Tensor","is","with","dimension","`","(","batch",",",")","`","."]
code: def forward(self, x: torch.Tensor) -> List[torch.Tensor]:
      """
      Args:
          x (torch.Tensor): Input waveforms. Tensor with dimensions `(batch, time)`.
  
      Returns:
          List(torch.Tensor): List of score Tenosrs. Each Tensor is with dimension `(batch,)`.
      """
      if x.ndim != 2:
          raise ValueError(
              f"The input must be a 2D Tensor. Found dimension {x.ndim}."
          )
      x = x / (torch.mean(x**2, dim=1, keepdim=True) ** 0.5 * 20)
      out = self.encoder(x)
      out = self.dprnn(out)
      scores = []
      for branch in self.branches:
          scores.append(branch(out).squeeze(dim=1))
      return scores
  
imports: import math
  from typing import List, Optional, Tuple
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the SquimObjective obj's underlying member method code with example usage: obj.forward(x) and returns: scores