Primitives¶
Graph transformation primitives.
This package contains a collection of utils for various transformations on regraph.Graph objects. Attributes: regraph.attribute_sets
-
regraph.primitives.
add_edge
(graph, s, t, attrs=None, **attr)[source]¶ Add an edge to a graph.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- attrsdict
Edge attributes.
- Raises
- ReGraphError
If attrs is not a dictionary
- GraphError
If either one of the nodes does not exist in the graph or an edge between s and t already exists.
-
regraph.primitives.
add_edge_attrs
(graph, s, t, attrs)[source]¶ Add attributes of an edge in a graph.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- attrsdict
Dictionary with attributes to remove.
- Raises
- GraphError
If an edge between s and t does not exist.
-
regraph.primitives.
add_edges_from
(graph, edge_list)[source]¶ Add edges from an edge list.
- Parameters
- graphregraph.Graph
- edge_listiterable
Iterable containing a collection of edges, optionally, with their attributes
- Raises
- ReGraphError
If an element of the collection is neither a tuple of size 2 (containing a source and a target of an edge), not a tuple of size 3 (containing a source, a target and attributes of an edge).
Examples
>>> import networkx as nx >>> from regraph.primitives import add_nodes_from, add_edges_from >>> G = nx.Graph() >>> add_nodes_from(G, [1, 2, 3]) >>> add_edges_from(G, [(1, 2), (2, 3, {"a": 1})])
-
regraph.primitives.
add_node
(graph, node_id, attrs={})[source]¶ Add a node to a graph.
- Parameters
- graphregraph.Graph
- node_idhashable
Prefix that is prepended to the new unique name.
- attrsdict, optional
Node attributes.
- Raises
- regraph.exceptions.GraphError
Raises an error if node already exists in the graph.
-
regraph.primitives.
add_node_attrs
(graph, node, attrs)[source]¶ Add new attributes to a node.
- Parameters
- graphregraph.Graph
- nodehashable
Id of a node to add attributes to.
- attrsdict
Attributes to add.
- Raises
- GraphError
If a node with the specified id does not exist.
-
regraph.primitives.
add_node_new_id
(graph, node_id, attrs=None)[source]¶ Create a new node id if node_id already exists.
-
regraph.primitives.
add_nodes_from
(graph, node_list)[source]¶ Add nodes from a node list.
- Parameters
- graphregraph.Graph
- node_listiterable
Iterable containing a collection of nodes, optionally, with their attributes
Examples
>>> import networkx as nx >>> from regraph.primitives import add_nodes_from >>> G = nx.Graph() >>> add_nodes_from(G, [1, (2, {"a": 1}), 3])
-
regraph.primitives.
clone_node
(graph, node_id, name=None)[source]¶ Clone node.
Create a new node, a copy of a node with node_id, and reconnect it with all the adjacent nodes of node_id.
- Parameters
- graphregraph.Graph
- node_idid of a node to clone.
- nameid for the clone, optional
If is not specified, new id will be generated.
- Returns
- new_nodehashable, clone’s id
- Raises
- GraphError
If node wiht node_id does not exists or a node with name (clone’s name) already exists.
Examples
>>> g = nx.DiGraph() >>> add_nodes_from(g, [1, 2, 3]) >>> add_edges_from(g, [(1, 2), (3, 2)]) >>> clone_node(g, 2, "2_clone") >>> g.nodes() [1, 2, "2_clone", 3] >>> g.edges() [(1, 2), (1, "2_clone"), (3, 2), (3, "2_clone")]
-
regraph.primitives.
copy_node
(graph, node_id)[source]¶ Copy node.
Create a copy of a node in a graph. A new id for the copy is generated by regraph.primitives.unique_node_id.
- Parameters
- graphregraph.Graph
- node_idhashable, node to copy.
- Returns
- new_name
Id of the copy node.
-
regraph.primitives.
equal
(graph1, graph2)[source]¶ Eqaulity of two graphs.
- Parameters
- graph1regraph.Graph
- graph2regraph.Graph
- Returns
- bool
True if two graphs are equal, False otherwise.
-
regraph.primitives.
exists_edge
(graph, s, t)[source]¶ Check if an edge exists.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
-
regraph.primitives.
export_graph
(graph, filename)[source]¶ Export graph to JSON file.
- Parameters
- graphregraph.Graph
- filenamestr
Name of the file to save the json serialization of the graph
-
regraph.primitives.
filter_edges_by_attributes
(graph, attr_key, attr_cond)[source]¶ Filter graph edges by attributes.
Removes all the edges of the graph (inplace) that do not satisfy attr_cond.
- Parameters
- graphregraph.Graph
- attrs_keyattribute key
- attrs_condcallable
Condition for an attribute to satisfy: callable that returns True if condition is satisfied, False otherwise.
-
regraph.primitives.
find_matching
(graph, pattern, nodes=None)[source]¶ Find matching of a pattern in a graph.
- Parameters
- graphregraph.Graph
- patternregraph.Graph
Pattern graph to search for
- nodesiterable, optional
Subset of nodes to search for matching
- Returns
- instanceslist of dict’s
List of instances of matching found in the graph, every instance is represented with a dictionary where keys are nodes of the pattern, and values are corresponding nodes of the graph.
Examples
Suppose you are given the following graph:
>>> g = networkx.DiGraph() >>> add_nodes_from(g, [(1, {"color": {"red"}}), 2, (3, {"color": {"blue"}})]) >>> add_edges_from(g, [(1, 1), (1, 2), (3, 3), (3, 2)])
And you would like to match the following pattern:
>>> pattern = networkx.DiGraph() >>> add_nodes_from(pattern, [("x", {"color": "blue"}), "y"]) >>> add_edges_from(pattern, [("x", "x"), ("x", "y")])
Matching instances can be found as follows:
>>> instances = find_matching(g, pattern) >>> instances [{"x": 3, "y": 2}]
-
regraph.primitives.
get_edge
(graph, s, t)[source]¶ Get edge attributes.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
-
regraph.primitives.
get_node
(graph, n)[source]¶ Get node attributes.
- Parameters
- graphregraph.Graph or regraph.neo4j.Neo4jGraph
- shashable, source node id.
- thashable, target node id.
-
regraph.primitives.
get_relabeled_graph
(graph, mapping)[source]¶ Return a graph with node labeling specified in the mapping.
- Parameters
- graphnetworkx.(Di)Graph
- mapping: dict
A dictionary with keys being old node ids and their values being new id’s of the respective nodes.
- Returns
- gnetworkx.(Di)Graph
New graph object isomorphic to the graph with the relabled nodes.
- Raises
- ReGraphError
If new id’s do not define a set of distinct node id’s.
See also
-
regraph.primitives.
graph_to_d3_json
(graph, attrs=True, node_attrs_to_attach=None, edge_attrs_to_attach=None, nodes=None)[source]¶ Create a JSON representation of a graph.
-
regraph.primitives.
load_networkx_graph
(filename, directed=True)[source]¶ Load a NetworkX graph from a JSON file.
Create a regraph.Graph object from a JSON representation stored in a file.
- Parameters
- filenamestr
Name of the file to load the json serialization of the graph
- directedbool, optional
True if the graph to load is directed, False otherwise. Default value True.
- Returns
- regraph.Graph object
- Raises
- ReGraphError
If was not able to load the file
-
regraph.primitives.
merge_nodes
(graph, nodes, node_id=None, method='union', edge_method='union')[source]¶ Merge a list of nodes.
- Parameters
- graphregraph.Graph
- nodesiterable
Collection of node id’s to merge.
- node_idhashable, optional
Id of a new node corresponding to the result of merge.
- methodoptional
Method of node attributes merge: if “union” the resulting node will contain the union of all attributes of the merged nodes, if “intersection”, the resulting node will contain their intersection. Default value is “union”.
- edge_methodoptional
Method of edge attributes merge: if “union” the edges that were merged will contain the union of all attributes, if “intersection” – their ntersection. Default value is “union”.
- Returns
- node_idhashable
Id of a new node corresponding to the result of merge.
- Raises
- ReGraphError
If unknown merging method is provided
- GraphError
If some nodes from nodes do not exist in the graph.
Examples
>>> g = nx.DiGraph() >>> add_nodes_from(g, [(1, {"a": 1, "b": 1}), 2, (3, {"a": 3, "c": 3})]) >>> add_edges_from(g, [(1, 3), (1, 2), (2, 3)]) >>> merge_nodes(g, [1, 3], "merged_node") >>> g.nodes() ["merged_node", 2] >>> g.edges() [("merged_node", "merged_node"), ("merged_node", 2), (2, "merged_node")] >>> g.node["merged_node"] {"a": {1, 3}, "b": {1}, "c": {3}}
-
regraph.primitives.
networkx_from_json
(j_data)[source]¶ Create a NetworkX graph from a json-like dictionary.
-
regraph.primitives.
relabel_node
(graph, node_id, new_id)[source]¶ Relabel a node in the graph.
- Parameters
- graphregraph.Graph
- node_idid of a node to relabel.
- new_idhashable, new label of a node.
-
regraph.primitives.
relabel_nodes
(graph, mapping)[source]¶ Relabel graph nodes inplace given a mapping.
Similar to networkx.relabel.relabel_nodes: https://networkx.github.io/documentation/development/_modules/networkx/relabel.html
- Parameters
- graphregraph.Graph
- mapping: dict
A dictionary with keys being old node ids and their values being new id’s of the respective nodes.
- Raises
- ReGraphError
If new id’s do not define a set of distinct node id’s.
-
regraph.primitives.
remove_edge
(graph, s, t)[source]¶ Remove edge from a graph.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- Raises
- GraphError
If edge between s and t does not exist.
-
regraph.primitives.
remove_edge_attrs
(graph, s, t, attrs)[source]¶ Remove attrs of an edge specified by attrs.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- attrsdict
Dictionary with attributes to remove.
- Raises
- GraphError
If an edge between s and t does not exist.
-
regraph.primitives.
remove_node
(graph, node_id)[source]¶ Remove node.
- Parameters
- graphregraph.Graph
- node_idhashable, node to remove.
- Raises
- GraphError
If a node with the specified id does not exist.
-
regraph.primitives.
remove_node_attrs
(graph, node_id, attrs)[source]¶ Remove attrs of a node specified by attrs_dict.
- Parameters
- graphregraph.Graph
- node_idhashable
Node whose attributes to remove.
- attrsdict
Dictionary with attributes to remove.
- Raises
- GraphError
If a node with the specified id does not exist.
-
regraph.primitives.
set_edge
(graph, s, t, attrs, normalize=True)[source]¶ Set edge attrs.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- attrsdictionary
Dictionary with attributes to set.
- Raises
- GraphError
If an edge between s and t does not exist.
-
regraph.primitives.
subtract
(a, b, ba_mapping)[source]¶ Subtract graphs provided node mapping.
Subtract graph B from A having mapping of nodes from B to nodes from A specified.
- Parameters
- aregraph.Graph
- bregraph.Graph
- ba_mappingdict
- Returns
- Graph representing the difference a - b.
Examples
>>> a = nx.DiGraph() >>> add_nodes_from(a, [1, 2, 3]) >>> add_edges_from(a, [(1, 2), (2, 2), (2, 3)]) >>> b = nx.DiGraph() >>> add_nodes_from(b, ['x', 'y']) >>> ba_mapping = {'x': 1, 'y': 3} >>> diff = subtract(a, b, ba_mapping) >>> diff.nodes() [2] >>> diff.edges() [(2, 2)]
-
regraph.primitives.
update_edge_attrs
(graph, s, t, attrs, normalize=True)[source]¶ Update attributes of an edge.
- Parameters
- graphregraph.Graph
- shashable, source node id.
- thashable, target node id.
- attrsdict
New attributes to assign to the edge
- Raises
- GraphError
If an edge between s and t does not exist.