To avoid duplicate edges where the vertex ids are reversed,
        we maintain that the vertex ids are ordered so that the corresponding
        pathway names are alphabetical.

        Parameters
        -----------
        vertex0_id : int
          one vertex in the edge
        vertex1_id : int
          the other vertex in the edge

        Returns
        -----------
        tup(int, int)|None, the edge id or None if the vertices do not
        exist in the network or they map to the same pathway (there should not
        be any self-loops in the network)

def edge_tuple(self, vertex0_id, vertex1_id):
        """To avoid duplicate edges where the vertex ids are reversed,
        we maintain that the vertex ids are ordered so that the corresponding
        pathway names are alphabetical.

        Parameters
        -----------
        vertex0_id : int
          one vertex in the edge
        vertex1_id : int
          the other vertex in the edge

        Returns
        -----------
        tup(int, int)|None, the edge id or None if the vertices do not
        exist in the network or they map to the same pathway (there should not
        be any self-loops in the network)
        """
        pw0 = self.__getitem__(vertex0_id)
        pw1 = self.__getitem__(vertex1_id)

        if not pw0 or not pw1:
            return None
        if pw0 < pw1:
            return (vertex0_id, vertex1_id)
        elif pw0 > pw1:
            return (vertex1_id, vertex0_id)
        else:
            return None