def METHOD_NAME(self, partitions: Sequence[str]) -> OptimizationSchedule:
    """
    Get the next schedule for optimizing partitions. The provided partitions
    are subdivided into parallel number of partitions and the cutoff time
    for each schedule is determined by when parallelism boundaries are
    reached.
    """
    current_time = datetime.now()
    if current_time >= self.__full_job_end_time:
        raise OptimizedSchedulerTimeout(
            f"Optimize job cutoff time exceeded "
            f"{self.__full_job_end_time}. Abandoning"
        )
    if self.__parallel == 1:
        return OptimizationSchedule(
            partitions=[self.sort_partitions(partitions)],
            cutoff_time=self.__last_midnight
            + timedelta(hours=settings.OPTIMIZE_JOB_CUTOFF_TIME),
        )
    else:
        if current_time < self.__parallel_start_time:
            return OptimizationSchedule(
                partitions=[self.sort_partitions(partitions)],
                cutoff_time=self.__parallel_start_time,
            )
        elif current_time < self.__parallel_end_time:
            return OptimizationSchedule(
                partitions=self.subdivide_partitions(partitions, self.__parallel),
                cutoff_time=self.__parallel_end_time,
                start_time_jitter_minutes=self.start_time_jitter(),
            )
        else:
            return OptimizationSchedule(
                partitions=[self.sort_partitions(partitions)],
                cutoff_time=self.__full_job_end_time,
            )