aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java
diff options
context:
space:
mode:
Diffstat (limited to 'Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java')
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java
new file mode 100644
index 00000000..adb69760
--- /dev/null
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java
@@ -0,0 +1,133 @@
1package modes3.run;
2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic;
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace;
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type;
6import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality;
7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearBoundedExpression;
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeConstraintHint;
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeExpressionBuilderFactory;
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraintUpdater;
11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator;
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation;
13import java.util.Iterator;
14import java.util.Map;
15import modes3.Modes3Package;
16import modes3.queries.Adjacent;
17import org.eclipse.viatra.query.runtime.api.IPatternMatch;
18import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
19import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery;
20import org.eclipse.xtend2.lib.StringConcatenation;
21import org.eclipse.xtext.xbase.lib.Extension;
22
23@SuppressWarnings("all")
24public class Modes3TypeScopeHint implements LinearTypeConstraintHint {
25 private static final String TURNOUT_NEIGHBOR_COUNT = "turnoutNeighborCount";
26
27 private final Type segmentType;
28
29 private final Type turnoutType;
30
31 public Modes3TypeScopeHint(@Extension final Ecore2Logic ecore2Logic, final Ecore2Logic_Trace ecore2LogicTrace) {
32 @Extension
33 final Modes3Package Modes3Package = modes3.Modes3Package.eINSTANCE;
34 this.segmentType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getSegment());
35 this.turnoutType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getTurnout());
36 }
37
38 @Override
39 public CharSequence getAdditionalPatterns(@Extension final PatternGenerator patternGenerator, final Map<String, PQuery> fqnToPQuery) {
40 StringConcatenation _builder = new StringConcatenation();
41 _builder.append("\t");
42 _builder.append("pattern ");
43 _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t");
44 _builder.append("_helper(problem: LogicProblem, interpretation: PartialInterpretation, source: DefinedElement, target: DefinedElement) {");
45 _builder.newLineIfNotEmpty();
46 _builder.append("\t\t");
47 _builder.append("find interpretation(problem, interpretation);");
48 _builder.newLine();
49 _builder.append("\t\t");
50 _builder.append("find mustExist(problem, interpretation, source);");
51 _builder.newLine();
52 _builder.append("\t\t");
53 _builder.append("find mustExist(problem, interpretation, target);");
54 _builder.newLine();
55 _builder.append("\t\t");
56 CharSequence _referInstanceOf = patternGenerator.getTypeIndexer().referInstanceOf(this.turnoutType, Modality.MUST, "source");
57 _builder.append(_referInstanceOf, "\t\t");
58 _builder.newLineIfNotEmpty();
59 _builder.append("\t\t");
60 CharSequence _referInstanceOf_1 = patternGenerator.getTypeIndexer().referInstanceOf(this.segmentType, Modality.MUST, "target");
61 _builder.append(_referInstanceOf_1, "\t\t");
62 _builder.newLineIfNotEmpty();
63 _builder.append("\t\t");
64 CharSequence _referPattern = patternGenerator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "source", "target" }, Modality.MUST, true, false);
65 _builder.append(_referPattern, "\t\t");
66 _builder.newLineIfNotEmpty();
67 _builder.append("\t");
68 _builder.append("}");
69 _builder.newLine();
70 _builder.newLine();
71 _builder.append("\t");
72 _builder.append("pattern ");
73 _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t");
74 _builder.append("(problem: LogicProblem, interpretation: PartialInterpretation, element: DefinedElement, N) {");
75 _builder.newLineIfNotEmpty();
76 _builder.append("\t\t");
77 _builder.append("find interpretation(problem, interpretation);");
78 _builder.newLine();
79 _builder.append("\t\t");
80 _builder.append("find mustExist(problem, interpretation, element);");
81 _builder.newLine();
82 _builder.append("\t\t");
83 CharSequence _referInstanceOf_2 = patternGenerator.getTypeIndexer().referInstanceOf(this.turnoutType, Modality.MUST, "element");
84 _builder.append(_referInstanceOf_2, "\t\t");
85 _builder.newLineIfNotEmpty();
86 _builder.append("\t\t");
87 _builder.append("N == count find ");
88 _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t\t");
89 _builder.append("_helper(problem, interpretation, element, _);");
90 _builder.newLineIfNotEmpty();
91 _builder.append("\t");
92 _builder.append("}");
93 _builder.newLine();
94 return _builder;
95 }
96
97 @Override
98 public RelationConstraintUpdater createConstraintUpdater(final LinearTypeExpressionBuilderFactory builderFactory) {
99 final ViatraQueryMatcher<? extends IPatternMatch> turnoutNeighborCountMatcher = builderFactory.createMatcher(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT);
100 final LinearBoundedExpression newNeighbors = builderFactory.createBuilder().add(1, this.segmentType).build();
101 final RelationConstraintUpdater _function = (PartialInterpretation partialInterpretation) -> {
102 final int requiredNeighbbors = Modes3TypeScopeHint.getRemainingCount(turnoutNeighborCountMatcher, partialInterpretation, 3);
103 newNeighbors.tightenLowerBound(Integer.valueOf(requiredNeighbbors));
104 };
105 return _function;
106 }
107
108 private static <T extends IPatternMatch> int getRemainingCount(final ViatraQueryMatcher<T> matcher, final PartialInterpretation partialInterpretation, final int capacity) {
109 int _xblockexpression = (int) 0;
110 {
111 final T partialMatch = matcher.newEmptyMatch();
112 partialMatch.set(0, partialInterpretation.getProblem());
113 partialMatch.set(1, partialInterpretation);
114 final Iterator<T> iterator = matcher.streamAllMatches(partialMatch).iterator();
115 int max = 0;
116 while (iterator.hasNext()) {
117 {
118 final T match = iterator.next();
119 Object _get = match.get(3);
120 final int n = ((Integer) _get).intValue();
121 if ((n < capacity)) {
122 final int required = (capacity - n);
123 if ((max < required)) {
124 max = required;
125 }
126 }
127 }
128 }
129 _xblockexpression = max;
130 }
131 return _xblockexpression;
132 }
133}