class_docstr: Coordinator actor for routing blocks to output splits.
  
  This actor runs a streaming executor locally on its main thread. Clients can
  retrieve results via actor calls running on other threads.
class_docstr_tok: ["Coordinator","actor","for","routing","blocks","to","output","splits",".","This","actor","runs","a","streaming","executor","locally","on","its","main","thread",".","Clients","can","retrieve","results","via","actor","calls","running","on","other","threads","."]
docstr: Returns stats from the base dataset.
docstr_tok: ["Returns","stats","from","the","base","dataset","."]
code: def stats(self) -> DatasetStatsSummary:
      """Returns stats from the base dataset."""
      if self._executor:
          return self._executor.get_stats().to_summary()
      return self._base_dataset._get_stats_summary()
  
imports: import copy
  import logging
  import threading
  import time
  from dataclasses import replace
  from typing import TYPE_CHECKING, Dict, Iterator, List, Optional, Tuple, Union
  import ray
  from ray.data._internal.execution.interfaces import NodeIdStr, RefBundle
  from ray.data._internal.execution.legacy_compat import execute_to_legacy_bundle_iterator
  from ray.data._internal.execution.operators.output_splitter import OutputSplitter
  from ray.data._internal.execution.streaming_executor import StreamingExecutor
  from ray.data._internal.stats import DatasetStats, DatasetStatsSummary
  from ray.data._internal.util import create_dataset_tag
  from ray.data.block import Block, BlockMetadata
  from ray.data.iterator import DataIterator
  from ray.types import ObjectRef
  from ray.util.debug import log_once
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
label_desc: Use image node_id 2 for calling the SplitCoordinator obj's underlying member method code with example usage: obj.stats() and returns: self, self