code: def test_gman():
      """
      Testing GMAN
      """
      L = 1
      K = 8
      d = 8
      device = torch.device(
          "cuda" if torch.cuda.is_available() else "cpu"
      )
      num_his = 12
      num_pred = 10
      num_nodes = 50
      num_sample = 100
      batch_size = 32
      bn_decay = 0.1
      steps_per_day = 288
      use_bias = True
      mask = False
      trainX = torch.rand(num_sample, num_his, num_nodes).to(device)
      SE, _ = create_mock_data(
          number_of_nodes=num_nodes, edge_per_node=8, in_channels=64
      )
      SE = SE.to(device)
      trainTE = (
          2 * torch.rand((num_sample, num_his + num_pred, 2)) - 1
      ).to(device)
      model = GMAN(
          L,
          K,
          d,
          num_his,
          bn_decay=bn_decay,
          steps_per_day=steps_per_day,
          use_bias=use_bias,
          mask=mask,
      ).to(device)
      L = 2
      model2 = GMAN(
          L,
          K,
          d,
          num_his,
          bn_decay=bn_decay,
          steps_per_day=steps_per_day,
          use_bias=False,
          mask=True,
      ).to(device)
  
      X = trainX[:batch_size]
      TE = trainTE[:batch_size]
      pred = model(X, SE, TE)
      assert pred.shape == (batch_size, num_pred, num_nodes)
      pred = model2(X, SE, TE)
      assert pred.shape == (batch_size, num_pred, num_nodes)
  
imports: import torch
  import math
  import numpy
  import networkx
  from torch_geometric.data import Data
  from torch_geometric.utils import barabasi_albert_graph
  from torch_geometric.transforms import LaplacianLambdaMax
  from torch_geometric_temporal.nn.attention import TemporalConv, STConv, ASTGCN, MSTGCN, MTGNN, ChebConvAttention, AAGCN, GraphAAGCN, DNNTSP
  from torch_geometric_temporal.nn.attention import GMAN, SpatioTemporalAttention, SpatioTemporalEmbedding
label_desc: Use image node_id 10 for calling a global function with example usage: test_gman() without return types