code: def test_graph_cnn_block():
      """Test the graph conv block"""
  
      in_dict = build_input_dict(dims=[100, 5, 7])
      adj_matrix_batch = construct_pre_processing_matrix()[0].repeat(
          [100, 1, 1]
      )
      in_dict["adj_matrix"] = adj_matrix_batch
      net: GraphConvBlock = GraphConvBlock(
          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],
          bias=[False, True],
          non_lins=[nn.ReLU, nn.Identity],
          node_self_importance=1.0,
          trainable_node_self_importance=False,
          preprocess_adj=True,
      )
  
      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 * 13) + 13
  
      net.apply(make_module_init_normc(1.0))
  
file_path: maze/maze/test/perception/blocks/test_graph_cnn.py
imports: from typing import Tuple, Dict
  import pytest
  import torch
  import torch.nn
  from maze.perception.blocks.feed_forward.graph_conv import GraphConvBlock, GraphConvLayer
  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 6 for calling a global function with example usage: test_graph_cnn_block() without return types