Source code for xgi.convert.hypergraph_dict

"""Method for converting from a standardized dictionary."""

from ..exception import XGIError
from ..generators import empty_hypergraph

__all__ = ["dict_to_hypergraph"]


[docs]def dict_to_hypergraph(data, nodetype=None, edgetype=None, max_order=None): """ A function to read a file in a standardized JSON format. Parameters ---------- data: dict A dictionary in the hypergraph JSON format nodetype: type, optional Type that the node IDs will be cast to edgetype: type, optional Type that the edge IDs will be cast to max_order: int, optional Maximum order of edges to add to the hypergraph Returns ------- A Hypergraph object The loaded hypergraph Raises ------ XGIError If the JSON is not in a format that can be loaded. See Also -------- read_json """ H = empty_hypergraph() try: H._hypergraph.update(data["hypergraph-data"]) except KeyError: raise XGIError("Failed to get hypergraph data attributes.") try: for id, dd in data["node-data"].items(): if nodetype is not None: try: id = nodetype(id) except ValueError as e: raise TypeError( f"Failed to convert edge IDs to type {nodetype}." ) from e H.add_node(id, **dd) except KeyError: raise XGIError("Failed to import node attributes.") try: for id, edge in data["edge-dict"].items(): if max_order and len(edge) > max_order + 1: continue if edgetype is not None: try: id = edgetype(id) except ValueError as e: raise TypeError( f"Failed to convert the edge with ID {id} to type {edgetype}." ) from e if nodetype is not None: try: edge = {nodetype(n) for n in edge} except ValueError as e: raise TypeError( f"Failed to convert nodes to type {nodetype}." ) from e H.add_edge(edge, id) except KeyError as e: raise XGIError("Failed to import edge dictionary.") from e try: if edgetype is None: edge_data = { key: val for key, val in data["edge-data"].items() if key in H.edges } else: edge_data = { edgetype(e): dd for e, dd in data["edge-data"].items() if edgetype(e) in H.edges } H.set_edge_attributes(edge_data) except KeyError as e: raise XGIError("Failed to import edge attributes.") from e return H