code: def test_gradient_computation():
      """Test the gradient flow"""
      in_matrix, result_matrix = construct_pre_processing_matrix()
  
      adj_hat_torch = GraphConvBlock.preprocess_adj_to_adj_hat(
          in_matrix
      )
      assert adj_hat_torch.requires_grad is False
  
      self_scaling_param = torch.tensor(1.0, requires_grad=False)
      adj_hat_torch = GraphConvBlock.preprocess_adj_to_adj_hat(
          in_matrix, self_scaling_param
      )
      assert adj_hat_torch.requires_grad is False
  
      self_scaling_param = torch.tensor(1.0, requires_grad=True)
      adj_hat_torch = GraphConvBlock.preprocess_adj_to_adj_hat(
          in_matrix, self_scaling_param
      )
      assert adj_hat_torch.requires_grad is True
      loss = sum(sum(adj_hat_torch - result_matrix))
      loss.backward()
      assert torch.isclose(
          self_scaling_param.grad, torch.tensor(0.1078), rtol=1.0e-3
      )
  
      self_scaling_param = torch.tensor(1.0, requires_grad=True)
      with torch.set_grad_enabled(False):
          adj_hat_torch = GraphConvBlock.preprocess_adj_to_adj_hat(
              in_matrix, self_scaling_param
          )
      assert adj_hat_torch.requires_grad is False
  
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 4 for calling a global function with example usage: test_gradient_computation() without return types