diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend index b6918294..0040dbcd 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | |||
@@ -4,6 +4,11 @@ import com.google.common.collect.ImmutableMap | |||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel | 4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
6 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery | 6 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery |
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronScopePropagator | ||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator | ||
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy | ||
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.Z3PolyhedronSolver | ||
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns | ||
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ModalPatternQueries | 12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ModalPatternQueries |
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider | 13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider |
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider | 14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider |
@@ -63,7 +68,7 @@ class ModelGenerationMethodProvider { | |||
63 | ReasonerWorkspace workspace, | 68 | ReasonerWorkspace workspace, |
64 | boolean nameNewElements, | 69 | boolean nameNewElements, |
65 | TypeInferenceMethod typeInferenceMethod, | 70 | TypeInferenceMethod typeInferenceMethod, |
66 | ScopePropagator scopePropagator, | 71 | ScopePropagatorStrategy scopePropagatorStrategy, |
67 | DocumentationLevel debugLevel | 72 | DocumentationLevel debugLevel |
68 | ) { | 73 | ) { |
69 | val statistics = new ModelGenerationStatistics | 74 | val statistics = new ModelGenerationStatistics |
@@ -74,6 +79,8 @@ class ModelGenerationMethodProvider { | |||
74 | 79 | ||
75 | val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, | 80 | val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, |
76 | workspace, typeInferenceMethod, writeFiles) | 81 | workspace, typeInferenceMethod, writeFiles) |
82 | val scopePropagator = createScopePropagator(scopePropagatorStrategy, emptySolution, queries) | ||
83 | scopePropagator.propagateAllScopeConstraints | ||
77 | val // LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> | 84 | val // LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> |
78 | objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries, scopePropagator, | 85 | objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries, scopePropagator, |
79 | nameNewElements, statistics) | 86 | nameNewElements, statistics) |
@@ -104,4 +111,19 @@ class ModelGenerationMethodProvider { | |||
104 | queries.allQueries | 111 | queries.allQueries |
105 | ) | 112 | ) |
106 | } | 113 | } |
114 | |||
115 | private def createScopePropagator(ScopePropagatorStrategy scopePropagatorStrategy, | ||
116 | PartialInterpretation emptySolution, GeneratedPatterns queries) { | ||
117 | switch (scopePropagatorStrategy) { | ||
118 | case BasicTypeHierarchy: | ||
119 | new ScopePropagator(emptySolution) | ||
120 | case PolyhedralTypeHierarchy: { | ||
121 | val types = queries.refineObjectQueries.keySet.map[newType].toSet | ||
122 | val solver = new Z3PolyhedronSolver | ||
123 | new PolyhedronScopePropagator(emptySolution, types, solver) | ||
124 | } | ||
125 | default: | ||
126 | throw new IllegalArgumentException("Unknown scope propagator strategy: " + scopePropagatorStrategy) | ||
127 | } | ||
128 | } | ||
107 | } | 129 | } |