docstr: Parameters
  ----------
  xyz : torch.Tensor
      xyz coordinates of the features (B, N, 3)
  new_xyz : torch.Tensor
      centriods (B, npoint, 3)
  features : torch.Tensor
      Descriptors of the features (B, C, N)
  
  Returns
  -------
  new_features : torch.Tensor
      (B, 3 + C, npoint, nsample) tensor
code: def _prepare_features(
      self,
      xyz: torch.Tensor,
      new_xyz: torch.Tensor,
      features: torch.Tensor = None,
      idx: torch.Tensor = None,
  ) -> torch.Tensor:
      """
      Parameters
      ----------
      xyz : torch.Tensor
          xyz coordinates of the features (B, N, 3)
      new_xyz : torch.Tensor
          centriods (B, npoint, 3)
      features : torch.Tensor
          Descriptors of the features (B, C, N)
  
      Returns
      -------
      new_features : torch.Tensor
          (B, 3 + C, npoint, nsample) tensor
      """
      xyz_trans = xyz.transpose(1, 2).contiguous()
      grouped_xyz = tp.grouping_operation(
          xyz_trans, idx
      )  # (B, 3, npoint, nsample)
      raw_grouped_xyz = grouped_xyz
      grouped_xyz -= new_xyz.transpose(1, 2).unsqueeze(-1)
  
      if features is not None:
          grouped_features = tp.grouping_operation(features, idx)
          if self.use_xyz:
              new_features = torch.cat(
                  [raw_grouped_xyz, grouped_xyz, grouped_features],
                  dim=1,
              )  # (B, 3 + 3 + C, npoint, nsample)
          else:
              new_features = grouped_features
      else:
          assert (
              self.use_xyz
          ), "Cannot have not features and not use xyz as a feature!"
          new_features = torch.cat(
              [raw_grouped_xyz, grouped_xyz], dim=1
          )
  
      return new_features
  
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 RSConvOriginalMSGDown obj's underlying member method code with example usage: obj._prepare_features(xyz, new_xyz, features, idx) and returns: new_features