docs: def extract_changesets(objects):
      """
      Provides information about each changeset present in an OpenStreetMap diff
      file.
  
      Parameters
      ----------
      objects : osc_decoder class
          A class containing OpenStreetMap object dictionaries.
  
      Returns
      -------
      changeset_collation : dict
          A dictionary of dictionaries with each changeset as a separate key,
          information about each changeset as attributes in that dictionary,
          and the actions performed in the changeset as keys.
      """
      def add_changeset_info(collation, axis, item):
          """
          """
          if axis not in collation:
              collation[axis] = {}
  
          first = collation[axis]
  
          first["id"] = axis
          first["username"] = item["username"]
          first["uid"] = item["uid"]
          first["timestamp"] = item["timestamp"]
  
          collation[axis] = first
  
      changeset_collation = {}
  
      for node in objects.nodes.values():
          _collate_data(changeset_collation, node['changeset'], node['action'])
          add_changeset_info(changeset_collation, node['changeset'], node)
      for way in objects.ways.values():
          _collate_data(changeset_collation, way['changeset'], way['action'])
          add_changeset_info(changeset_collation, way['changeset'], way)
      for relation in objects.relations.values():
          _collate_data(changeset_collation, relation['changeset'], relation['action'])
          add_changeset_info(changeset_collation, relation['changeset'], relation)
  
      return changeset_collation