code: def test_module_gcnnorm(idtype):
      g = dgl.heterograph(
          {
              ("A", "r1", "A"): ([0, 1, 2], [0, 0, 1]),
              ("A", "r2", "B"): ([0, 0], [1, 1]),
              ("B", "r3", "B"): ([0, 1, 2], [0, 0, 1]),
          },
          idtype=idtype,
          device=F.ctx(),
      )
      g.edges["r3"].data["w"] = F.tensor([0.1, 0.2, 0.3])
      transform = dgl.GCNNorm()
      new_g = transform(g)
      assert "w" not in new_g.edges[("A", "r2", "B")].data
      assert F.allclose(
          new_g.edges[("A", "r1", "A")].data["w"],
          F.tensor([1.0 / 2, 1.0 / math.sqrt(2), 0.0]),
      )
      assert F.allclose(
          new_g.edges[("B", "r3", "B")].data["w"],
          F.tensor([1.0 / 3, 2.0 / 3, 0.0]),
      )
  
imports: import math
  import os
  import unittest
  import backend
  import dgl
  import dgl.function
  import dgl.partition
  import networkx
  import numpy
  import pytest
  from scipy import sparse
  from utils import parametrize_idtype
  from utils.graph_cases import get_cases
label_desc: Use image node_id 41 for calling a global function with example usage: test_module_gcnnorm(idtype) without return types