docs: def slot_schedule_difference(old_schedule, new_schedule):
      """Compute the difference between two schedules from a slot perspective
  
      Parameters
      ----------
      old_schedule : list or tuple
          of :py:class:`resources.ScheduledItem` objects
      new_schedule : list or tuple
          of :py:class:`resources.ScheduledItem` objects
  
      Returns
      -------
      list
          A list of :py:class:`resources.ChangedSlotScheduledItem` objects
  
      Example
      -------
  
      >>> from conference_scheduler.resources import Event, Slot, ScheduledItem
      >>> from conference_scheduler.scheduler import slot_schedule_difference
      >>> events = [Event(f'event_{i}', 30, 0) for i in range(5)]
      >>> slots = [Slot(f'venue_{i}', '', 30, 100, None) for i in range(5)]
      >>> old_schedule = (
      ...     ScheduledItem(events[0], slots[0]),
      ...     ScheduledItem(events[1], slots[1]),
      ...     ScheduledItem(events[2], slots[2]))
      >>> new_schedule = (
      ...     ScheduledItem(events[0], slots[0]),
      ...     ScheduledItem(events[1], slots[2]),
      ...     ScheduledItem(events[2], slots[3]),
      ...     ScheduledItem(events[3], slots[4]))
      >>> diff = slot_schedule_difference(old_schedule, new_schedule)
      >>> print([item.slot.venue for item in diff])
      ['venue_1', 'venue_2', 'venue_3', 'venue_4']
      """
      old = {item.slot: item for item in old_schedule}
      new = {item.slot: item for item in new_schedule}
  
      common_slots = set(old.keys()).intersection(new.keys())
      added_slots = new.keys() - old.keys()
      removed_slots = old.keys() - new.keys()
  
      changed = [
          ChangedSlotScheduledItem(
              old[slot].slot, old[slot].event, new[slot].event)
          for slot in common_slots
          if old[slot].event != new[slot].event
      ]
      added = [
          ChangedSlotScheduledItem(new[slot].slot, None, new[slot].event)
          for slot in added_slots
      ]
      removed = [
          ChangedSlotScheduledItem(old[slot].slot, old[slot].event, None)
          for slot in removed_slots
      ]
      return sorted(
          changed + added + removed,
          key=lambda item: (item.slot.venue, item.slot.starts_at)
      )