code: def _deserialize_fragments_with_retry(
      serialized_fragments: List[_SerializedFragment],
  ) -> List["pyarrow._dataset.ParquetFileFragment"]:
      min_interval = 0
      final_exception = None
      for i in range(FILE_READING_RETRY):
          try:
              return _deserialize_fragments(serialized_fragments)
          except Exception as e:
              import random
              import time
  
              retry_timing = (
                  ""
                  if i == FILE_READING_RETRY - 1
                  else (f"Retry after {min_interval} sec. ")
              )
              log_only_show_in_1st_retry = (
                  ""
                  if i
                  else (
                      f"If earlier read attempt threw certain Exception"
                      f", it may or may not be an issue depends on these retries "
                      f"succeed or not. serialized_fragments:{serialized_fragments}"
                  )
              )
              logger.exception(
                  f"{i + 1}th attempt to deserialize ParquetFileFragment failed. "
                  f"{retry_timing}"
                  f"{log_only_show_in_1st_retry}"
              )
              if not min_interval:
                  # to make retries of different process hit hdfs server
                  # at slightly different time
                  min_interval = 1 + random.random()
              # exponential backoff at
              # 1, 2, 4, 8, 16, 32, 64
              time.sleep(min_interval)
              min_interval = min_interval * 2
              final_exception = e
      raise final_exception
  
imports: import logging
  from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Literal, Optional, Union
  import numpy
  import ray
  import ray.cloudpickle
  from ray.data._internal.progress_bar import ProgressBar
  from ray.data._internal.remote_fn import cached_remote_fn
  from ray.data._internal.util import _check_pyarrow_version, _is_local_scheme
  from ray.data.block import Block
  from ray.data.context import DataContext
  from ray.data.datasource import Datasource
  from ray.data.datasource._default_metadata_providers import get_generic_metadata_provider
  from ray.data.datasource.datasource import ReadTask
  from ray.data.datasource.file_meta_provider import DefaultParquetMetadataProvider, ParquetMetadataProvider, _handle_read_os_error
  from ray.data.datasource.partitioning import PathPartitionFilter
  from ray.data.datasource.path_util import _has_file_extension, _resolve_paths_and_filesystem
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 2 for calling a global function with example usage: _deserialize_fragments_with_retry(serialized_fragments) and returns: _deserialize_fragments