code: def conv(self, x, pos, edge_index):
      shortcut = x
      x = self.features_downsample_nn(x)
      x, pos, edge_index, idx = self.convs(x, pos, edge_index)
      x = self.features_upsample_nn(x)
      if idx is not None:
          shortcut = shortcut[idx]
      shortcut = self.shortcut_feature_resize_nn(shortcut)
      x = shortcut + x
      return x
  
imports: from abc import abstractmethod
  from typing import *
  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 Batch
  from torch_points3d.core.base_conv.base_conv import *
  from torch_points3d.core.common_modules import *
  from torch_points3d.core.spatial_ops import *
label_desc: Use image node_id 3 for calling the BaseResnetBlockDown obj's underlying member method code with example usage: obj.conv(x, pos, edge_index) and returns: x