code: def forward(self, z):  # z: [bs x nvars x seq_len]
      # norm
      if self.revin:
          z = z.permute(0, 2, 1)
          z = self.revin_layer(z, "norm")
          z = z.permute(0, 2, 1)
  
      # do patching
      if self.padding_patch == "end":
          z = self.padding_patch_layer(z)
      z = z.unfold(
          dimension=-1, size=self.patch_len, step=self.stride
      )  # z: [bs x nvars x patch_num x patch_len]
      z = z.permute(
          0, 1, 3, 2
      )  # z: [bs x nvars x patch_len x patch_num]
  
      # model
      z = self.backbone(z)  # z: [bs x nvars x hidden_size x patch_num]
      z = self.head(z)  # z: [bs x nvars x h]
  
      # denorm
      if self.revin:
          z = z.permute(0, 2, 1)
          z = self.revin_layer(z, "denorm")
          z = z.permute(0, 2, 1)
      return z
  
imports: import math
  import numpy
  from typing import Optional
  import torch
  import torch.nn
  import torch.nn.functional
  from ..common._base_windows import BaseWindows
  from ..losses.pytorch import MAE
label_desc: Use image node_id 2 for calling the PatchTST_backbone obj's underlying member method code with example usage: obj.forward(z) and returns: z