code: def _exp_range_rows(
      exp_range: "ExpRange",
      *,
      all_headers: Iterable[str],
      fill_value: Optional[str],
      is_base: bool = False,
      **kwargs,
  ) -> Iterator[Tuple["CellT", ...]]:
      from funcy import first
  
      if len(exp_range.revs) > 1:
          logger.debug("Returning tip commit for legacy checkpoint exp")
      exp = first(exp_range.revs)
      if exp:
          row: Dict[str, "CellT"] = {k: fill_value for k in all_headers}
          row["Experiment"] = exp.name or ""
          row["rev"] = exp.rev[:7] if Git.is_sha(exp.rev) else exp.rev
          row["typ"] = "branch_base" if is_base else "branch_commit"
          row["parent"] = ""
          if exp_range.executor:
              row["State"] = exp_range.executor.state.capitalize()
              if exp_range.executor.name:
                  row["Executor"] = exp_range.executor.name.capitalize()
          if exp.data:
              row["Created"] = format_time(
                  exp.data.timestamp, fill_value=fill_value, **kwargs
              )
              row.update(
                  _data_cells(exp, fill_value=fill_value, **kwargs)
              )
          yield tuple(row.values())
  
imports: from collections import Counter, defaultdict
  from datetime import date, datetime
  from typing import TYPE_CHECKING, Any, Dict, Iterable, Iterator, List, Literal, Mapping, NamedTuple, Optional, Set, Tuple, Union
  from dvc.exceptions import InvalidArgumentError
  from dvc.log import logger
  from dvc.scm import Git
  from dvc.ui import ui
  from dvc.utils.flatten import flatten
  from .collect import collect
label_desc: Use image node_id 6 for calling a global function with example usage: _exp_range_rows(exp_range) without return types