docs: def _schedule_next_run(self):
          """
          Compute the instant when this job should run next.
          """
          if self.unit not in ('seconds', 'minutes', 'hours', 'days', 'weeks'):
              raise ScheduleValueError('Invalid unit')
  
          if self.latest is not None:
              if not (self.latest >= self.interval):
                  raise ScheduleError('`latest` is greater than `interval`')
              interval = random.randint(self.interval, self.latest)
          else:
              interval = self.interval
  
          self.period = datetime.timedelta(**{self.unit: interval})
          self.next_run = datetime.datetime.now() + self.period
          if self.start_day is not None:
              if self.unit != 'weeks':
                  raise ScheduleValueError('`unit` should be \'weeks\'')
              weekdays = (
                  'monday',
                  'tuesday',
                  'wednesday',
                  'thursday',
                  'friday',
                  'saturday',
                  'sunday'
              )
              if self.start_day not in weekdays:
                  raise ScheduleValueError('Invalid start day')
              weekday = weekdays.index(self.start_day)
              days_ahead = weekday - self.next_run.weekday()
              if days_ahead <= 0:  # Target day already happened this week
                  days_ahead += 7
              self.next_run += datetime.timedelta(days_ahead) - self.period
          if self.at_time is not None:
              if (self.unit not in ('days', 'hours', 'minutes')
                      and self.start_day is None):
                  raise ScheduleValueError(('Invalid unit without'
                                            ' specifying start day'))
              kwargs = {
                  'second': self.at_time.second,
                  'microsecond': 0
              }
              if self.unit == 'days' or self.start_day is not None:
                  kwargs['hour'] = self.at_time.hour
              if self.unit in ['days', 'hours'] or self.start_day is not None:
                  kwargs['minute'] = self.at_time.minute
              self.next_run = self.next_run.replace(**kwargs)
              # If we are running for the first time, make sure we run
              # at the specified time *today* (or *this hour*) as well
              if not self.last_run:
                  now = datetime.datetime.now()
                  if (self.unit == 'days' and self.at_time > now.time() and
                          self.interval == 1):
                      self.next_run = self.next_run - datetime.timedelta(days=1)
                  elif self.unit == 'hours' \
                          and self.at_time.minute > now.minute \
                          or (self.at_time.minute == now.minute
                              and self.at_time.second > now.second):
                      self.next_run = self.next_run - datetime.timedelta(hours=1)
                  elif self.unit == 'minutes' \
                          and self.at_time.second > now.second:
                      self.next_run = self.next_run - \
                                      datetime.timedelta(minutes=1)
          if self.start_day is not None and self.at_time is not None:
              # Let's see if we will still make that time we specified today
              if (self.next_run - datetime.datetime.now()).days >= 7:
                  self.next_run -= self.period