code: def _get_checkpoint_paths(
      ckpt_dir: Union[str, os.PathLike],
      step: Union[int, float],
      prefix: str = "checkpoint_",
  ) -> Tuple[str, str, str]:
      """Generate the checkpoint paths used in this save operation."""
      ckpt_dir = os.fspath(ckpt_dir)  # Pathlib -> str
      logging.info("Saving checkpoint at step: %s", step)
      # normalize path because io.glob() can modify path './', '//' ...
      ckpt_dir = safe_normpath(ckpt_dir)
      ckpt_tmp_path = _checkpoint_path(ckpt_dir, "tmp", prefix)
      ckpt_path = _checkpoint_path(ckpt_dir, step, prefix)
      base_path = os.path.join(ckpt_dir, prefix)
      return ckpt_path, ckpt_tmp_path, base_path
  
imports: import functools
  import os
  import pathlib
  import re
  import time
  import warnings
  from concurrent.futures import thread
  from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Type, Union
  import jax
  import orbax.checkpoint
  from absl import logging
  from jax import monitoring, process_index
  from jax import tree_util
  from jax.experimental.array_serialization.serialization import GlobalAsyncCheckpointManager, get_tensorstore_spec
  from jax.experimental.multihost_utils import sync_global_devices
  from flax import config, core, errors, io, serialization, traverse_util
  from flax.training import orbax_utils
label_desc: Use image node_id 17 for calling a global function with example usage: _get_checkpoint_paths(ckpt_dir, step, prefix) and returns: ckpt_path,  ckpt_tmp_path,  base_path