code: def test_hetero_empty_graph(total_num_nodes):
      csc_indptr = torch.zeros((total_num_nodes + 1,), dtype=int)
      indices = torch.tensor([])
      node_type_to_id, edge_type_to_id = gbt.get_type_to_id(
          num_ntypes=3, num_etypes=5
      )
      # Some node types have no nodes.
      if total_num_nodes == 0:
          node_type_offset = torch.zeros((4,), dtype=int)
      else:
          node_type_offset = torch.sort(
              torch.randint(0, total_num_nodes, (4,))
          )[0]
          node_type_offset[0] = 0
          node_type_offset[-1] = total_num_nodes
      type_per_edge = torch.tensor([])
      graph = gb.fused_csc_sampling_graph(
          csc_indptr,
          indices,
          node_type_offset=node_type_offset,
          type_per_edge=type_per_edge,
          node_type_to_id=node_type_to_id,
          edge_type_to_id=edge_type_to_id,
          edge_attributes=None,
      )
      assert graph.total_num_edges == 0
      assert graph.total_num_nodes == total_num_nodes
      assert torch.equal(graph.csc_indptr, csc_indptr)
      assert torch.equal(graph.indices, indices)
      assert graph.node_type_to_id == node_type_to_id
      assert graph.edge_type_to_id == edge_type_to_id
      assert torch.equal(graph.node_type_offset, node_type_offset)
      assert torch.equal(graph.type_per_edge, type_per_edge)
  
imports: import os
  import pickle
  import re
  import tempfile
  import unittest
  import backend
  import dgl
  import dgl.graphbolt
  import pytest
  import torch
  import torch.multiprocessing
  from dgl.graphbolt.base import etype_str_to_tuple
  from scipy import sparse
  from ..None import gb_test_utils
label_desc: Use image node_id 2 for calling a global function with example usage: test_hetero_empty_graph(total_num_nodes) without return types