class_docstr: Spatial Temporal Embedding
  
  Apply GAT and Conv1D based on Temporal and Spatial Correlation
code: def forward(self, x, graph):
      bz, seqlen, _ = x.shape
      x = paddle.reshape(x, [bz, seqlen, self.id_len, self.input_dim])
      x = paddle.transpose(x, [0, 2, 1, 3])
      x = paddle.reshape(x, [-1, seqlen, self.input_dim])
      mean_x = paddle.mean(x, 1)
      q_x = self.q(mean_x) / math.sqrt(self.output_dim)
      k_x = self.k(mean_x)
      x = paddle.reshape(x, [-1, seqlen * self.input_dim])
  
      msg = graph.send(
          self._send_attention,
          src_feat={"k": k_x, "v": x},
          dst_feat={"q": q_x},
      )
      output = graph.recv(reduce_func=self._reduce_attention, msg=msg)
      x = paddle.reshape(
          output, [bz, self.id_len, seqlen, self.input_dim]
      )
      x = paddle.transpose(x, [0, 2, 1, 3])
      x = paddle.reshape(x, [bz, seqlen, self.id_len * self.input_dim])
      return self.conv1(x)
  
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 4 for calling the SpatialTemporalConv obj's underlying member method code with example usage: obj.forward(x, graph) and returns: self