From c1f185fd8fc2c3dfc123d9271726c588963c7c01 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 8 Apr 2019 00:58:00 +0200 Subject: Objective POC implementation --- .../ModelGenerationMethodProvider.xtend | 85 +++++++++++++--------- .../logic2viatra/patterns/PatternGenerator.xtend | 4 +- 2 files changed, 53 insertions(+), 36 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme') 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 f43ab96d..b6918294 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 @@ -1,8 +1,10 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra +import com.google.common.collect.ImmutableMap import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ModalPatternQueries import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.RefinementRuleProvider @@ -10,6 +12,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace import java.util.Collection import java.util.List +import java.util.Map import java.util.Set import org.eclipse.viatra.query.runtime.api.IPatternMatch import org.eclipse.viatra.query.runtime.api.IQuerySpecification @@ -20,34 +23,41 @@ import org.eclipse.xtend.lib.annotations.Data class ModelGenerationStatistics { public var long transformationExecutionTime = 0 + synchronized def addExecutionTime(long amount) { - transformationExecutionTime+=amount + transformationExecutionTime += amount } + public var long PreliminaryTypeAnalisisTime = 0 } + @Data class ModelGenerationMethod { - ModelGenerationStatistics statistics - - Collection> objectRefinementRules - Collection> relationRefinementRules - - List unfinishedMultiplicities - Collection>> unfinishedWF - - Collection>> invalidWF - - Collection>> allPatterns + ModelGenerationStatistics statistics + + Collection> objectRefinementRules + Collection> relationRefinementRules + + List unfinishedMultiplicities + Collection>> unfinishedWF + + Collection>> invalidWF + + Map modalRelationQueries + + Collection>> allPatterns } + enum TypeInferenceMethod { - Generic, PreliminaryAnalysis + Generic, + PreliminaryAnalysis } class ModelGenerationMethodProvider { - private val PatternProvider patternProvider = new PatternProvider - private val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider - private val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider - - public def ModelGenerationMethod createModelGenerationMethod( + val PatternProvider patternProvider = new PatternProvider + val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider + val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider + + def ModelGenerationMethod createModelGenerationMethod( LogicProblem logicProblem, PartialInterpretation emptySolution, ReasonerWorkspace workspace, @@ -58,25 +68,31 @@ class ModelGenerationMethodProvider { ) { val statistics = new ModelGenerationStatistics val writeFiles = (debugLevel === DocumentationLevel.NORMAL || debugLevel === DocumentationLevel.FULL) - - val Set existingQueries = logicProblem - .relations - .map[annotations] - .flatten - .filter(TransfomedViatraQuery) - .map[it.patternPQuery as PQuery] - .toSet - - val queries = patternProvider.generateQueries(logicProblem,emptySolution,statistics,existingQueries,workspace,typeInferenceMethod,writeFiles) - val //LinkedHashMap, BatchTransformationRule>> - objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries,scopePropagator,nameNewElements,statistics) - val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries,statistics) - + + val Set existingQueries = logicProblem.relations.map[annotations].flatten.filter(TransfomedViatraQuery). + map[it.patternPQuery as PQuery].toSet + + val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, + workspace, typeInferenceMethod, writeFiles) + val // LinkedHashMap, BatchTransformationRule>> + objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries, scopePropagator, + nameNewElements, statistics) + val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, statistics) + val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(queries) val unfinishedWF = queries.getUnfinishedWFQueries.values - + + val modalRelationQueriesBuilder = ImmutableMap.builder + for (entry : queries.modalRelationQueries.entrySet) { + val annotation = entry.key.annotations.filter(TransfomedViatraQuery).head + if (annotation !== null) { + modalRelationQueriesBuilder.put(annotation.patternFullyQualifiedName, entry.value) + } + } + val modalRelationQueries = modalRelationQueriesBuilder.build + val invalidWF = queries.getInvalidWFQueries.values - + return new ModelGenerationMethod( statistics, objectRefinementRules.values, @@ -84,6 +100,7 @@ class ModelGenerationMethodProvider { unfinishedMultiplicities, unfinishedWF, invalidWF, + modalRelationQueries, queries.allQueries ) } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend index a2b11632..c9e64a9d 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend @@ -55,7 +55,7 @@ class PatternGenerator { typeIndexer.requiresTypeAnalysis || typeRefinementGenerator.requiresTypeAnalysis } - public dispatch def referRelation( + public dispatch def CharSequence referRelation( RelationDeclaration referred, String sourceVariable, String targetVariable, @@ -64,7 +64,7 @@ class PatternGenerator { { return this.relationDeclarationIndexer.referRelation(referred,sourceVariable,targetVariable,modality) } - public dispatch def referRelation( + public dispatch def CharSequence referRelation( RelationDefinition referred, String sourceVariable, String targetVariable, -- cgit v1.2.3-54-g00ecf