code: def test_serialize_heterograph():
      f = tempfile.NamedTemporaryFile(delete=False)
      path = f.name
      f.close()
      g_list0 = create_heterographs2(F.int64) + create_heterographs2(
          F.int32
      )
      dgl.save_graphs(path, g_list0)
  
      g_list, _ = dgl.load_graphs(path)
      assert g_list[0].idtype == F.int64
      assert len(g_list[0].canonical_etypes) == 3
      for i in range(len(g_list0)):
          for j, etypes in enumerate(g_list0[i].canonical_etypes):
              assert g_list[i].canonical_etypes[j] == etypes
      # assert g_list[1].restrict_format() == 'any'
      # assert g_list[2].restrict_format() == 'csr'
  
      assert g_list[4].idtype == F.int32
      assert np.allclose(
          F.asnumpy(g_list[2].nodes["user"].data["hh"]), np.ones((4, 5))
      )
      assert np.allclose(
          F.asnumpy(g_list[6].nodes["user"].data["hh"]), np.ones((4, 5))
      )
      edges = g_list[0]["follows"].edges()
      assert np.allclose(F.asnumpy(edges[0]), np.array([0, 1, 2]))
      assert np.allclose(F.asnumpy(edges[1]), np.array([1, 2, 3]))
      for i in range(len(g_list)):
          assert g_list[i].ntypes == g_list0[i].ntypes
          assert g_list[i].etypes == g_list0[i].etypes
  
      # test set feature after load_graph
      g_list[3].nodes["user"].data["test"] = F.tensor([0, 1, 2, 4])
      g_list[3].edata["test"] = F.tensor([0, 1, 2])
  
      os.unlink(path)
  
imports: import os
  import tempfile
  import time
  import unittest
  import warnings
  import backend
  import dgl
  import dgl.ndarray
  import numpy
  import pytest
  import scipy
  from dgl.data.utils import load_labels, load_tensors, save_tensors
label_desc: Use image node_id 15 for calling a global function with example usage: test_serialize_heterograph() without return types