code: def set_input(self, data, device):
      coords = torch.cat(
          [data.batch.unsqueeze(-1).int(), data.coords.int()], -1
      )
      self.input = ME.SparseTensor(
          features=data.x, coordinates=coords, device=device
      )
      self.xyz = data.pos.to(device)
      if hasattr(data, "pos_target"):
          coords_target = torch.cat(
              [
                  data.batch_target.unsqueeze(-1).int(),
                  data.coords_target.int(),
              ],
              -1,
          )
          self.input_target = ME.SparseTensor(
              features=data.x_target,
              coordinates=coords_target,
              device=device,
          )
          self.xyz_target = data.pos_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 logging
  import torch
  from torch_geometric.data import Data
  from torch_points3d.modules.MinkowskiEngine import *
  from torch_points3d.models.base_architectures import UnwrappedUnetBasedModel
  from torch_points3d.models.registration.base import FragmentBaseModel
  from torch.nn import Sequential, Linear, LeakyReLU, Dropout
  from torch_points3d.core.common_modules import FastBatchNorm1d, Seq
label_desc: Use image node_id 2 for calling the BaseMinkowski obj's underlying member method code with example usage: obj.set_input(data, device) without return types