aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend63
1 files changed, 36 insertions, 27 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
index f5c85524..ac4a0855 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
@@ -10,6 +10,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStati
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysis 10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysis
11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult 11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult
12import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod 12import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod
13import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeConstraintHint
13import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraints 14import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraints
14import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationMultiplicityConstraint 15import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationMultiplicityConstraint
15import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy 16import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy
@@ -17,27 +18,28 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
18import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace 19import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
19import java.util.Collection 20import java.util.Collection
21import java.util.HashMap
20import java.util.Map 22import java.util.Map
21import java.util.Set 23import java.util.Set
22import org.eclipse.viatra.query.runtime.api.IPatternMatch 24import org.eclipse.viatra.query.runtime.api.IPatternMatch
23import org.eclipse.viatra.query.runtime.api.IQuerySpecification 25import org.eclipse.viatra.query.runtime.api.IQuerySpecification
24import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher 26import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher
27import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
25import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery 28import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery
26import org.eclipse.xtend.lib.annotations.Data 29import org.eclipse.xtend.lib.annotations.Data
27 30
28import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 31import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
29import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeConstraintHint
30 32
31@Data 33@Data class GeneratedPatterns {
32class GeneratedPatterns {
33 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWFQueries 34 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWFQueries
34 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWFQueries 35 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWFQueries
35 public Map<RelationMultiplicityConstraint, UnifinishedMultiplicityQueries> multiplicityConstraintQueries 36 public Map<RelationMultiplicityConstraint, UnifinishedMultiplicityQueries> multiplicityConstraintQueries
36 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> hasElementInContainmentQuery 37 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> hasElementInContainmentQuery
37 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedMulticiplicityQueries 38 public Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineObjectQueries
38 public Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineObjectQueries
39 public Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineTypeQueries 39 public Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineTypeQueries
40 public Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refinerelationQueries 40 public Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refinerelationQueries
41 public Map<PConstraint, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> mustUnitPropagationPreconditionPatterns
42 public Map<PConstraint, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> currentUnitPropagationPreconditionPatterns
41 public Map<RelationDefinition, ModalPatternQueries> modalRelationQueries 43 public Map<RelationDefinition, ModalPatternQueries> modalRelationQueries
42 public Collection<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allQueries 44 public Collection<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allQueries
43} 45}
@@ -76,14 +78,15 @@ class PatternProvider {
76 } else { 78 } else {
77 null 79 null
78 } 80 }
79 val baseIndexerFile = patternGenerator.transformBaseProperties(problem, emptySolution, fqn2Query, 81 val patternGeneratorResult = patternGenerator.transformBaseProperties(problem, emptySolution, fqn2Query,
80 typeAnalysisResult, relationConstraints, hints) 82 typeAnalysisResult, relationConstraints, hints)
81 if (writeToFile) { 83 if (writeToFile) {
82 workspace.writeText('''generated3valued.vql_deactivated''', baseIndexerFile) 84 workspace.writeText('''generated3valued.vql_deactivated''', patternGeneratorResult.patternText)
83 } 85 }
84 val ParseUtil parseUtil = new ParseUtil 86 val ParseUtil parseUtil = new ParseUtil
85 val generatedQueries = parseUtil.parse(baseIndexerFile) 87 val generatedQueries = parseUtil.parse(patternGeneratorResult.patternText)
86 val runtimeQueries = calclulateRuntimeQueries(patternGenerator, problem, emptySolution, typeAnalysisResult, 88 val runtimeQueries = calclulateRuntimeQueries(patternGenerator, problem, emptySolution, typeAnalysisResult,
89 patternGeneratorResult.constraint2MustPreconditionName, patternGeneratorResult.constraint2CurrentPreconditionName,
87 relationConstraints, generatedQueries) 90 relationConstraints, generatedQueries)
88 return runtimeQueries 91 return runtimeQueries
89 } 92 }
@@ -93,32 +96,36 @@ class PatternProvider {
93 LogicProblem problem, 96 LogicProblem problem,
94 PartialInterpretation emptySolution, 97 PartialInterpretation emptySolution,
95 TypeAnalysisResult typeAnalysisResult, 98 TypeAnalysisResult typeAnalysisResult,
99 HashMap<PConstraint, String> mustUnitPropagationTrace,
100 HashMap<PConstraint, String> currentUnitPropagationTrace,
96 RelationConstraints relationConstraints, 101 RelationConstraints relationConstraints,
97 Map<String, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> queries 102 Map<String, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> queries
98 ) { 103 ) {
99 val invalidWFQueries = patternGenerator.invalidIndexer.getInvalidateByWfQueryNames(problem).mapValues [ 104 val Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
100 it.lookup(queries) 105 invalidWFQueries = patternGenerator.invalidIndexer.getInvalidateByWfQueryNames(problem).mapValues[it.lookup(queries)]
101 ] 106 val Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
102 val unfinishedWFQueries = patternGenerator.unfinishedIndexer.getUnfinishedWFQueryNames(problem).mapValues [ 107 unfinishedWFQueries = patternGenerator.unfinishedIndexer.getUnfinishedWFQueryNames(problem).mapValues[it.lookup(queries)]
103 it.lookup(queries) 108
104 ] 109 val unfinishedMultiplicities = patternGenerator.unfinishedIndexer.getUnfinishedMultiplicityQueries(relationConstraints.multiplicityConstraints)
105 val multiplicityConstraintQueries = patternGenerator.unfinishedIndexer.getUnfinishedMultiplicityQueries( 110 val multiplicityConstraintQueries = unfinishedMultiplicities.mapValues [
106 relationConstraints.multiplicityConstraints).mapValues [
107 new UnifinishedMultiplicityQueries(unfinishedMultiplicityQueryName?.lookup(queries), 111 new UnifinishedMultiplicityQueries(unfinishedMultiplicityQueryName?.lookup(queries),
108 unrepairableMultiplicityQueryName?.lookup(queries), 112 unrepairableMultiplicityQueryName?.lookup(queries),
109 remainingInverseMultiplicityQueryName?.lookup(queries), remainingContentsQueryName?.lookup(queries)) 113 remainingInverseMultiplicityQueryName?.lookup(queries), remainingContentsQueryName?.lookup(queries))
110 ] 114 ]
111 val hasElementInContainmentQuery = patternGenerator.typeRefinementGenerator.hasElementInContainmentName.lookup( 115 val hasElementInContainmentQuery = patternGenerator.typeRefinementGenerator.hasElementInContainmentName.lookup(
112 queries) 116 queries)
113 val unfinishedMultiplicityQueries = multiplicityConstraintQueries.entrySet.filter [ 117
114 value.unfinishedMultiplicityQuery !== null 118 val Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
115 ].toMap([key.relation], [value.unfinishedMultiplicityQuery]) 119 refineObjectsQueries = patternGenerator.typeRefinementGenerator.getRefineObjectQueryNames(problem,emptySolution,typeAnalysisResult).mapValues[it.lookup(queries)]
116 val refineObjectsQueries = patternGenerator.typeRefinementGenerator. 120 val Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
117 getRefineObjectQueryNames(problem, emptySolution, typeAnalysisResult).mapValues[it.lookup(queries)] 121 refineTypeQueries = patternGenerator.typeRefinementGenerator.getRefineTypeQueryNames(problem,emptySolution,typeAnalysisResult).mapValues[it.lookup(queries)]
118 val refineTypeQueries = patternGenerator.typeRefinementGenerator.getRefineTypeQueryNames(problem, emptySolution, 122 val Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
119 typeAnalysisResult).mapValues[it.lookup(queries)] 123 refineRelationQueries = patternGenerator.relationRefinementGenerator.getRefineRelationQueries(problem).mapValues[it.lookup(queries)]
120 val refineRelationQueries = patternGenerator.relationRefinementGenerator.getRefineRelationQueries(problem). 124 val Map<PConstraint, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
121 mapValues[it.lookup(queries)] 125 mustUnitPropagationPreconditionPatterns = mustUnitPropagationTrace.mapValues[it.lookup(queries)]
126 val Map<PConstraint, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>>
127 currentUnitPropagationPreconditionPatterns = currentUnitPropagationTrace.mapValues[it.lookup(queries)]
128
122 val modalRelationQueries = problem.relations.filter(RelationDefinition).toMap([it], [ relationDefinition | 129 val modalRelationQueries = problem.relations.filter(RelationDefinition).toMap([it], [ relationDefinition |
123 val indexer = patternGenerator.relationDefinitionIndexer 130 val indexer = patternGenerator.relationDefinitionIndexer
124 new ModalPatternQueries( 131 new ModalPatternQueries(
@@ -127,15 +134,17 @@ class PatternProvider {
127 indexer.relationDefinitionName(relationDefinition, Modality.CURRENT).lookup(queries) 134 indexer.relationDefinitionName(relationDefinition, Modality.CURRENT).lookup(queries)
128 ) 135 )
129 ]) 136 ])
137
130 return new GeneratedPatterns( 138 return new GeneratedPatterns(
131 invalidWFQueries, 139 invalidWFQueries,
132 unfinishedWFQueries, 140 unfinishedWFQueries,
133 multiplicityConstraintQueries, 141 multiplicityConstraintQueries,
134 hasElementInContainmentQuery, 142 hasElementInContainmentQuery,
135 unfinishedMultiplicityQueries,
136 refineObjectsQueries, 143 refineObjectsQueries,
137 refineTypeQueries, 144 refineTypeQueries,
138 refineRelationQueries, 145 refineRelationQueries,
146 mustUnitPropagationPreconditionPatterns,
147 currentUnitPropagationPreconditionPatterns,
139 modalRelationQueries, 148 modalRelationQueries,
140 queries.values 149 queries.values
141 ) 150 )