code: def conv(self, pos, pos_skip, x):
      assert pos_skip.shape[2] == 3
  
      if pos is not None:
          dist, idx = tp.three_nn(pos_skip, pos)
          dist_recip = 1.0 / (dist + 1e-8)
          norm = torch.sum(dist_recip, dim=2, keepdim=True)
          weight = dist_recip / norm
          interpolated_feats = tp.three_interpolate(x, idx, weight)
      else:
          interpolated_feats = x.expand(
              *(x.size()[0:2] + (pos_skip.size(1),))
          )
  
      return interpolated_feats
  
imports: import numpy
  import torch
  from torch.nn import Linear, ReLU, LeakyReLU, BatchNorm1d, Dropout
  from torch_geometric.nn import knn_interpolate, fps, radius, global_max_pool, global_mean_pool, knn
  from torch_geometric.data import Data
  import torch_points_kernels
  from torch_points3d.core.spatial_ops import BaseMSNeighbourFinder
  from torch_points3d.core.base_conv import BaseConvolution
  from torch_points3d.core.common_modules.dense_modules import MLP2D
  from torch_points3d.utils.enums import ConvolutionFormat
  from torch_points3d.utils.model_building_utils.activation_resolver import get_activation
label_desc: Use image node_id 2 for calling the DenseFPModule obj's underlying member method code with example usage: obj.conv(pos, pos_skip, x) and returns: interpolated_feats