class_docstr: Rule for reordering RandomizeBlocks logical operator.
  
  Reordering RandomizeBlocks operators is to help fuse multiple
  AbstractUDFMap operators together for better performance.
  
  1. Dedupes multiple RandomizeBlocks operators if they are not seeded.
  2. Moves RandomizeBlocks operator to the end of a sequence of AbstractUDFMap
  operators. RandomizeBlocks operators are not moved across AbstractAllToAll operator
  boundaries.
code: def apply(self, plan: LogicalPlan) -> LogicalPlan:
      optimized_dag: LogicalOperator = self._apply(plan.dag)
      return LogicalPlan(dag=optimized_dag)
  
file_path: ray/python/ray/data/_internal/logical/rules/randomize_blocks.py
imports: import copy
  from collections import deque
  from ray.data._internal.logical.interfaces import LogicalOperator, LogicalPlan, Rule
  from ray.data._internal.logical.operators.all_to_all_operator import AbstractAllToAll, RandomizeBlocks
label_desc: Use image node_id 1 for calling the ReorderRandomizeBlocksRule obj's underlying member method code with example usage: obj.apply(plan) and returns: LogicalPlan