code: def __init__(
      self,
      num_nodes_dict: Dict[str, int],
      etype_id_dict: Dict[int, Tuple[str, str, str]],
      etype_offset_dict: Dict[Tuple[str, str, str], int],
      ntype_offset_dict: Dict[str, int],
      edge_dir: str = "in",
  ):
      self.num_nodes_dict = num_nodes_dict
      self.etype_id_dict = etype_id_dict
      self.etype_offset_dict = etype_offset_dict
      self.ntype_offset_dict = ntype_offset_dict
      self.edge_dir = edge_dir
      self._current_batch_fn = None
      self._input_files = None
  
imports: from __future__ import annotations
  from typing import Tuple, Dict, Optional, List, Union
  import os
  import cudf
  from cugraph.utilities.utils import import_optional
  from cugraph_dgl.dataloading.utils.sampling_helpers import create_homogeneous_sampled_graphs_from_dataframe, create_heterogeneous_sampled_graphs_from_dataframe, create_homogeneous_sampled_graphs_from_dataframe_csc
label_desc: Use image node_id 1 to create a new HeterogenousBulkSamplerDataset object from inherited base classes: torch.utils.data with example: obj = HeterogenousBulkSamplerDataset(num_nodes_dict, etype_id_dict, etype_offset_dict, ntype_offset_dict, edge_dir)