def create_reservation(
        self,
        start_time: datetime.datetime,
        end_time: datetime.datetime,
        whitelisted_users: list[str] | None = None,
    ) -> quantum.QuantumReservation:
        """Creates a reservation on this processor.

        Args:
            start_time: the starting date/time of the reservation.
            end_time: the ending date/time of the reservation.
            whitelisted_users: a list of emails that are allowed
              to send programs during this reservation (in addition to users
              with permission "quantum.reservations.use" on the project).

        Raises:
            ValueError: if start_time is after end_time.
        """
        if end_time < start_time:
            raise ValueError('End time of reservation must be after the start time')
        reservation_id = self._create_id()
        new_reservation = quantum.QuantumReservation(
            name=reservation_id,
            start_time=Timestamp(seconds=int(start_time.timestamp())),
            end_time=Timestamp(seconds=int(end_time.timestamp())),
            whitelisted_users=whitelisted_users,
        )
        time_slot = self._reservation_to_time_slot(new_reservation)
        if not self._is_available(time_slot):
            raise ValueError('Time slot is not available for reservations')

        self._reservations[reservation_id] = new_reservation
        self._insert_reservation_into(time_slot)
        return new_reservation
Creates a reservation on this processor.

        Args:
            start_time: the starting date/time of the reservation.
            end_time: the ending date/time of the reservation.
            whitelisted_users: a list of emails that are allowed
              to send programs during this reservation (in addition to users
              with permission "quantum.reservations.use" on the project).

        Raises:
            ValueError: if start_time is after end_time.
        
cirq-google/cirq_google/engine/abstract_local_processor.py