code: def set_input(self, data, device):
      self.input, self.input_target = data.to_data()
      self.input = self.input.to(device)
      if getattr(data, "pos_target", None) is not None:
          self.input_target = self.input_target.to(device)
          self.match = data.pair_ind.to(torch.long).to(device)
          self.size_match = data.size_pair_ind.to(torch.long).to(device)
      else:
          self.match = None
  
imports: import torch
  import torch.nn
  from torch.nn import LeakyReLU, Linear, Sequential
  from torch_geometric.nn.pool.consecutive import consecutive_cluster
  from torch_geometric.nn import voxel_grid
  from torch_geometric.data import Batch
  from torch_scatter import scatter_max, scatter_mean
  from torch_points3d.applications.sparseconv3d import SparseConv3d
  from torch_points3d.core.common_modules import FastBatchNorm1d, Seq
  from torch_points3d.core.common_modules import MLP
  from torch_points3d.models.registration.base import FragmentBaseModel
label_desc: Use image node_id 2 for calling the BaseMS_SparseConv3d obj's underlying member method code with example usage: obj.set_input(data, device) without return types