From 7021a4d1f2805ebf3145cbc3893761d12f23361f Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 1 Aug 2019 01:00:12 +0200 Subject: Configurability and better statistics for measurements --- .../rules/RefinementRuleProvider.xtend | 40 ++++++++++++++++------ 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend index 5fefa551..bf816de9 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend @@ -98,10 +98,12 @@ class RefinementRuleProvider { val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] inverseRelationInterpretation.relationlinks+=newLink2 + val propagatorStartTime = System.nanoTime + statistics.addExecutionTime(propagatorStartTime-startTime) + // Scope propagation scopePropagator.propagateAdditionToType(typeInterpretation) - - statistics.addExecutionTime(System.nanoTime-startTime) + statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) ] } else { ruleBuilder.action[match | @@ -132,10 +134,12 @@ class RefinementRuleProvider { val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] relationInterpretation.relationlinks+=newLink + val propagatorStartTime = System.nanoTime + statistics.addExecutionTime(propagatorStartTime-startTime) + // Scope propagation scopePropagator.propagateAdditionToType(typeInterpretation) - - statistics.addExecutionTime(System.nanoTime-startTime) + statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) ] } } else { @@ -162,29 +166,31 @@ class RefinementRuleProvider { typeInterpretation.elements += newElement typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] + val propagatorStartTime = System.nanoTime + statistics.addExecutionTime(propagatorStartTime-startTime) + // Scope propagation scopePropagator.propagateAdditionToType(typeInterpretation) - - statistics.addExecutionTime(System.nanoTime-startTime) + statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) ] } return ruleBuilder.build } - def createRelationRefinementRules(GeneratedPatterns patterns, ModelGenerationStatistics statistics) { + def createRelationRefinementRules(GeneratedPatterns patterns, ScopePropagator scopePropagator, ModelGenerationStatistics statistics) { val res = new LinkedHashMap for(LHSEntry: patterns.refinerelationQueries.entrySet) { val declaration = LHSEntry.key.key val inverseReference = LHSEntry.key.value val lhs = LHSEntry.value as IQuerySpecification> - val rule = createRelationRefinementRule(declaration,inverseReference,lhs,statistics) + val rule = createRelationRefinementRule(declaration,inverseReference,lhs,scopePropagator,statistics) res.put(LHSEntry.key,rule) } return res } def private BatchTransformationRule> - createRelationRefinementRule(RelationDeclaration declaration, Relation inverseRelation, IQuerySpecification> lhs, ModelGenerationStatistics statistics) + createRelationRefinementRule(RelationDeclaration declaration, Relation inverseRelation, IQuerySpecification> lhs, ScopePropagator scopePropagator, ModelGenerationStatistics statistics) { val name = '''addRelation_«declaration.name.canonizeName»«IF inverseRelation != null»_and_«inverseRelation.name.canonizeName»«ENDIF»''' val ruleBuilder = factory.createRule @@ -201,7 +207,13 @@ class RefinementRuleProvider { val trg = match.get(4) as DefinedElement val link = createBinaryElementRelationLink => [it.param1 = src it.param2 = trg] relationInterpretation.relationlinks += link - statistics.addExecutionTime(System.nanoTime-startTime) + + val propagatorStartTime = System.nanoTime + statistics.addExecutionTime(propagatorStartTime-startTime) + + // Scope propagation + scopePropagator.propagateAdditionToRelation(declaration) + statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) ] } else { ruleBuilder.action [ match | @@ -217,7 +229,13 @@ class RefinementRuleProvider { relationInterpretation.relationlinks += link val inverseLink = createBinaryElementRelationLink => [it.param1 = trg it.param2 = src] inverseInterpretation.relationlinks += inverseLink - statistics.addExecutionTime(System.nanoTime-startTime) + + val propagatorStartTime = System.nanoTime + statistics.addExecutionTime(propagatorStartTime-startTime) + + // Scope propagation + scopePropagator.propagateAdditionToRelation(declaration) + statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) ] } -- cgit v1.2.3-70-g09d2