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.xtend115
1 files changed, 68 insertions, 47 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 e87f52af..90f79810 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,8 @@ 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.RelationConstraints
14import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationMultiplicityConstraint
13import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil 15import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
15import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace 17import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
@@ -23,78 +25,96 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery
23import org.eclipse.xtend.lib.annotations.Data 25import org.eclipse.xtend.lib.annotations.Data
24 26
25import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 27import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
28import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy
26 29
27@Data class GeneratedPatterns { 30@Data
28 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWFQueries 31class GeneratedPatterns {
29 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWFQueries 32 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWFQueries
30 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedMulticiplicityQueries 33 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWFQueries
31 public Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineObjectQueries 34 public Map<RelationMultiplicityConstraint, UnifinishedMultiplicityQueries> multiplicityConstraintQueries
32 public Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineTypeQueries 35 public Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedMulticiplicityQueries
33 public Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refinerelationQueries 36 public Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineObjectQueries
37 public Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refineTypeQueries
38 public Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> refinerelationQueries
34 public Map<RelationDefinition, ModalPatternQueries> modalRelationQueries 39 public Map<RelationDefinition, ModalPatternQueries> modalRelationQueries
35 public Collection<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allQueries 40 public Collection<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allQueries
36} 41}
37 42
38@Data class ModalPatternQueries { 43@Data
44class ModalPatternQueries {
39 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> mayQuery 45 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> mayQuery
40 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> mustQuery 46 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> mustQuery
41 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> currentQuery 47 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> currentQuery
42} 48}
43 49
50@Data
51class UnifinishedMultiplicityQueries {
52 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> unfinishedMultiplicityQuery
53 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> unrepairableMultiplicityQuery
54 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> remainingInverseMultiplicityQuery
55 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> remainingContentsQuery
56}
57
44class PatternProvider { 58class PatternProvider {
45 59
46 val TypeAnalysis typeAnalysis = new TypeAnalysis 60 val TypeAnalysis typeAnalysis = new TypeAnalysis
47 61
48 public def generateQueries( 62 def generateQueries(LogicProblem problem, PartialInterpretation emptySolution, ModelGenerationStatistics statistics,
49 LogicProblem problem, 63 Set<PQuery> existingQueries, ReasonerWorkspace workspace, TypeInferenceMethod typeInferenceMethod,
50 PartialInterpretation emptySolution, 64 ScopePropagatorStrategy scopePropagatorStrategy, RelationConstraints relationConstraints, boolean writeToFile) {
51 ModelGenerationStatistics statistics,
52 Set<PQuery> existingQueries,
53 ReasonerWorkspace workspace,
54 TypeInferenceMethod typeInferenceMethod,
55 boolean writeToFile)
56 {
57 val fqn2Query = existingQueries.toMap[it.fullyQualifiedName] 65 val fqn2Query = existingQueries.toMap[it.fullyQualifiedName]
58 val PatternGenerator patternGenerator = new PatternGenerator(typeInferenceMethod) 66 val PatternGenerator patternGenerator = new PatternGenerator(typeInferenceMethod, scopePropagatorStrategy)
59 val typeAnalysisResult = if(patternGenerator.requiresTypeAnalysis) { 67 val typeAnalysisResult = if (patternGenerator.requiresTypeAnalysis) {
60 val startTime = System.nanoTime 68 val startTime = System.nanoTime
61 val result = typeAnalysis.performTypeAnalysis(problem,emptySolution) 69 val result = typeAnalysis.performTypeAnalysis(problem, emptySolution)
62 val typeAnalysisTime = System.nanoTime - startTime 70 val typeAnalysisTime = System.nanoTime - startTime
63 statistics.PreliminaryTypeAnalisisTime = typeAnalysisTime 71 statistics.PreliminaryTypeAnalisisTime = typeAnalysisTime
64 result 72 result
65 } else { 73 } else {
66 null 74 null
67 } 75 }
68 val baseIndexerFile = patternGenerator.transformBaseProperties(problem,emptySolution,fqn2Query,typeAnalysisResult) 76 val baseIndexerFile = patternGenerator.transformBaseProperties(problem, emptySolution, fqn2Query,
69 if(writeToFile) { 77 typeAnalysisResult, relationConstraints)
70 workspace.writeText('''generated3valued.vql_deactivated''',baseIndexerFile) 78 if (writeToFile) {
79 workspace.writeText('''generated3valued.vql_deactivated''', baseIndexerFile)
71 } 80 }
72 val ParseUtil parseUtil = new ParseUtil 81 val ParseUtil parseUtil = new ParseUtil
73 val generatedQueries = parseUtil.parse(baseIndexerFile) 82 val generatedQueries = parseUtil.parse(baseIndexerFile)
74 val runtimeQueries = calclulateRuntimeQueries(patternGenerator,problem,emptySolution,typeAnalysisResult,generatedQueries); 83 val runtimeQueries = calclulateRuntimeQueries(patternGenerator, problem, emptySolution, typeAnalysisResult,
84 relationConstraints, generatedQueries)
75 return runtimeQueries 85 return runtimeQueries
76 } 86 }
77 87
78 private def GeneratedPatterns calclulateRuntimeQueries( 88 private def GeneratedPatterns calclulateRuntimeQueries(
79 PatternGenerator patternGenerator, 89 PatternGenerator patternGenerator,
80 LogicProblem problem, 90 LogicProblem problem,
81 PartialInterpretation emptySolution, 91 PartialInterpretation emptySolution,
82 TypeAnalysisResult typeAnalysisResult, 92 TypeAnalysisResult typeAnalysisResult,
93 RelationConstraints relationConstraints,
83 Map<String, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> queries 94 Map<String, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> queries
84 ) { 95 ) {
85 val Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 96 val invalidWFQueries = patternGenerator.invalidIndexer.getInvalidateByWfQueryNames(problem).mapValues [
86 invalidWFQueries = patternGenerator.invalidIndexer.getInvalidateByWfQueryNames(problem).mapValues[it.lookup(queries)] 97 it.lookup(queries)
87 val Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 98 ]
88 unfinishedWFQueries = patternGenerator.unfinishedIndexer.getUnfinishedWFQueryNames(problem).mapValues[it.lookup(queries)] 99 val unfinishedWFQueries = patternGenerator.unfinishedIndexer.getUnfinishedWFQueryNames(problem).mapValues [
89 val Map<Relation, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 100 it.lookup(queries)
90 unfinishedMultiplicityQueries = patternGenerator.unfinishedIndexer.getUnfinishedMultiplicityQueries(problem).mapValues[it.lookup(queries)] 101 ]
91 val Map<ObjectCreationPrecondition, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 102 val multiplicityConstraintQueries = patternGenerator.unfinishedIndexer.getUnfinishedMultiplicityQueries(
92 refineObjectsQueries = patternGenerator.typeRefinementGenerator.getRefineObjectQueryNames(problem,emptySolution,typeAnalysisResult).mapValues[it.lookup(queries)] 103 relationConstraints.multiplicityConstraints).mapValues [
93 val Map<? extends Type, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 104 new UnifinishedMultiplicityQueries(unfinishedMultiplicityQueryName?.lookup(queries),
94 refineTypeQueries = patternGenerator.typeRefinementGenerator.getRefineTypeQueryNames(problem,emptySolution,typeAnalysisResult).mapValues[it.lookup(queries)] 105 unrepairableMultiplicityQueryName?.lookup(queries),
95 val Map<Pair<RelationDeclaration, Relation>, IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> 106 remainingInverseMultiplicityQueryName?.lookup(queries), remainingContentsQueryName?.lookup(queries))
96 refineRelationQueries = patternGenerator.relationRefinementGenerator.getRefineRelationQueries(problem).mapValues[it.lookup(queries)] 107 ]
97 val Map<RelationDefinition, ModalPatternQueries> modalRelationQueries = problem.relations.filter(RelationDefinition).toMap([it], [ relationDefinition | 108 val unfinishedMultiplicityQueries = multiplicityConstraintQueries.entrySet.filter [
109 value.unfinishedMultiplicityQuery !== null
110 ].toMap([key.relation], [value.unfinishedMultiplicityQuery])
111 val refineObjectsQueries = patternGenerator.typeRefinementGenerator.
112 getRefineObjectQueryNames(problem, emptySolution, typeAnalysisResult).mapValues[it.lookup(queries)]
113 val refineTypeQueries = patternGenerator.typeRefinementGenerator.getRefineTypeQueryNames(problem, emptySolution,
114 typeAnalysisResult).mapValues[it.lookup(queries)]
115 val refineRelationQueries = patternGenerator.relationRefinementGenerator.getRefineRelationQueries(problem).
116 mapValues[it.lookup(queries)]
117 val modalRelationQueries = problem.relations.filter(RelationDefinition).toMap([it], [ relationDefinition |
98 val indexer = patternGenerator.relationDefinitionIndexer 118 val indexer = patternGenerator.relationDefinitionIndexer
99 new ModalPatternQueries( 119 new ModalPatternQueries(
100 indexer.relationDefinitionName(relationDefinition, Modality.MAY).lookup(queries), 120 indexer.relationDefinitionName(relationDefinition, Modality.MAY).lookup(queries),
@@ -105,6 +125,7 @@ class PatternProvider {
105 return new GeneratedPatterns( 125 return new GeneratedPatterns(
106 invalidWFQueries, 126 invalidWFQueries,
107 unfinishedWFQueries, 127 unfinishedWFQueries,
128 multiplicityConstraintQueries,
108 unfinishedMultiplicityQueries, 129 unfinishedMultiplicityQueries,
109 refineObjectsQueries, 130 refineObjectsQueries,
110 refineTypeQueries, 131 refineTypeQueries,