class_docstr: Manage shuffle execution for ray by resolve dependencies between mappers outputs and reducers inputs based on
  mapper and reducer index.
code: def _get_sorted_filled_reducers(
      reducer_subtasks: Iterable[Subtask], n_reducers: int
  ):
      # For operands such as `PSRSAlign`, sometimes `reducer_subtasks` might be less than `n_reducers`.
      # fill missing reducers with `None`.
      filled_reducers = [None] * n_reducers
      for subtask in reducer_subtasks:
          reducer_ordinal = _get_reducer_operand(
              subtask.chunk_graph
          ).reducer_ordinal
          filled_reducers[reducer_ordinal] = subtask
      return filled_reducers
  
file_path: mars/mars/services/task/execution/ray/shuffle.py
imports: import numpy
  from typing import List, Iterable
  from .....core.operand import MapReduceOperand, OperandStage
  from .....utils import lazy_import
  from ....subtask import Subtask, SubtaskGraph
label_desc: Use image node_id 2 for calling the ShuffleManager obj's underlying member method code with example usage: obj._get_sorted_filled_reducers(reducer_subtasks, n_reducers) and returns: filled_reducers