code: def test_multi_num_search(self):
      x = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
      batch_x = torch.tensor([0, 0, 0, 0])
      y = torch.Tensor([[-1, 0], [1, 0]])
      batch_y = torch.tensor([0, 0])
      nei_finder = MultiscaleRadiusNeighbourFinder(10, [3, 4])
      multiscale = []
      for i in range(2):
          multiscale.append(nei_finder(x, y, batch_x, batch_y, i))
  
      self.assertEqual(len(multiscale), 2)
      self.assertEqual(multiscale[0][1, :].shape[0], 6)
      self.assertEqual(multiscale[1][1, :].shape[0], 8)
  
file_path: torch-points3d/test/test_sampler.py
imports: import unittest
  import torch
  from torch_geometric.data import Data
  from torch_points3d.core.spatial_ops import FPSSampler, RandomSampler, RadiusNeighbourFinder, MultiscaleRadiusNeighbourFinder
  from torch_points3d.modules.VoteNet.dense_samplers import FPSSamplerToDense
label_desc: Use image node_id 3 for calling the TestNeighboorhoodSearch obj's underlying member method code with example usage: obj.test_multi_num_search() without return types