class_docstr: siamese neural network using Kernel Point
  Convolution to learn descriptors on patch(for registration).
code: def set_input(self, data, device):
      data = data.to(device)
      data.x = add_ones(data.pos, data.x, True)
      self.batch_idx = data.batch
      if isinstance(data, PairMultiScaleBatch):
          self.pre_computed = data.multiscale
      else:
          self.pre_computed = None
      if getattr(data, "pos_target", None) is not None:
          data.x_target = add_ones(data.pos_target, data.x_target, True)
          if isinstance(data, PairMultiScaleBatch):
              self.pre_computed_target = data.multiscale_target
              del data.multiscale_target
          else:
              self.pre_computed_target = None
  
          self.input, self.input_target = data.to_data()
          self.batch_idx_target = data.batch_target
          rang = torch.arange(0, data.batch_idx[-1])
          rang_target = torch.arange(0, data.batch_idx_target[-1])
          assert len(rang) == len(rang_target)
          self.labels = torch.cat([rang, rang_target], 0).to(device)
      else:
          self.input = data
          self.labels = None
  
imports: from typing import Any
  import torch
  import torch.nn.functional
  from torch.nn import Linear
  from torch.nn import Sequential
  from torch_geometric.data import Data
  from torch_geometric.nn import global_mean_pool
  import logging
  from torch_points3d.core.losses import *
  from torch_points3d.core.common_modules import MLP
  from torch_points3d.core.common_modules import FastBatchNorm1d
  from torch_points3d.core.base_conv.partial_dense import *
  from torch_points3d.models.registration.base import FragmentBaseModel
  from torch_points3d.models.base_architectures import BackboneBasedModel
  from torch_points3d.models.registration.base import create_batch_siamese
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.models.base_architectures.unet import UnwrappedUnetBasedModel
  from torch_points3d.modules.KPConv import *
  from torch_points3d.datasets.registration.pair import PairMultiScaleBatch
label_desc: Use image node_id 3 for calling the PatchKPConv obj's underlying member method code with example usage: obj.set_input(data, device) without return types