class_docstr: Class used during disjoint heterogeneous sampling.
  1) The batch to serve as initial subgraph IDs for source nodes in the next
     layer.
  2) The subgraph IDs with duplicates that are further needed to create COO
     output.
  3) The output subgraph IDs without duplicates.
code: def __init__(self, node_types, num_hops):
      self.src: Dict[NodeType, List[Tensor]] = {
          k: (num_hops + 1) * [torch.empty(0, dtype=torch.int64)]
          for k in node_types
      }
      self.with_dupl: Dict[NodeType, Tensor] = {
          k: torch.empty(0, dtype=torch.int64) for k in node_types
      }
      self.out: Dict[NodeType, Tensor] = {
          k: torch.empty(0, dtype=torch.int64) for k in node_types
      }
  
file_path: pytorch_geometric/torch_geometric/distributed/utils.py
imports: from typing import Dict, List, Optional, Tuple, Union
  import numpy
  import torch
  from torch import Tensor
  from torch_geometric.data import HeteroData
  from torch_geometric.distributed import LocalFeatureStore, LocalGraphStore
  from torch_geometric.sampler import SamplerOutput
  from torch_geometric.typing import EdgeType, NodeType
label_desc: Use image node_id 1 to create a new BatchDict object  with example: obj = BatchDict(node_types, num_hops)