docs: def add_qualified_edge(
              self,
              u,
              v,
              *,
              relation: str,
              evidence: str,
              citation: Union[str, Mapping[str, str]],
              annotations: Optional[AnnotationsHint] = None,
              subject_modifier: Optional[Mapping] = None,
              object_modifier: Optional[Mapping] = None,
              **attr
      ) -> str:
          """Add a qualified edge.
  
          Qualified edges have a relation, evidence, citation, and optional annotations, subject modifications,
          and object modifications.
  
          :param u: The source node
          :param v: The target node
          :param relation: The type of relation this edge represents
          :param evidence: The evidence string from an article
          :param citation: The citation data dictionary for this evidence. If a string is given,
           assumes it's a PubMed identifier and auto-fills the citation type.
          :param annotations: The annotations data dictionary
          :param subject_modifier: The modifiers (like activity) on the subject node. See data model documentation.
          :param object_modifier: The modifiers (like activity) on the object node. See data model documentation.
  
          :return: The hash of the edge
          """
          attr.update({
              RELATION: relation,
              EVIDENCE: evidence,
          })
  
          if isinstance(citation, str):
              attr[CITATION] = {
                  CITATION_TYPE: CITATION_TYPE_PUBMED,
                  CITATION_REFERENCE: citation,
              }
          elif isinstance(citation, dict):
              attr[CITATION] = citation
          else:
              raise TypeError
  
          if annotations:  # clean up annotations
              attr[ANNOTATIONS] = _clean_annotations(annotations)
  
          if subject_modifier:
              attr[SUBJECT] = subject_modifier
  
          if object_modifier:
              attr[OBJECT] = object_modifier
  
          return self._help_add_edge(u, v, attr)