class_docstr: Multiscale radius search for dense graphs
      
code: def find_neighbours(self, x, y, scale_idx=0):
      if scale_idx >= self.num_scales:
          raise ValueError(
              "Scale %i is out of bounds %i"
              % (scale_idx, self.num_scales)
          )
      num_neighbours = self._max_num_neighbors[scale_idx]
      neighbours = tp.ball_query(
          self._radius[scale_idx], num_neighbours, x, y
      )[0]
  
      if DEBUGGING_VARS["FIND_NEIGHBOUR_DIST"]:
          for i in range(neighbours.shape[0]):
              start = neighbours[i, :, 0]
              valid_neighbours = (
                  neighbours[i, :, 1:]
                  != start.view((-1, 1)).repeat(1, num_neighbours - 1)
              ).sum(1) + 1
              self._dist_meters[scale_idx].add_valid_neighbours(
                  valid_neighbours
              )
      return neighbours
  
imports: from abc import ABC, abstractmethod
  from typing import List, Union, cast
  import torch
  from torch_geometric.nn import knn, radius
  import torch_points_kernels
  from torch_points3d.utils.config import is_list
  from torch_points3d.utils.enums import ConvolutionFormat
  from torch_points3d.utils.debugging_vars import DEBUGGING_VARS, DistributionNeighbour
label_desc: Use image node_id 1 for calling the DenseRadiusNeighbourFinder obj's underlying member method code with example usage: obj.find_neighbours(x, y, scale_idx) and returns: neighbours