code: def daterange(start, stop, step=timedelta(days=1), inclusive=False):
      
  
      # inclusive=False to behave like range by default
      total_step_secs = step.total_seconds()
      assert total_step_secs != 0
  
      if total_step_secs > 0:
          while start < stop:
              yield start
              start = start + step
      else:
          while stop < start:
              yield start
              start = start + step
  
      if inclusive and start == stop:
          yield start
docs: This method will iterate from `start` to `stop` datetimes with a timedelta step of `step`
      (supports iteration forwards or backwards in time)
  
      :param start: start datetime
      :param stop: end datetime
      :param step: step size as a timedelta
      :param inclusive: if True, last item returned will be as step closest to `end` (or `end` if no remainder).