Source code for xgi.convert.bipartite_edges
"""Methods for converting to and from bipartite edgelists."""
from ..core import DiHypergraph, Hypergraph
from ..exception import XGIError
__all__ = ["from_bipartite_edgelist", "to_bipartite_edgelist"]
[docs]def from_bipartite_edgelist(edges):
"""Generate a hypergraph from a list of lists.
Parameters
----------
e : tuple, list, or array of tuples, lists, or arrays, each of size 2
A bipartite edgelist
Returns
-------
Hypergraph object
The constructed hypergraph object
See Also
--------
to_bipartite_edgelist
~xgi.convert.hyperedges.from_hyperedge_list
~xgi.convert.hyperedges.to_hyperedge_list
"""
if len(edges[0]) == 3: # directed
H = DiHypergraph()
for n, e, d in edges:
H.add_node_to_edge(e, n, d)
return H
elif len(edges[0]) == 2: # undirected
H = Hypergraph()
for n, e in edges:
H.add_node_to_edge(e, n)
return H
else:
raise XGIError(
"Each list element must have two entries for directed "
"and three entries for directed."
)
[docs]def to_bipartite_edgelist(H):
"""Generate a hyperedge list from a hypergraph.
Parameters
----------
H : Hypergraph, SimplicialComplex, or DiHypergraph object
The network of interest
Returns
-------
list of sets
The hyperedge list
See Also
--------
from_bipartite_edgelist
~xgi.convert.hyperedges.to_hyperedge_list
~xgi.convert.hyperedges.from_hyperedge_list
"""
if isinstance(H, DiHypergraph):
edgelist = []
for e, edge in H._edge.items():
for n in edge["in"]:
edgelist.append((n, e, "in"))
for n in edge["out"]:
edgelist.append((n, e, "out"))
return edgelist
return [(n, e) for e, edge in H.edges.members(dtype=dict).items() for n in edge]