docs: def get_edge_by_name(self, source_name: str, target_name: str) -> Optional[Edge]:
          """
          Returns the edge connecting the nodes with the specified names if such an edge exists.
  
          Arguments:
              source_name (str): The name of one of the endpoints of queried edge.
              target_name (str): The name of the other endpoint of the queried edge.
  
          Returns:
              The edge connecting the nodes with the specified names
              or `None` if no such node exists.
          """
          nodes: NodeList = self._graph.nodes
          source: Optional[Node] = nodes.get_node_by_name(source_name)
          if source is None:
              return None
          target: Optional[Node] = nodes.get_node_by_name(target_name)
          if target is None:
              return None
          return self.get_edge_by_index(source.index, target.index)