class_docstr: Models for Wind Power Prediction
      
code: def forward(
      self, batch_x, batch_y, data_mean, data_scale, graph=None
  ):
      bz, id_len, input_len, var_len = batch_x.shape
  
      batch_graph = pgl.Graph.batch([graph] * bz)
  
      _, _, output_len, _ = batch_y.shape
      var_len = var_len - 2
  
      time_id = batch_x[:, 0, :, 1].astype("int32")
      weekday_id = batch_x[:, 0, :, 0].astype("int32")
  
      batch_x = batch_x[:, :, :, 2:]
      batch_x = (batch_x - data_mean) / data_scale
  
      y_weekday_id = batch_y[:, 0, :, 0].astype("int32")
      y_time_id = batch_y[:, 0, :, 1].astype("int32")
  
      batch_x_time_emb = self.t_emb(time_id)
      batch_y_time_emb = self.t_dec_emb(
          paddle.concat([time_id, y_time_id], 1)
      )
  
      batch_x_weekday_emb = self.w_emb(weekday_id)
      batch_y_weekday_emb = self.w_dec_emb(
          paddle.concat([weekday_id, y_weekday_id], 1)
      )
  
      batch_x = paddle.transpose(batch_x, [0, 2, 1, 3])
  
      batch_pred_trend = paddle.mean(batch_x, 1, keepdim=True)[
          :, :, :, -1
      ]
      batch_pred_trend = paddle.tile(
          batch_pred_trend, [1, output_len, 1]
      )
      batch_pred_trend = paddle.concat(
          [self.decomp(batch_x[:, :, :, -1])[0], batch_pred_trend], 1
      )
  
      batch_x = paddle.reshape(
          batch_x, [bz, input_len, var_len * id_len]
      )
      _, season_init = self.decomp(batch_x)
  
      batch_pred_season = paddle.zeros(
          [bz, output_len, var_len * id_len], dtype="float32"
      )
      batch_pred_season = paddle.concat(
          [season_init, batch_pred_season], 1
      )
  
      batch_x = (
          self.st_conv_encoder(batch_x, batch_graph) + self.pos_emb
      )
  
      batch_pred_season = (
          self.st_conv_decoder(batch_pred_season, batch_graph)
          + self.pos_dec_emb
      )
  
      batch_x = self.enc(batch_x)
  
      batch_x_pred, batch_x_trends = self.dec(
          batch_pred_season, batch_pred_trend, batch_x
      )
      batch_x_pred = self.pred_nn(batch_x_pred)
  
      pred_y = batch_x_pred + batch_x_trends
      pred_y = paddle.transpose(pred_y, [0, 2, 1])
      pred_y = pred_y[:, :, -output_len:]
      return pred_y
  
imports: import pgl
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import numpy
  from pgl.utils.logger import log
  import pgl.nn
  import math
label_desc: Use image node_id 3 for calling the WPFModel obj's underlying member method code with example usage: obj.forward(batch_x, batch_y, data_mean, data_scale, graph) and returns: pred_y