code: def __init__(
      self, output_num_blocks: int, num_merge_tasks_per_round: int
  ):
      self.output_num_blocks = output_num_blocks
      self.num_merge_tasks_per_round = num_merge_tasks_per_round
      self.merge_partition_size = (
          output_num_blocks // num_merge_tasks_per_round
      )
      self._partitions_with_extra_task = (
          output_num_blocks % num_merge_tasks_per_round
      )
  
      if self.merge_partition_size == 0:
          self.num_merge_tasks_per_round = (
              self._partitions_with_extra_task
          )
          self.merge_partition_size = 1
          self._partitions_with_extra_task = 0
  
imports: import logging
  import math
  from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union
  import ray
  from ray.data._internal.block_list import BlockList
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data._internal.progress_bar import ProgressBar
  from ray.data._internal.remote_fn import cached_remote_fn
  from ray.data._internal.shuffle import ShuffleOp
  from ray.data.block import Block, BlockAccessor, BlockExecStats, BlockMetadata
  from ray.data.context import DataContext
  from ray.types import ObjectRef
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
label_desc: Use image node_id 1 to create a new _MergeTaskSchedule object  with example: obj = _MergeTaskSchedule(output_num_blocks, num_merge_tasks_per_round)