In [1]:
from regraph import Rule, plot_rule, plot_graph, plot_instance, find_matching
from regraph.primitives import *
import networkx as nx
In [2]:
pattern = nx.DiGraph()
add_nodes_from(pattern, ["gene1", "gene2", "residue"])
add_edges_from(pattern, [("residue", "gene1"), ("residue", "gene2")])
In [3]:
rule = Rule.from_transform(pattern)
rule.inject_merge_nodes(["gene1", "gene2"])
rule.inject_add_node("new_node")
rule.inject_add_edge("residue", "new_node")
rule.inject_clone_node("residue")
Out[3]:
In [4]:
plot_rule(rule)
In [5]:
print(rule.to_commands())
In [6]:
g = nx.DiGraph()
add_nodes_from(g, [1, 2, 3, 4, 5, 6])
add_edges_from(g, [(2, 1), (2, 3), (3, 4), (3, 5)])
In [7]:
pos = plot_graph(g)
In [8]:
instances = find_matching(g, rule.lhs)
In [9]:
instances
Out[9]:
In [10]:
for instance in instances:
plot_instance(g, rule.lhs, instance, parent_pos=pos)
In [11]:
rule.apply_to(g, instances[0], inplace=True)
Out[11]:
In [12]:
parent_pos={k: v for k, v in pos.values() if k in g.nodes()}
In [13]:
plot_graph(g, parent_pos={k: v for k, v in pos.values() if k in g.nodes()})
Out[13]:
In [14]:
pattern = nx.DiGraph()
add_nodes_from(pattern, ["x", "circle", "square", "dot"])
add_edges_from(pattern, [("x", "dot"), ("circle", "dot"), ("square", "dot")])
In [15]:
rule = Rule.from_transform(pattern)
rule.inject_remove_node("x")
p_new_name, _ = rule.inject_clone_node("circle")
rule.inject_remove_edge(p_new_name, "dot"),
merge_name = rule.inject_merge_nodes([p_new_name, "square"])
rule.inject_add_node("y")
rule.inject_add_edge(merge_name, "y")
In [16]:
plot_rule(rule)
In [17]:
print(rule.to_commands())
In [ ]: