diff options
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.xtend | 115 |
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 | |||
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysis | 10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysis |
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult | 11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult |
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod | 12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod |
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraints | ||
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationMultiplicityConstraint | ||
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil | 15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil |
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | 16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation |
15 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | 17 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace |
@@ -23,78 +25,96 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery | |||
23 | import org.eclipse.xtend.lib.annotations.Data | 25 | import org.eclipse.xtend.lib.annotations.Data |
24 | 26 | ||
25 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | 27 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* |
28 | import 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 | 31 | class 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 |
44 | class 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 | ||
51 | class 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 | |||
44 | class PatternProvider { | 58 | class 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, |