class_docstr: [This class handles the special mechanism between the msg
  and the features of RSConv]
class_docstr_tok: ["[","This","class","handles","the","special","mechanism","between","the","msg","and","the","features","of","RSConv","]"]
docstr: features  -- [B, C, num_points, nsamples]
  msg  -- [B, 10, num_points, nsamples]
  
  The 10 features comes from [distance: 1,
                              coord_origin:3,
                              coord_target:3,
                              delta_origin_target:3]
code: def forward(self, features, msg):
      """
      features  -- [B, C, num_points, nsamples]
      msg  -- [B, 10, num_points, nsamples]
  
      The 10 features comes from [distance: 1,
                                  coord_origin:3,
                                  coord_target:3,
                                  delta_origin_target:3]
      """
  
      # Transform msg
      msg = self.nn["mlp_msg"](msg)
  
      # If first_layer, augment features_size
      if self._first_layer:
          features = self.nn["features_nn"](features)
  
      return self.nn["norm"](torch.mul(features, msg))
  
imports: import logging
  import torch
  from torch.nn import Sequential
  import torch.nn
  import torch.nn.functional
  from torch.nn import Conv1d
  import torch_points_kernels
  from torch_points3d.core.base_conv.dense import *
  from torch_points3d.core.common_modules.dense_modules import MLP2D
  from torch_points3d.core.spatial_ops import DenseFPSSampler, DenseRadiusNeighbourFinder
  from torch_points3d.utils.colors import COLORS
label_desc: Use image node_id 3 for calling the RSConvMapper obj's underlying member method code with example usage: obj.forward(features, msg) and returns: self