code: def test_topology(gs, idtype):
      """Test batching two DGLGraphs where some nodes are isolated in some relations"""
      g1, g2 = gs
      g1 = g1.astype(idtype).to(F.ctx())
      g2 = g2.astype(idtype).to(F.ctx())
      bg = dgl.batch([g1, g2])
  
      assert bg.idtype == idtype
      assert bg.device == F.ctx()
      assert bg.ntypes == g2.ntypes
      assert bg.etypes == g2.etypes
      assert bg.canonical_etypes == g2.canonical_etypes
      assert bg.batch_size == 2
  
      # Test number of nodes
      for ntype in bg.ntypes:
          print(ntype)
          assert F.asnumpy(bg.batch_num_nodes(ntype)).tolist() == [
              g1.num_nodes(ntype),
              g2.num_nodes(ntype),
          ]
          assert bg.num_nodes(ntype) == (
              g1.num_nodes(ntype) + g2.num_nodes(ntype)
          )
  
      # Test number of edges
      for etype in bg.canonical_etypes:
          assert F.asnumpy(bg.batch_num_edges(etype)).tolist() == [
              g1.num_edges(etype),
              g2.num_edges(etype),
          ]
          assert bg.num_edges(etype) == (
              g1.num_edges(etype) + g2.num_edges(etype)
          )
  
      # Test relabeled nodes
      for ntype in bg.ntypes:
          assert list(F.asnumpy(bg.nodes(ntype))) == list(
              range(bg.num_nodes(ntype))
          )
  
      # Test relabeled edges
      src, dst = bg.edges(etype=("user", "follows", "user"))
      assert list(F.asnumpy(src)) == [0, 1, 4, 5]
      assert list(F.asnumpy(dst)) == [1, 2, 5, 6]
      src, dst = bg.edges(etype=("user", "follows", "developer"))
      assert list(F.asnumpy(src)) == [0, 1, 4, 5]
      assert list(F.asnumpy(dst)) == [1, 2, 4, 5]
      src, dst, eid = bg.edges(etype="plays", form="all")
      assert list(F.asnumpy(src)) == [0, 1, 2, 3, 4, 5, 6]
      assert list(F.asnumpy(dst)) == [0, 0, 1, 1, 2, 2, 3]
      assert list(F.asnumpy(eid)) == [0, 1, 2, 3, 4, 5, 6]
  
      # Test unbatching graphs
      g3, g4 = dgl.unbatch(bg)
      check_equivalence_between_heterographs(g1, g3)
      check_equivalence_between_heterographs(g2, g4)
  
      # Test dtype cast
      if idtype == "int32":
          bg_cast = bg.long()
      else:
          bg_cast = bg.int()
      assert bg.batch_size == bg_cast.batch_size
  
      # Test local var
      bg_local = bg.local_var()
      assert bg.batch_size == bg_local.batch_size
  
file_path: dgl/tests/python/common/test_batch-heterograph.py
imports: import unittest
  import backend
  import dgl
  import pytest
  from dgl.base import ALL
  from utils import check_graph_equal, get_cases, parametrize_idtype
label_desc: Use image node_id 2 for calling a global function with example usage: test_topology(gs, idtype) without return types