docs: def transfer_causal_edges(graph, source: BaseEntity, target: BaseEntity) -> Iterable[str]:
      """Transfer causal edges that the source has to the target and yield the resulting hashes."""
      for _, v, data in graph.out_edges(source, data=True):
          if data[RELATION] not in CAUSAL_RELATIONS:
              continue
  
          yield graph.add_qualified_edge(
              target,
              v,
              relation=data[RELATION],
              evidence=data[EVIDENCE],
              citation=data[CITATION],
              annotations=data.get(ANNOTATIONS),
              subject_modifier=data.get(SUBJECT),
              object_modifier=data.get(OBJECT),
          )
  
      for u, _, data in graph.in_edges(source, data=True):
          if data[RELATION] not in CAUSAL_RELATIONS:
              continue
  
          yield graph.add_qualified_edge(
              u,
              target,
              relation=data[RELATION],
              evidence=data[EVIDENCE],
              citation=data[CITATION],
              annotations=data.get(ANNOTATIONS),
              subject_modifier=data.get(SUBJECT),
              object_modifier=data.get(OBJECT),
          )