class_docstr: The sampling input of
  :meth:`~torch_geometric.sampler.BaseSampler.sample_from_nodes`.
  
  Args:
      input_id (torch.Tensor, optional): The indices of the data loader input
          of the current mini-batch.
      node (torch.Tensor): The indices of seed nodes to start sampling from.
      time (torch.Tensor, optional): The timestamp for the seed nodes.
          (default: :obj:`None`)
      input_type (str, optional): The input node type (in case of sampling in
          a heterogeneous graph). (default: :obj:`None`)
code: def __init__(
      self,
      input_id: OptTensor,
      node: Tensor,
      time: OptTensor = None,
      input_type: Optional[NodeType] = None,
  ):
      if input_id is not None:
          input_id = input_id.cpu()
      node = node.cpu()
      if time is not None:
          time = time.cpu()
  
      self.input_id = input_id
      self.node = node
      self.time = time
      self.input_type = input_type
  
imports: import copy
  import math
  import warnings
  from abc import ABC
  from collections import defaultdict
  from dataclasses import dataclass
  from enum import Enum
  from typing import Any, Dict, List, Optional, Union
  import torch
  from torch import Tensor
  from torch_geometric.data import Data, FeatureStore, GraphStore, HeteroData
  from torch_geometric.sampler.utils import to_bidirectional
  from torch_geometric.typing import EdgeType, EdgeTypeStr, NodeType, OptTensor
  from torch_geometric.utils.mixin import CastMixin
label_desc: Use image node_id 1 to create a new NodeSamplerInput object from inherited base classes: CastMixin with example: obj = NodeSamplerInput(input_id, node, time, input_type)