aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend64
1 files changed, 64 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend
new file mode 100644
index 00000000..89719b91
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend
@@ -0,0 +1,64 @@
1package hu.bme.mit.inf.dslreasoner.viatra2logic
2
3import org.eclipse.xtext.xbase.XExpression
4import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation
5import org.eclipse.xtext.common.types.JvmIdentifiableElement
6import java.util.Set
7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
8import java.util.Map
9import com.microsoft.z3.BoolExpr
10import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
11import java.util.Map.Entry
12import org.eclipse.xtext.xbase.XFeatureCall
13import java.util.Comparator
14import java.util.ArrayList
15import java.util.HashMap
16import java.util.List
17
18class NumericTranslator {
19
20 private XExpressionExtractor extractor = new XExpressionExtractor();
21
22 val comparator = new Comparator<JvmIdentifiableElement>(){
23 override compare(JvmIdentifiableElement o1, JvmIdentifiableElement o2) {
24 //println('''«o1.simpleName» - «o2.simpleName»''')
25 o1.simpleName.compareTo(o2.simpleName)
26 }
27 }
28 def Map<JvmIdentifiableElement, PrimitiveElement> arrayToMap(Object[] tuple, ArrayList<JvmIdentifiableElement> variablesInOrder) {
29 val res = new HashMap
30 for(var i=0; i<tuple.length; i++) {
31 res.put(variablesInOrder.get(i),tuple.get(i) as PrimitiveElement)
32 }
33 return res
34 }
35 def formNumericProblemInstance(Map<PConstraint, Iterable<Object[]>> matches) throws Exception {
36 val res = new HashMap
37 for (Entry<PConstraint, Iterable<Object[]>> entry: matches.entrySet()) {
38 val ExpressionEvaluation constraint = entry.getKey() as ExpressionEvaluation;
39 val XExpression expression = extractor.extractExpression(constraint.getEvaluator());
40 val Iterable<Object[]> tuples = entry.getValue();
41 val features = expression.eAllContents.filter(XFeatureCall).map[it.feature].toSet
42 val variablesInOrder = new ArrayList(features)
43 variablesInOrder.toList.sort(comparator)
44 //println(variablesInOrder)
45 val map = tuples.map[it.arrayToMap(variablesInOrder)]
46 res.put(expression,map)
47 }
48 return res
49 }
50
51 def delegateIsSatisfiable(Map<PConstraint, Iterable<Object[]>> matches) {
52 val input = formNumericProblemInstance(matches)
53 val solver = new NumericProblemSolver
54 val satisfiability = solver.isSatisfiable(input)
55 return satisfiability
56 }
57
58 def delegateGetSolution(List<PrimitiveElement> primitiveElements, Map<PConstraint, Iterable<Object[]>> matches) {
59 val input = formNumericProblemInstance(matches)
60 val solver = new NumericProblemSolver
61 val solution = solver.getOneSolution(primitiveElements,input)
62 return solution
63 }
64} \ No newline at end of file