code: def forward(self, x: torch.Tensor) -> torch.Tensor:
      outputs = []
      if self.upsample_mode == "transpose":
          for project_module, pool_module, up_module in zip(
              self.project_modules, self.pool_modules, self.up_modules
          ):
              output = up_module(project_module(pool_module(x)))
              outputs.append(output)
      else:
          for project_module, pool_module in zip(
              self.project_modules, self.pool_modules
          ):
              interpolate_size = x.shape[2:]
              align_corners: Union[bool, None] = None
              if self.upsample_mode in ["trilinear", "bilinear"]:
                  align_corners = True
              output = F.interpolate(
                  project_module(pool_module(x)),
                  size=interpolate_size,
                  mode=self.upsample_mode,
                  align_corners=align_corners,
              )
              outputs.append(output)
      x = torch.cat(outputs, dim=1)
      return x
  
imports: from __future__ import annotations
  import math
  from collections.abc import Sequence
  from typing import Union
  import torch
  import torch.nn
  import torch.nn.functional
  from monai.networks.blocks.fcn import FCN
  from monai.networks.layers.factories import Act, Conv, Norm, Pool
label_desc: Use image node_id 2 for calling the PSP obj's underlying member method code with example usage: obj.forward(x) and returns: x