diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend | 57 |
1 files changed, 41 insertions, 16 deletions
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 20d24b77..7891ebd8 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 | |||
@@ -6,7 +6,7 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation | |||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration | 6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration |
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | 7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type |
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics | 8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics |
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ScopePropagator | 9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator |
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns | 10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns |
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition | 11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition |
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation | 12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation |
@@ -67,7 +67,8 @@ class RefinementRuleProvider { | |||
67 | if(containmentRelation != null) { | 67 | if(containmentRelation != null) { |
68 | if(inverseRelation!= null) { | 68 | if(inverseRelation!= null) { |
69 | ruleBuilder.action[match | | 69 | ruleBuilder.action[match | |
70 | //println(name) | 70 | statistics.incrementTransformationCount |
71 | // println(name) | ||
71 | val startTime = System.nanoTime | 72 | val startTime = System.nanoTime |
72 | //val problem = match.get(0) as LogicProblem | 73 | //val problem = match.get(0) as LogicProblem |
73 | val interpretation = match.get(1) as PartialInterpretation | 74 | val interpretation = match.get(1) as PartialInterpretation |
@@ -98,14 +99,17 @@ class RefinementRuleProvider { | |||
98 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] | 99 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] |
99 | inverseRelationInterpretation.relationlinks+=newLink2 | 100 | inverseRelationInterpretation.relationlinks+=newLink2 |
100 | 101 | ||
102 | val propagatorStartTime = System.nanoTime | ||
103 | statistics.addExecutionTime(propagatorStartTime-startTime) | ||
104 | |||
101 | // Scope propagation | 105 | // Scope propagation |
102 | scopePropagator.propagateAdditionToType(typeInterpretation) | 106 | scopePropagator.propagateAdditionToType(typeInterpretation) |
103 | 107 | statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) | |
104 | statistics.addExecutionTime(System.nanoTime-startTime) | ||
105 | ] | 108 | ] |
106 | } else { | 109 | } else { |
107 | ruleBuilder.action[match | | 110 | ruleBuilder.action[match | |
108 | //println(name) | 111 | statistics.incrementTransformationCount |
112 | // println(name) | ||
109 | val startTime = System.nanoTime | 113 | val startTime = System.nanoTime |
110 | //val problem = match.get(0) as LogicProblem | 114 | //val problem = match.get(0) as LogicProblem |
111 | val interpretation = match.get(1) as PartialInterpretation | 115 | val interpretation = match.get(1) as PartialInterpretation |
@@ -132,14 +136,19 @@ class RefinementRuleProvider { | |||
132 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] | 136 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] |
133 | relationInterpretation.relationlinks+=newLink | 137 | relationInterpretation.relationlinks+=newLink |
134 | 138 | ||
139 | val propagatorStartTime = System.nanoTime | ||
140 | statistics.addExecutionTime(propagatorStartTime-startTime) | ||
141 | |||
135 | // Scope propagation | 142 | // Scope propagation |
136 | scopePropagator.propagateAdditionToType(typeInterpretation) | 143 | scopePropagator.propagateAdditionToType(typeInterpretation) |
137 | 144 | statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) | |
138 | statistics.addExecutionTime(System.nanoTime-startTime) | ||
139 | ] | 145 | ] |
140 | } | 146 | } |
141 | } else { | 147 | } else { |
142 | ruleBuilder.action[match | | 148 | ruleBuilder.action[match | |
149 | statistics.incrementTransformationCount | ||
150 | // println(name) | ||
151 | |||
143 | val startTime = System.nanoTime | 152 | val startTime = System.nanoTime |
144 | //val problem = match.get(0) as LogicProblem | 153 | //val problem = match.get(0) as LogicProblem |
145 | val interpretation = match.get(1) as PartialInterpretation | 154 | val interpretation = match.get(1) as PartialInterpretation |
@@ -162,29 +171,31 @@ class RefinementRuleProvider { | |||
162 | typeInterpretation.elements += newElement | 171 | typeInterpretation.elements += newElement |
163 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] | 172 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] |
164 | 173 | ||
174 | val propagatorStartTime = System.nanoTime | ||
175 | statistics.addExecutionTime(propagatorStartTime-startTime) | ||
176 | |||
165 | // Scope propagation | 177 | // Scope propagation |
166 | scopePropagator.propagateAdditionToType(typeInterpretation) | 178 | scopePropagator.propagateAdditionToType(typeInterpretation) |
167 | 179 | statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) | |
168 | statistics.addExecutionTime(System.nanoTime-startTime) | ||
169 | ] | 180 | ] |
170 | } | 181 | } |
171 | return ruleBuilder.build | 182 | return ruleBuilder.build |
172 | } | 183 | } |
173 | 184 | ||
174 | def createRelationRefinementRules(GeneratedPatterns patterns, ModelGenerationStatistics statistics) { | 185 | def createRelationRefinementRules(GeneratedPatterns patterns, ScopePropagator scopePropagator, ModelGenerationStatistics statistics) { |
175 | val res = new LinkedHashMap | 186 | val res = new LinkedHashMap |
176 | for(LHSEntry: patterns.refinerelationQueries.entrySet) { | 187 | for(LHSEntry: patterns.refinerelationQueries.entrySet) { |
177 | val declaration = LHSEntry.key.key | 188 | val declaration = LHSEntry.key.key |
178 | val inverseReference = LHSEntry.key.value | 189 | val inverseReference = LHSEntry.key.value |
179 | val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> | 190 | val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> |
180 | val rule = createRelationRefinementRule(declaration,inverseReference,lhs,statistics) | 191 | val rule = createRelationRefinementRule(declaration,inverseReference,lhs,scopePropagator,statistics) |
181 | res.put(LHSEntry.key,rule) | 192 | res.put(LHSEntry.key,rule) |
182 | } | 193 | } |
183 | return res | 194 | return res |
184 | } | 195 | } |
185 | 196 | ||
186 | def private BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>> | 197 | def private BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>> |
187 | createRelationRefinementRule(RelationDeclaration declaration, Relation inverseRelation, IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs, ModelGenerationStatistics statistics) | 198 | createRelationRefinementRule(RelationDeclaration declaration, Relation inverseRelation, IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs, ScopePropagator scopePropagator, ModelGenerationStatistics statistics) |
188 | { | 199 | { |
189 | val name = '''addRelation_«declaration.name.canonizeName»«IF inverseRelation != null»_and_«inverseRelation.name.canonizeName»«ENDIF»''' | 200 | val name = '''addRelation_«declaration.name.canonizeName»«IF inverseRelation != null»_and_«inverseRelation.name.canonizeName»«ENDIF»''' |
190 | val ruleBuilder = factory.createRule | 201 | val ruleBuilder = factory.createRule |
@@ -192,8 +203,9 @@ class RefinementRuleProvider { | |||
192 | .precondition(lhs) | 203 | .precondition(lhs) |
193 | if (inverseRelation == null) { | 204 | if (inverseRelation == null) { |
194 | ruleBuilder.action [ match | | 205 | ruleBuilder.action [ match | |
206 | statistics.incrementTransformationCount | ||
195 | val startTime = System.nanoTime | 207 | val startTime = System.nanoTime |
196 | //println(name) | 208 | // println(name) |
197 | // val problem = match.get(0) as LogicProblem | 209 | // val problem = match.get(0) as LogicProblem |
198 | // val interpretation = match.get(1) as PartialInterpretation | 210 | // val interpretation = match.get(1) as PartialInterpretation |
199 | val relationInterpretation = match.get(2) as PartialRelationInterpretation | 211 | val relationInterpretation = match.get(2) as PartialRelationInterpretation |
@@ -201,12 +213,19 @@ class RefinementRuleProvider { | |||
201 | val trg = match.get(4) as DefinedElement | 213 | val trg = match.get(4) as DefinedElement |
202 | val link = createBinaryElementRelationLink => [it.param1 = src it.param2 = trg] | 214 | val link = createBinaryElementRelationLink => [it.param1 = src it.param2 = trg] |
203 | relationInterpretation.relationlinks += link | 215 | relationInterpretation.relationlinks += link |
204 | statistics.addExecutionTime(System.nanoTime-startTime) | 216 | |
217 | val propagatorStartTime = System.nanoTime | ||
218 | statistics.addExecutionTime(propagatorStartTime-startTime) | ||
219 | |||
220 | // Scope propagation | ||
221 | scopePropagator.propagateAdditionToRelation(declaration) | ||
222 | statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) | ||
205 | ] | 223 | ] |
206 | } else { | 224 | } else { |
207 | ruleBuilder.action [ match | | 225 | ruleBuilder.action [ match | |
226 | statistics.incrementTransformationCount | ||
208 | val startTime = System.nanoTime | 227 | val startTime = System.nanoTime |
209 | //println(name) | 228 | // println(name) |
210 | // val problem = match.get(0) as LogicProblem | 229 | // val problem = match.get(0) as LogicProblem |
211 | // val interpretation = match.get(1) as PartialInterpretation | 230 | // val interpretation = match.get(1) as PartialInterpretation |
212 | val relationInterpretation = match.get(2) as PartialRelationInterpretation | 231 | val relationInterpretation = match.get(2) as PartialRelationInterpretation |
@@ -217,7 +236,13 @@ class RefinementRuleProvider { | |||
217 | relationInterpretation.relationlinks += link | 236 | relationInterpretation.relationlinks += link |
218 | val inverseLink = createBinaryElementRelationLink => [it.param1 = trg it.param2 = src] | 237 | val inverseLink = createBinaryElementRelationLink => [it.param1 = trg it.param2 = src] |
219 | inverseInterpretation.relationlinks += inverseLink | 238 | inverseInterpretation.relationlinks += inverseLink |
220 | statistics.addExecutionTime(System.nanoTime-startTime) | 239 | |
240 | val propagatorStartTime = System.nanoTime | ||
241 | statistics.addExecutionTime(propagatorStartTime-startTime) | ||
242 | |||
243 | // Scope propagation | ||
244 | scopePropagator.propagateAdditionToRelation(declaration) | ||
245 | statistics.addScopePropagationTime(System.nanoTime-propagatorStartTime) | ||
221 | ] | 246 | ] |
222 | } | 247 | } |
223 | 248 | ||