4.1.10.1. rule/Composition¶
This page contains the core functionality for composing rules and creating rules from graphs. Note that there is both a low-level interface for constructing expressions, and an embedded mini-language for defining the expressions using normal Python operators.
4.1.10.1.1. The Embedded Rule Composition Expression Language¶
The embedded language is really a collection of proxy classes with a lot of operator overloading, thus the normal syntax and semantics of Python applies.
A rule composition expression always returns a list of rules when evaluated. The following is the grammar for the expressions.
rcExp ::=rcExp
op
rcExp
"rcBind(" graphs ")" "rcId(" graphs ")" "rcUnbind(" graphs ")" rules op ::= "*"opObject
"*" opObject ::= "rcParallel" "rcSuper" "rcSuper(allowPartial=True)" "rcSub" "rcSub(allowPartial=True)" "rcCommon" "rcCommon(maximum=False, connected=True, includeEmpty=False)"
Here a graphs
is any Python expression that is either a single Graph
or an iterable of graphs.
Similarly, rules
must be either a Rule
or an iterable of rules.
An rcExp
may additionally be an iterable of expressions.
The following table links each type of expression to the objects being created.
Expression |
Object |
---|---|
An iterable of |
|
|
|
|
|
|
|
See also [AFMS-RC], [AFMS-RC-AtomMap], and [AFMS-RC-Matrix] for details on how these expressions are computed internally, and further examples of how they can be used to solve particular problems.
4.1.10.1.2. Expression Evaluator¶
- class mod.RCEvaluator¶
This class can evaluate rule composition expressions. During evaluation an expression graph is recorded.
The expression graph is a directed hypergraph \((V, E)\), with each vertex representing a rule. Each edge represent all compositions calculated for a unique input. That is every edge \(e\in E\) is on the form \(((u, v), R_e)\) with \((u, v)\in V\times V\) as an ordered pair of rules and \(R_e\subseteq V\) is the set of all resulting rules found.
The graph is visualised as a bipartite graph with point-shaped vertices representing the hyperedges. The in-edges to these hyperedge vertices are labelled with 1 and 2.
- __init__(self, ruleDatabase, labelSettings=LabelSettings(LabelType.String, LabelRelation.Isomorphism))¶
- Parameters:
ruleDatabase – a list of isomorphic rules the evaluator will compare against.
labelSettings (LabelSettings) – the settings to use for morphisms.
Note
The caller is responsible for ensuring the given rules are unique.
- eval(exp, *, onlyUnique=True, verbosity=0)¶
Evaluates a rule composition expression. Any created rule is replaced by a rule in the database if they are isomorphic. A rule may appear multiple times in the result if multiple overlaps resulted in the same composed rule.
- Parameters:
exp (RCExpExp) – the expression to evaluate.
onlyUnique (bool) – whether each composition (sub-)result may contain duplicates or not.
verbosity (int) – the level of information being printed about the evaluation. See
rule::Composer::eval()
for details.
- Returns:
the resulting list of rules of the expression.
- Return type:
- print()¶
Print the graph representing all expressions evaluated so far.
4.1.10.1.3. Rule Composition Expressions¶
An expression can be evaluated through the method RCEvaluator.eval()
.
The result of an expression is a list of rules.
- class mod.RCExpUnion¶
When evaluated, return the union of the result of the sub-expressions.
- class mod.RCExpBind¶
Return the singleton list with the rule \((\emptyset, \emptyset, G)\) for the given graph \(G\).
- class mod.RCExpId¶
Return the singleton list with the rule \((G, G, G)\) for the given graph \(G\).
- class mod.RCExpUnbind¶
Return the singleton list with the rule \((G, \emptyset, \emptyset)\) for the given graph \(G\).
- class mod.RCExpExp¶
The base class for the composition of two rule \((L_1, K_1, R_1)\) and \((L_2, K_2, R_2)\).
- class mod.RCExpComposeCommon¶
Compose the rules by all common subgraphs of \(R_1\) and \(L_2\), possibly limited to connected subgraphs or to the subgraphs of maximum size. By default the empty overlap is not considered, but can be enabled to be.
- class mod.RCExpComposeParallel¶
Compose the rules by all common subgraphs of \(R_1\) and \(L_2\), possibly limited to connected subgraphs or to the subgraphs of maximum size.
- class mod.RCExpComposeSub¶
Compose the rules by the empty graph, i.e., create a rule representing the parallel application of two input rules.
- class mod.RCExpComposeSuper¶
Compose the rules such that overlapping connected components of \(R_1\) and \(L_2\) have the \(L_2\) component as a subgraph of \(R_1\). The overlap is partial if not every connected component of \(L_2\) is participating in the common subgraph.