class_docstr: Clusters points into fixed-sized voxels
  (functional name: :obj:`grid_sampling`).
  Each cluster returned is a new point based on the mean of all points
  inside the given cluster.
  
  Args:
      size (float or [float] or Tensor): Size of a voxel (in each dimension).
      start (float or [float] or Tensor, optional): Start coordinates of the
          grid (in each dimension). If set to :obj:`None`, will be set to the
          minimum coordinates found in :obj:`data.pos`.
          (default: :obj:`None`)
      end (float or [float] or Tensor, optional): End coordinates of the grid
          (in each dimension). If set to :obj:`None`, will be set to the
          maximum coordinates found in :obj:`data.pos`.
          (default: :obj:`None`)
code: def __init__(
      self,
      size: Union[float, List[float], Tensor],
      start: Optional[Union[float, List[float], Tensor]] = None,
      end: Optional[Union[float, List[float], Tensor]] = None,
  ) -> None:
      self.size = size
      self.start = start
      self.end = end
  
file_path: pytorch_geometric/torch_geometric/transforms/grid_sampling.py
imports: import re
  from typing import List, Optional, Union
  import torch
  from torch import Tensor
  import torch_geometric
  from torch_geometric.data import Data
  from torch_geometric.data.datapipes import functional_transform
  from torch_geometric.transforms import BaseTransform
  from torch_geometric.utils import one_hot, scatter
label_desc: Use image node_id 1 to create a new GridSampling object from inherited base classes: BaseTransform with example: obj = GridSampling(size, start, end)