aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@152.66.252.189>2017-06-10 19:05:05 +0200
committerLibravatar OszkarSemerath <oszka@152.66.252.189>2017-06-10 19:05:05 +0200
commit60f01f46ba232ed6416054f0a6115cb2a9b70b4e (patch)
tree5edf8aeb07abc51f3fec63bbd15c926e1de09552 /Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend
parentInitial commit, migrating from SVN (diff)
downloadVIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.tar.gz
VIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.tar.zst
VIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.zip
Migrating Additional projects
Diffstat (limited to 'Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend')
-rw-r--r--Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend71
1 files changed, 71 insertions, 0 deletions
diff --git a/Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend b/Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend
new file mode 100644
index 00000000..cbabc7b0
--- /dev/null
+++ b/Solvers/SMT-Solver/hu.bme.mit.inf.dslreasoner.smt.reasoner/src/hu/bme/mit/inf/dslreasoner/smt/reasoner/Smt2LogicMapper.xtend
@@ -0,0 +1,71 @@
1package hu.bme.mit.inf.dslreasoner.smt.reasoner
2
3import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTOutput
4import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTStatisticsSection
5import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicresultFactory
6import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTStatisticIntValue
7import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTStatisticDoubleValue
8import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
9import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTErrorResult
10import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTSatResult
11import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTUnsupportedResult
12import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException
13import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult
14import hu.bme.mit.inf.dslreasoner.smtLanguage.SMTStatisticValue
15import java.math.BigDecimal
16
17class Smt2LogicMapper {
18 val extension LogicresultFactory resultFactory = LogicresultFactory.eINSTANCE
19
20 public def transformOutput(LogicProblem problem, SMTOutput output, Logic2SmtMapperTrace trace, long transformationTime, long solverTime) {
21 val satResult = output.satResult
22 if(satResult === null) { // Timeout
23 return createInsuficientResourcesResult => [ init(problem,output,transformationTime,solverTime) it.resourceName = "time"]
24 } else {
25 if(satResult instanceof SMTErrorResult) {
26 return createErrorResult => [init(problem,output,transformationTime,solverTime) message = satResult.message]
27 } else if(satResult instanceof SMTUnsupportedResult) {
28 return createUndecidableResult => [init(problem,output,transformationTime,solverTime)]
29 } else if(satResult instanceof SMTSatResult) {
30 if(satResult.sat) {
31 return createModelResult => [
32 init(problem,output,transformationTime,solverTime)
33 representation += output.eContainer
34 it.trace = trace
35 ]
36 } else if(satResult.unsat) {
37 return createInconsistencyResult => [init(problem,output,transformationTime,solverTime)]
38 } else if(satResult.unknown) {
39 return createUndecidableResult => [init(problem,output,transformationTime,solverTime)]
40 }
41 } else throw new LogicReasonerException("The solver resulted with unknown result.")
42 }
43 }
44
45 private def init(LogicResult result,LogicProblem problem, SMTOutput output, long transformationTime, long solverTime) {
46 result.problem = problem
47 result.statistics = output.statistics.transformStatistics(transformationTime,solverTime)
48 }
49
50 protected def transformStatistics(SMTStatisticsSection section, long transformationTime, long solverTime) {
51 createStatistics => [
52 it.transformationTime = transformationTime.intValue
53 it.solverTime = solverTime.intValue
54
55 val memorySection = section.values.filter[it.name==":memory"].head
56 if(memorySection != null) {
57 it.solverMemory = ((memorySection as SMTStatisticDoubleValue).value.add(BigDecimal.valueOf(0.5))).intValue
58 }
59 entries += section.values.map[transformEntry]
60 ]
61 }
62
63 protected def dispatch transformEntry(SMTStatisticIntValue entry) {
64 createIntStatisticEntry => [name = entry.exportName value = entry.value] }
65 protected def dispatch transformEntry(SMTStatisticDoubleValue entry) {
66 createRealStatisticEntry => [name = entry.exportName value = entry.value.doubleValue] }
67
68 private def exportName(SMTStatisticValue value) {
69 return value.name.replaceFirst(":","")
70 }
71} \ No newline at end of file