code: def timeRange(
      start: Time_t, end: Time_t, step: float
  ) -> Iterator[dt.datetime]:
      """
      Iterator that waits periodically until certain time points are
      reached while yielding those time points.
  
      Args:
          start: Start time, can be specified as datetime.datetime,
              or as datetime.time in which case today is used as the date
          end: End time, can be specified as datetime.datetime,
              or as datetime.time in which case today is used as the date
          step (float): The number of seconds of each period
      """
      assert step > 0
      delta = dt.timedelta(seconds=step)
      t = _fillDate(start)
      tz = dt.timezone.utc if t.tzinfo else None
      now = dt.datetime.now(tz)
      while t < now:
          t += delta
      while t <= _fillDate(end):
          waitUntil(t)
          yield t
          t += delta
  
imports: import asyncio
  import datetime
  import logging
  import math
  import signal
  import sys
  import time
  from dataclasses import fields, is_dataclass
  from typing import AsyncIterator, Awaitable, Callable, Iterator, List, Optional, Union
  import eventkit
label_desc: Use image node_id 19 for calling a global function with example usage: timeRange(start, end, step) without return types