docstr: transform data with `data_info`
docstr_tok: ["transform","data","with","`","data_info","`"]
code: def _transform_fn(self, data):
      """
      transform data with `data_info`
      """
      if self._data_info is None:
          data_info = {}
          path_idx = 0
          for i in range(len(data)):
              if isinstance(data[i], KeyedJaggedTensor):
                  if path_idx >= len(self._paths):
                      raise ValueError(
                          "Has more KJT in a data sample than the number of modules, "
                          "could not infer data_info, please set data_info manually"
                      )
                  data_info[i] = self._paths[path_idx]
                  path_idx += 1
      else:
          data_info = self._data_info
      global_kjts = {path: data[idx] for idx, path in data_info.items()}
      cache_kjts, fetch_handles = self._id_transformer_group.transform(
          global_kjts
      )
      data = list(data)
      for idx, path in data_info.items():
          data[idx] = cache_kjts[path]
      return tuple(data), fetch_handles
  
imports: import queue
  import threading
  from typing import Dict, List, Union
  import torch
  from torch.utils.data._utils import MP_STATUS_CHECK_INTERVAL
  from torchrec import EmbeddingBagConfig, EmbeddingConfig
  from torchrec.distributed.model_parallel import DistributedModelParallel
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
  from .id_transformer_group import IDTransformerGroup
label_desc: Use image node_id 2 for calling the DataLoader obj's underlying member method code with example usage: obj._transform_fn(data) and returns: tuple,  fetch_handles