code: def test_double_grid_sampling(self):
      data_random = Data(
          pos=torch.randn(1000, 3) * 0.1, x=torch.ones((1000, 1))
      )
      data_fragment = torch.load(
          os.path.join(DIR_PATH, "test_data/fragment_000003.pt")
      )
  
      sparse = cT.GridSampling3D(0.02, quantize_coords=True)
      gr = cT.GridSampling3D(0.02)
  
      self.loop(data_random, gr, gr, "random")
      self.loop(data_fragment, gr, sparse, "fragment")
  
file_path: torch-points3d/test/test_grid_sampling.py
imports: import os
  import sys
  import numpy
  import torch
  import unittest
  import h5py
  import numpy.testing
  import numpy.matlib
  from torch_geometric.data import Data
  import torch_points3d.core.data_transform
label_desc: Use image node_id 4 for calling the TestGridSampling3D obj's underlying member method code with example usage: obj.test_double_grid_sampling() without return types