class_docstr: Input shape: (B, C_in, npoint, nsample)
  Output shape: (B, C_out, npoint)
class_docstr_tok: ["Input","shape",":","(","B",",","C_in",",","npoint",",","nsample",")","Output","shape",":","(","B",",","C_out",",","npoint",")"]
code: def forward(
      self, input
  ):  # input: (B, 3 + 3 + C_in, npoint, centroid + nsample)
      x = input[
          :, 3:, :, :
      ]  # (B, C_in, npoint, nsample+1), input features
      nsample = x.size()[3]
      abs_coord = input[
          :, 0:3, :, :
      ]  # (B, 3, npoint, nsample+1), absolute coordinates
      delta_x = input[
          :, 3:6, :, :
      ]  # (B, 3, npoint, nsample+1), normalized coordinates
  
      coord_xi = abs_coord[:, :, :, 0:1].repeat(
          1, 1, 1, nsample
      )  # (B, 3, npoint, nsample),  centroid point
      h_xi_xj = torch.norm(delta_x, p=2, dim=1).unsqueeze(1)
      h_xi_xj = torch.cat(
          (h_xi_xj, coord_xi, abs_coord, delta_x), dim=1
      )
  
      h_xi_xj = self.mapping_func2(
          self.activation(self.bn_mapping(self.mapping_func1(h_xi_xj)))
      )
  
      if self.first_layer:
          x = self.activation(self.bn_xyz_raising(self.xyz_raising(x)))
      x = F.max_pool2d(
          self.activation(self.bn_rsconv(torch.mul(h_xi_xj, x))),
          kernel_size=(1, nsample),
      ).squeeze(
          3
      )  # (B, C_in, npoint)
      x = self.activation(self.bn_channel_raising(self.cr_mapping(x)))
      return x
  
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 2 for calling the OriginalRSConv obj's underlying member method code with example usage: obj.forward(input) and returns: x