docstr: from a list of torch_points3d.datasets.registation.pair.Pair objects, create
  a batch
  Warning : follow_batch is not here yet...
docstr_tok: ["from","a","list","of","torch_points3d.datasets.registation.pair.Pair","objects",",","create","a","batch","Warning",":","follow_batch","is","not","here","yet","..."]
code: def from_data_list(data_list):
      r"""
      from a list of torch_points3d.datasets.registation.pair.Pair objects, create
      a batch
      Warning : follow_batch is not here yet...
      """
      assert isinstance(data_list[0], Pair)
      data_list_s, data_list_t = list(
          map(list, zip(*[data.to_data() for data in data_list]))
      )
      if hasattr(data_list_s[0], "pair_ind"):
          pair_ind = concatenate_pair_ind(data_list_s, data_list_t)
      else:
          pair_ind = None
      batch_s = Batch.from_data_list(data_list_s)
      batch_t = Batch.from_data_list(data_list_t)
      pair = PairBatch.make_pair(batch_s, batch_t)
      pair.pair_ind = pair_ind
      return pair.contiguous()
  
imports: import torch
  from typing import List, Optional
  from torch_geometric.data import Data
  from torch_geometric.data import Batch
  from torch_points3d.datasets.multiscale_data import MultiScaleBatch, MultiScaleData
  import re
label_desc: Use image node_id 2 for calling the PairBatch obj's underlying member method code with example usage: obj.from_data_list(data_list) and returns: pair