code: def __init__(self, ratio=None, k=None, *args, **kwargs):
      super(RandlaConv, self).__init__(
          RandomSampler(ratio), KNNNeighbourFinder(k), *args, **kwargs
      )
      if (
          kwargs.get("index") == 0
          and kwargs.get("nb_feature") is not None
      ):
          kwargs["point_pos_nn"][-1] = kwargs.get("nb_feature")
          kwargs["attention_nn"][0] = kwargs["attention_nn"][-1] = (
              kwargs.get("nb_feature") * 2
          )
          kwargs["down_conv_nn"][0] = kwargs.get("nb_feature") * 2
      self._conv = RandlaKernel(
          *args, global_nn=kwargs["down_conv_nn"], **kwargs
      )
  
imports: import torch
  import torch.nn.functional
  from torch_geometric.nn import MessagePassing
  from torch_points3d.core.spatial_ops import *
  from torch_points3d.core.base_conv.message_passing import *
label_desc: Use image node_id 1 to create a new RandlaConv object from inherited base classes: BaseConvolutionDown with example: obj = RandlaConv(ratio, k)