code: def pop_changeset(self, changeset_id: uuid.UUID) -> Dict[bytes, Union[bytes, DeletedEntry]]:
          
          if changeset_id not in self.journal_data:
              raise KeyError(changeset_id, "Unknown changeset in JournalDB")
  
          all_ids = tuple(self.journal_data.keys())
          changeset_idx = all_ids.index(changeset_id)
          changesets_to_pop = all_ids[changeset_idx:]
          popped_clears = tuple(idx for idx in changesets_to_pop if idx in self._clears_at)
          if popped_clears:
              last_clear_idx = changesets_to_pop.index(popped_clears[-1])
              changesets_to_drop = changesets_to_pop[:last_clear_idx]
              changesets_to_merge = changesets_to_pop[last_clear_idx:]
          else:
              changesets_to_drop = ()
              changesets_to_merge = changesets_to_pop
  
          # we pull all of the changesets *after* the changeset we are
          # reverting to and collapse them to a single set of keys (giving
          # precedence to later changesets)
          changeset_data = merge(*(
              self.journal_data.pop(c_id)
              for c_id
              in changesets_to_merge
          ))
  
          # drop the changes on the floor if they came before a clear that is being committed
          for changeset_id in changesets_to_drop:
              self.journal_data.pop(changeset_id)
  
          self._clears_at.difference_update(popped_clears)
          return changeset_data
docs: Returns all changes from the given changeset.  This includes all of
          the changes from any subsequent changeset, giving precidence to
          later changesets.