code: def test_graph_attention_block():
      """Test the graph conv block"""
  
      in_dict = build_input_dict(dims=[100, 5, 7])
      adj_matrix_batch = construct_pre_processing_matrix_adj_bar()[
          0
      ].repeat([100, 1, 1])
      in_dict["adj_matrix"] = adj_matrix_batch
      net: GraphAttentionBlock = GraphAttentionBlock(
          in_keys=list(in_dict.keys()),
          out_keys="out_key",
          in_shapes=[value.shape[1:] for value in in_dict.values()],
          hidden_features=[11, 13],
          non_lins=[nn.ReLU, nn.Identity],
          attention_alpha=0.2,
          n_heads=[3, 1],
          attention_dropout=0,
          avg_last_head_attentions=False,
      )
  
      str(net)
      out_dict = net(in_dict)
  
      assert isinstance(out_dict, Dict)
      assert set(net.out_keys).issubset(set(out_dict.keys()))
      assert net.output_features == 13
      assert out_dict[net.out_keys[0]].shape[-1] == net.output_features
      assert out_dict[net.out_keys[0]].shape == (100, 5, 13)
      assert net.out_shapes() == [out_dict[net.out_keys[0]].shape[-2:]]
      assert net.get_num_of_parameters() == (7 * 11 + 11 * 2) * 3 + (
          33 * 13 + 13 * 2
      )
  
      net.apply(make_module_init_normc(1.0))
  
file_path: maze/maze/test/perception/blocks/test_graph_attention.py
imports: from typing import Dict, Tuple
  import torch
  import torch.nn
  from maze.perception.blocks.feed_forward.graph_attention import GraphAttentionBlock, GraphAttentionLayer, GraphMultiHeadAttentionLayer
  from maze.perception.weight_init import make_module_init_normc
  from maze.test.perception.perception_test_utils import build_input_dict
label_desc: Use image node_id 5 for calling a global function with example usage: test_graph_attention_block() without return types