Rules¶
Graph rewriting rules.
This package contains the Rule data structure for representation of graph rewriting rules (for more on sesqui-pushout rewriting see: https://link.springer.com/chapter/10.1007/11841883_4).
- 
class regraph.rules.Rule(p=None, lhs=None, rhs=None, p_lhs=None, p_rhs=None)[source]¶
- Class representing rewriting rules. - A rewriting rule consists of the three graphs: p – preserved part (or interface), lhs – left hand side, rhs – right hand side, and two mappings: from p to lhs and from p to rhs. Informally, lhs represents a pattern to match in a graph, subject to rewriting. p together with p -> lhs mapping specifies a part of the pattern which stays preseved during rewriting, i.e. all the nodes/edges/attributes present in lhs but not p will be removed. rhs and p -> rhs specify nodes/edges/attributes to add to the p. In addition, rules defined is such a way allow to clone and merge nodes. If two nodes from p map to the same node in lhs, the node corresponding to this node of the pattern will be cloned. Symmetrically, if two nodes from p map to the same node in rhs, the corresponding two nodes will be merged. - Attributes
- pregaph.graphs.Graph
- Preserved part of the rule 
- lhsregaph.graphs.Graph
- Left-hand side (pattern) of the rule 
- rhsregaph.graphs.Graph
- Right-hand side of the rule 
- p_lhsdict
- Homomorphism between p and lhs given by a dictionary with keys – nodes of p, values – nodes of lhs. 
- p_rhsdict
- Homomorphism between p and rhs given by a dictionary with keys – nodes of p, values – nodes of rhs. 
 
 - Methods - added_edge_attrs(self)- Get edge attributes added by the rule. - added_edges(self)- Get edges added by the rule. - added_node_attrs(self)- Get node attributes added by the rule. - added_nodes(self)- Get nodes added by the rule. - cloned_nodes(self)- Get nodes cloned by the rule. - from_json(json_data)- Create a rule obj from JSON repr. - from_transform(pattern[, commands])- Initialize a rule from the transformation. - get_inverted_rule(self)- Get inverted rule with LHS and RHS swaped. - Create an identity rule. - inject_add_edge(self, n1, n2[, attrs])- Inject addition of a new edge to the rule. - inject_add_edge_attrs(self, n1, n2, attrs)- Inject addition of edge attributes by the rule. - inject_add_edges_from(self, edge_list)- Inject addition of a new edge to the rule. - inject_add_node(self, node_id[, attrs])- Inject an addition of a new node by the rule. - inject_add_node_attrs(self, n, attrs)- Inject addition of node attributes by the rule. - inject_add_nodes_from(self, node_list)- Inject an addition of a new node by the rule. - inject_clone_node(self, n[, new_node_id])- Inject cloning of a node by the rule. - inject_merge_nodes(self, node_list[, node_id])- Inject merge of a collection of nodes by the rule. - inject_remove_edge(self, n1, n2)- Inject removal of an edge by the rule. - inject_remove_edge_attrs(self, n1, n2, attrs)- Inject a removal of edge attrs by the rule. - inject_remove_node(self, p_node_id)- Inject a new node removal to the rule. - inject_remove_node_attrs(self, n, attrs)- Inject a removal of node attrs by the rule. - inject_update_edge_attrs(self, n1, n2, attrs)- Inject an update of edge attrs by the rule. - inject_update_node_attrs(self, n, attrs)- Inject an update of node attrs by the rule. - is_identity(self)- Test if the rule is identity. - is_relaxing(self)- Check if the rule is relaxing. - is_restrictive(self)- Check if the rule is restrictive. - merged_nodes(self)- Get nodes merged by the rule. - plot(self[, filename, title])- Plot the rule. - refine(self, graph, instance)- Get refined (side-effect-free) version of the rule. - removed_edge_attrs(self)- Get edge attributes removed by the rule. - removed_edges(self)- Get edges removed by the rule. - removed_node_attrs(self)- Get node attributes removed by the rule. - removed_nodes(self)- Get nodes removed by the rule. - to_commands(self)- Convert the rule to a list of commands. - to_json(self)- Convert the rule to JSON repr. - 
added_edge_attrs(self)[source]¶
- Get edge attributes added by the rule. - Returns
- attrsdict
- Dictionary where keys are edges from rhs and values are attribute dictionaries to add. 
 
 
 - 
added_edges(self)[source]¶
- Get edges added by the rule. - Returns
- edgesset
- Set of edges from rhs added by the rule. 
 
 
 - 
added_node_attrs(self)[source]¶
- Get node attributes added by the rule. - Returns
- attrsdict
- Dictionary where keys are nodes from rhs and values are attribute dictionaries to add. 
 
 
 - 
added_nodes(self)[source]¶
- Get nodes added by the rule. - Returns
- nodesset
- Set of nodes from rhs added by the rule. 
 
 
 - 
cloned_nodes(self)[source]¶
- Get nodes cloned by the rule. - Returns
- nodesdict
- Dictionary where keys are nodes from lhs and values are sets of corresponding nodes from p. 
 
 
 - 
classmethod from_transform(pattern, commands=None)[source]¶
- Initialize a rule from the transformation. - On input takes a pattern which is used as lhs of the rule, as an optional argument transformation commands can be provided, by default the list of commands is empty and all p, lhs and rhs are initialized to be the same graph (pattern), later on when transformations are applied p and rhs are being updated. If list of commands is specified, these commands are simplified, transformed to the canonical order, and applied to p, lhs and rhs. - Parameters
- patternnetworkx.(Di)Graph
- Pattern graph to initialize and the lhs of the rule. 
- commandsstr, optional
- Script containing transformation commands, which can be parsed by regraph.parser.parse. 
 
 
 - 
inject_add_edge(self, n1, n2, attrs=None)[source]¶
- Inject addition of a new edge to the rule. - This method adds an edge between two nodes of the rhs. - Parameters
- n1hashable
- Id of an edge’s source node in rhs. 
- n2hashable
- Id of an edge’s target node in rhs. 
 
- Raises
- RuleError
- If some of the nodes (n1 or n2) do not exist or if there is already an edge between them in rhs. 
 
 
 - 
inject_add_edge_attrs(self, n1, n2, attrs)[source]¶
- Inject addition of edge attributes by the rule. - Parameters
- n1hashable
- Source node in the RHS 
- n2hashable
- Target node in the RHS 
- attrsdict
- Dictionary with attrs to add 
 
- Raises
- RuleError
- If some of the nodes defining an edge are not found in neither rhs, or if an edge is incident to smth thats is going to be removed by the rule. 
 
 
 - 
inject_add_edges_from(self, edge_list)[source]¶
- Inject addition of a new edge to the rule. - This method injects addition of edges from the list. - Parameters
- edge_listiterable
- Collection of edges to add, where every element is either a tuple of the form (<source_id>, <target_id>) or (<source_id>, <target_id>, <edge_attrs>). Here source and target nodes are assumed to be from the rhs. 
 
- Raises
- RuleError
- If some of the nodes (n1 or n2) do not exist or if there is already an edge between them in rhs. 
 
 
 - 
inject_add_node(self, node_id, attrs=None)[source]¶
- Inject an addition of a new node by the rule. - This method adds a node with node_id (and the specified attributes attrs) to rhs. - Parameters
- node_idhashable
- Id of a node to add 
- attrsdict, optional
- Attributes of the node. 
 
- Raises
- RuleError
- If node with this id already exists in the rhs. 
 
 
 - 
inject_add_node_attrs(self, n, attrs)[source]¶
- Inject addition of node attributes by the rule. - Parameters
- nhashable
- Id of the node in the rhs to add attributes to. 
- attrsdict
- Dictionary with attrs to add 
 
- Raises
- RuleError
- If node n does not exist in the rhs of the rule 
 
 
 - 
inject_add_nodes_from(self, node_list)[source]¶
- Inject an addition of a new node by the rule. - This method adds a nodes from the list (and the specified attributes attrs) to rhs. - Parameters
- node_listiterable
- Collection of nodes to add, where every element is either a tuple of the form (<node_id>, <node_attrs>) or a single value <node_id> 
 
- Raises
- RuleError
- If some node from the list already exists in the rhs. 
 
 
 - 
inject_clone_node(self, n, new_node_id=None)[source]¶
- Inject cloning of a node by the rule. - This procedure clones n in the preserved part and the right-hand side. - Parameters
- nhashable
- Node from lhs to clone 
- new_node_idhashable
- Id for the clone 
 
- Returns
- p_new_node_idhashable
- Id of the new clone node in the preserved part 
- rhs_new_node_idhashable
- Id of the new clone node in the right-hand side 
 
- Raises
- RuleError
- If the node to clone is already being removed by the rule or if node with the specified clone id already exists in p. 
 
 
 - 
inject_merge_nodes(self, node_list, node_id=None)[source]¶
- Inject merge of a collection of nodes by the rule. - Parameters
- node_listiterable
- Collection of ids of nodes from the preserved part. 
- node_idhashable
- Id of the new node corresponding to the result of merge. 
 
- Returns
- new_namehashable
- Id of the new node corresponding to the result of merge. 
 
- Raises
- RuleError
- If a node with some id specified in node_list does not exist in the preserved part of the rule. 
 
 
 - 
inject_remove_edge(self, n1, n2)[source]¶
- Inject removal of an edge by the rule. - Parameters
- n1hashable
- Id of an edge’s source node in p. 
- n2hashable
- Id of an edge’s target node in p. 
 
- Raises
- RuleError
- If some of the nodes are not found in p, or if a corresponding edge in p does not exist. 
 
 
 - 
inject_remove_edge_attrs(self, n1, n2, attrs)[source]¶
- Inject a removal of edge attrs by the rule. - Parameters
- n1hashable
- Id of an edge’s source node in p. 
- n2hashable
- Id of an edge’s target node in p. 
- attrsdict
- Dictionary with attributes to remove. 
 
- Raises
- RuleError
- If edge n1-> n2 does not exist in the preserved part of the rule, or when the node whose attrs should be removed is itself is being removed by the rule. 
 
 
 - 
inject_remove_node(self, p_node_id)[source]¶
- Inject a new node removal to the rule. - This method removes the indicated node from p - Parameters
- p_node_id
- Id of the node in p that should be removed by the rule. 
 
 
 - 
inject_remove_node_attrs(self, n, attrs)[source]¶
- Inject a removal of node attrs by the rule. - Parameters
- nhashable
- Id of a node whose attrs to remove (node from the preserved part). 
- attrsdict
- Dictionary with attributes to remove. 
 
- Raises
- RuleError
- If n does not exist in the preserved part of the rule, or when the node whose attrs should be removed is itself is being removed by the rule. 
 
 
 - 
inject_update_node_attrs(self, n, attrs)[source]¶
- Inject an update of node attrs by the rule. - Parameters
- nhashable
- Id of a node from the left-hand side whose attrs should be updated 
- attrsdict
- Dictionary of new attrs that will replace the old ones 
 
- Raises
- RuleError
- If node n does not exist in the left-hand side or is being removed by the rule. 
 
 
 - 
is_relaxing(self)[source]¶
- Check if the rule is relaxing. - Rule is relaxing if it adds nodes/edges/attributes or merges nodes. - Returns
- True if the rule is relaxing, False otherwise
 
 
 - 
is_restrictive(self)[source]¶
- Check if the rule is restrictive. - Rule is restictive if it removes nodes/edges/attributes or clones nodes. - Returns
- True if the rule is restrictive, False
- otherwise
 
 
 - 
merged_nodes(self)[source]¶
- Get nodes merged by the rule. - Returns
- nodesdict
- Dictionary where keys are nodes from rhs and values are sets of nodes from p that are merged. 
 
 
 - 
removed_edge_attrs(self)[source]¶
- Get edge attributes removed by the rule. - Returns
- attrsdict
- Dictionary where keys are edges from p and values are attribute dictionaries to remove. 
 
 
 - 
removed_edges(self)[source]¶
- Get edges removed by the rule. - Returns
- edgesset
- Set of edges from lhs removed by the rule. 
 
 
 - 
removed_node_attrs(self)[source]¶
- Get node attributes removed by the rule. - Returns
- attrsdict
- Dictionary where keys are nodes from p and values are attribute dictionaries to remove. 
 
 
 - 
removed_nodes(self)[source]¶
- Get nodes removed by the rule. - Returns
- nodesset
- Set of nodes from lhs removed by the rule. 
 
 
 - 
to_commands(self)[source]¶
- Convert the rule to a list of commands. - This method produces a list of commands corresponding to the rule. These commands follow a simple grammar of transformations that can be recognized by regraph.parser module. - Returns
- commandsstr
- Commands representing primitive transformations on the the lhs that are preformed in the rule. 
 
 
 
- 
regraph.rules.compose_rule_hierarchies(rule_hierarchy1, lhs_instances1, rhs_instances1, rule_hierarchy2, lhs_instances2, rhs_instances2)[source]¶
- Compose two rule hierarchies.