aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.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/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.xtend57
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
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics 8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ScopePropagator 9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns 10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns
11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition 11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation 12import 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