docstr: Transform global `KeyedJaggedTensor`s to local ones.
  
  Args:
      kjt_dict: dict keyed by module path of global kjts.
  Return:
      Dict[str, KeyedJaggedTensor]
      List[torch.classes.tde.FetchHandle]: list of fetch handles to wait.
docstr_tok: ["Transform","global","`","KeyedJaggedTensor","`","s","to","local","ones",".","Args",":","kjt_dict",":","dict","keyed","by","module","path","of","global","kjts",".","Return",":","Dict","[","str",",","KeyedJaggedTensor","]","List","[","torch.classes.tde.FetchHandle","]",":","list","of","fetch","handles","to","wait","."]
code: def transform(self, kjt_dict: Dict[str, KeyedJaggedTensor]):
      """
      Transform global `KeyedJaggedTensor`s to local ones.
  
      Args:
          kjt_dict: dict keyed by module path of global kjts.
      Return:
          Dict[str, KeyedJaggedTensor]
          List[torch.classes.tde.FetchHandle]: list of fetch handles to wait.
      """
      result = {}
      fetch_handles = []
      if self._parallel:
          for path, kjt in kjt_dict.items():
              if path not in self._id_transformer_collections:
                  raise ValueError(
                      f"kjt_dict contain invalid path {path}. "
                      f"should be one of {self._id_transformer_collections.keys()}"
                  )
              self._input_queues[path].put(kjt)
  
          for path in kjt_dict:
              kjt, handles = self._output_queues[path].get()
              result[path] = kjt
              fetch_handles.extend(handles)
      else:
          for path, kjt in kjt_dict.items():
              if path not in self._id_transformer_collections:
                  raise ValueError(
                      f"kjt_dict contain invalid path {path}. "
                      f"should be one of {self._id_transformer_collections.keys()}"
                  )
              kjt, handles = self._id_transformer_collections[
                  path
              ].transform(kjt)
              result[path] = kjt
              fetch_handles.extend(handles)
      return result, fetch_handles
  
file_path: torchrec/contrib/dynamic_embedding/src/torchrec_dynamic_embedding/id_transformer_group.py
imports: import queue
  import threading
  from typing import Dict, List, Union
  from torchrec import EmbeddingBagConfig, EmbeddingConfig, KeyedJaggedTensor
  from torchrec.distributed.model_parallel import DistributedModelParallel
  from .id_transformer_collection import IDTransformerCollection
  from .ps import PSCollection
  from .utils import _get_sharded_modules_recursive
label_desc: Use image node_id 2 for calling the IDTransformerGroup obj's underlying member method code with example usage: obj.transform(kjt_dict) and returns: result,  fetch_handles