class_docstr: Radius search with support for multiscale for sparse graphs
  
  Arguments:
      radius {Union[float, List[float]]}
  
  Keyword Arguments:
      max_num_neighbors {Union[int, List[int]]}  (default: {64})
  
  Raises:
      ValueError: [description]
code: def __init__(
      self,
      radius: Union[float, List[float]],
      max_num_neighbors: Union[int, List[int]] = 64,
  ):
      if DEBUGGING_VARS["FIND_NEIGHBOUR_DIST"]:
          if not isinstance(radius, list):
              radius = [radius]
          self._dist_meters = [DistributionNeighbour(r) for r in radius]
          if not isinstance(max_num_neighbors, list):
              max_num_neighbors = [max_num_neighbors]
          max_num_neighbors = [256 for _ in max_num_neighbors]
  
      if not is_list(max_num_neighbors) and is_list(radius):
          self._radius = cast(list, radius)
          max_num_neighbors = cast(int, max_num_neighbors)
          self._max_num_neighbors = [
              max_num_neighbors for i in range(len(self._radius))
          ]
          return
  
      if not is_list(radius) and is_list(max_num_neighbors):
          self._max_num_neighbors = cast(list, max_num_neighbors)
          radius = cast(int, radius)
          self._radius = [
              radius for i in range(len(self._max_num_neighbors))
          ]
          return
  
      if is_list(max_num_neighbors):
          max_num_neighbors = cast(list, max_num_neighbors)
          radius = cast(list, radius)
          if len(max_num_neighbors) != len(radius):
              raise ValueError(
                  "Both lists max_num_neighbors and radius should be of the same length"
              )
          self._max_num_neighbors = max_num_neighbors
          self._radius = radius
          return
  
      self._max_num_neighbors = [cast(int, max_num_neighbors)]
      self._radius = [cast(int, radius)]
  
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 to create a new MultiscaleRadiusNeighbourFinder object from inherited base classes: BaseMSNeighbourFinder with example: obj = MultiscaleRadiusNeighbourFinder(radius, max_num_neighbors)