code: def get_patch_offline(self, idx):
      data_source = torch.load(
          osp.join(
              self.path_data, "patches_source{:06d}.pt".format(idx)
          )
      )
      data_target = torch.load(
          osp.join(
              self.path_data, "patches_target{:06d}.pt".format(idx)
          )
      )
      if self.transform is not None:
          data_source = self.transform(data_source)
          data_target = self.transform(data_target)
  
      if hasattr(data_source, "multiscale"):
          batch = MultiScalePair.make_pair(data_source, data_target)
      else:
          batch = Pair.make_pair(data_source, data_target)
      return batch.contiguous()
  
imports: import numpy
  import os
  import os.path
  import torch
  from torch_geometric.data import Data
  from torch_points3d.datasets.registration.base3dmatch import Base3DMatch
  from torch_points3d.datasets.registration.utils import PatchExtractor
  from torch_points3d.datasets.registration.utils import tracked_matches
  from torch_points3d.datasets.registration.pair import Pair, MultiScalePair
  from torch_points3d.metrics.registration_tracker import PatchRegistrationTracker
  from torch_points3d.metrics.registration_tracker import FragmentRegistrationTracker
  from torch_points3d.datasets.registration.base_siamese_dataset import BaseSiameseDataset
  from torch_points3d.datasets.registration.base_siamese_dataset import GeneralFragment
  from torch_points3d.datasets.registration.utils import compute_overlap_and_matches
  from torch_points3d.datasets.registration.test3dmatch import TestPair3DMatch
label_desc: Use image node_id 3 for calling the Patch3DMatch obj's underlying member method code with example usage: obj.get_patch_offline(idx) and returns: batch