class_docstr: Implementation of `Dataset.randomize_blocks()`.
code: def do_randomize(self, block_list, *_):
      num_blocks = block_list.initial_num_blocks()
      if num_blocks == 0:
          return block_list, {}
      randomized_block_list = block_list.randomize_block_order(
          self._seed
      )
      return randomized_block_list, {}
  
imports: import itertools
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
  import ray
  from ray.data._internal.block_list import BlockList
  from ray.data._internal.delegating_block_builder import DelegatingBlockBuilder
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data._internal.fast_repartition import fast_repartition
  from ray.data._internal.plan import AllToAllStage
  from ray.data._internal.remote_fn import cached_remote_fn
  from ray.data._internal.shuffle_and_partition import PushBasedShufflePartitionOp, SimpleShufflePartitionOp
  from ray.data._internal.sort import SortKey, sort_impl
  from ray.data._internal.split import _split_at_index, _split_at_indices
  from ray.data.block import Block, BlockAccessor, BlockExecStats, BlockMetadata, BlockPartition
  from ray.data.context import DataContext
label_desc: Use image node_id 2 for calling the RandomizeBlocksStage obj's underlying member method code with example usage: obj.do_randomize(block_list) and returns: randomized_block_list,  dict, block_list,  dict