diff options
author | Rebus Farkas <rebus.detenyleg@gmail.com> | 2018-09-14 16:49:11 +0200 |
---|---|---|
committer | Rebus Farkas <rebus.detenyleg@gmail.com> | 2018-09-14 16:49:11 +0200 |
commit | 12f540b293fec104db29fe78a4b50ca60a49e417 (patch) | |
tree | 25fad118952232204aff027c39b01aca8de46b9b /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules | |
parent | Merge branch 'master' into hypergraphs (diff) | |
parent | Updated progress monitor for huge amount instance generation processes (diff) | |
download | VIATRA-Generator-12f540b293fec104db29fe78a4b50ca60a49e417.tar.gz VIATRA-Generator-12f540b293fec104db29fe78a4b50ca60a49e417.tar.zst VIATRA-Generator-12f540b293fec104db29fe78a4b50ca60a49e417.zip |
Merge branch 'master' into hypergraphs
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend | 27 |
1 files changed, 21 insertions, 6 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 0a21d99e..20d24b77 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,6 +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.patterns.GeneratedPatterns | 10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns |
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition | 11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition |
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation | 12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation |
@@ -31,6 +32,7 @@ class RefinementRuleProvider { | |||
31 | def LinkedHashMap<ObjectCreationPrecondition, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> | 32 | def LinkedHashMap<ObjectCreationPrecondition, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> |
32 | createObjectRefinementRules( | 33 | createObjectRefinementRules( |
33 | GeneratedPatterns patterns, | 34 | GeneratedPatterns patterns, |
35 | ScopePropagator scopePropagator, | ||
34 | boolean nameNewElement, | 36 | boolean nameNewElement, |
35 | ModelGenerationStatistics statistics | 37 | ModelGenerationStatistics statistics |
36 | ) | 38 | ) |
@@ -41,7 +43,7 @@ class RefinementRuleProvider { | |||
41 | val inverseRelation = LHSEntry.key.inverseContainment | 43 | val inverseRelation = LHSEntry.key.inverseContainment |
42 | val type = LHSEntry.key.newType | 44 | val type = LHSEntry.key.newType |
43 | val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> | 45 | val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> |
44 | val rule = createObjectCreationRule(containmentRelation,inverseRelation,type,lhs,nameNewElement,statistics) | 46 | val rule = createObjectCreationRule(containmentRelation,inverseRelation,type,lhs,nameNewElement,scopePropagator,statistics) |
45 | res.put(LHSEntry.key,rule) | 47 | res.put(LHSEntry.key,rule) |
46 | } | 48 | } |
47 | return res | 49 | return res |
@@ -53,6 +55,7 @@ class RefinementRuleProvider { | |||
53 | Type type, | 55 | Type type, |
54 | IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs, | 56 | IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs, |
55 | boolean nameNewElement, | 57 | boolean nameNewElement, |
58 | ScopePropagator scopePropagator, | ||
56 | ModelGenerationStatistics statistics) | 59 | ModelGenerationStatistics statistics) |
57 | { | 60 | { |
58 | val name = '''addObject_«type.name.canonizeName»« | 61 | val name = '''addObject_«type.name.canonizeName»« |
@@ -80,10 +83,10 @@ class RefinementRuleProvider { | |||
80 | 83 | ||
81 | // Existence | 84 | // Existence |
82 | interpretation.newElements+=newElement | 85 | interpretation.newElements+=newElement |
83 | interpretation.maxNewElements=interpretation.maxNewElements-1 | 86 | /*interpretation.maxNewElements=interpretation.maxNewElements-1 |
84 | if(interpretation.minNewElements > 0) { | 87 | if(interpretation.minNewElements > 0) { |
85 | interpretation.minNewElements=interpretation.minNewElements-1 | 88 | interpretation.minNewElements=interpretation.minNewElements-1 |
86 | } | 89 | }*/ |
87 | 90 | ||
88 | // Types | 91 | // Types |
89 | typeInterpretation.elements += newElement | 92 | typeInterpretation.elements += newElement |
@@ -94,6 +97,10 @@ class RefinementRuleProvider { | |||
94 | // Inverse Containment | 97 | // Inverse Containment |
95 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] | 98 | val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] |
96 | inverseRelationInterpretation.relationlinks+=newLink2 | 99 | inverseRelationInterpretation.relationlinks+=newLink2 |
100 | |||
101 | // Scope propagation | ||
102 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
103 | |||
97 | statistics.addExecutionTime(System.nanoTime-startTime) | 104 | statistics.addExecutionTime(System.nanoTime-startTime) |
98 | ] | 105 | ] |
99 | } else { | 106 | } else { |
@@ -113,10 +120,10 @@ class RefinementRuleProvider { | |||
113 | 120 | ||
114 | // Existence | 121 | // Existence |
115 | interpretation.newElements+=newElement | 122 | interpretation.newElements+=newElement |
116 | interpretation.maxNewElements=interpretation.maxNewElements-1 | 123 | /*interpretation.maxNewElements=interpretation.maxNewElements-1 |
117 | if(interpretation.minNewElements > 0) { | 124 | if(interpretation.minNewElements > 0) { |
118 | interpretation.minNewElements=interpretation.minNewElements-1 | 125 | interpretation.minNewElements=interpretation.minNewElements-1 |
119 | } | 126 | }*/ |
120 | 127 | ||
121 | // Types | 128 | // Types |
122 | typeInterpretation.elements += newElement | 129 | typeInterpretation.elements += newElement |
@@ -124,6 +131,10 @@ class RefinementRuleProvider { | |||
124 | // ContainmentRelation | 131 | // ContainmentRelation |
125 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] | 132 | val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] |
126 | relationInterpretation.relationlinks+=newLink | 133 | relationInterpretation.relationlinks+=newLink |
134 | |||
135 | // Scope propagation | ||
136 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
137 | |||
127 | statistics.addExecutionTime(System.nanoTime-startTime) | 138 | statistics.addExecutionTime(System.nanoTime-startTime) |
128 | ] | 139 | ] |
129 | } | 140 | } |
@@ -141,15 +152,19 @@ class RefinementRuleProvider { | |||
141 | 152 | ||
142 | // Existence | 153 | // Existence |
143 | interpretation.newElements+=newElement | 154 | interpretation.newElements+=newElement |
155 | /* | ||
144 | interpretation.maxNewElements=interpretation.maxNewElements-1 | 156 | interpretation.maxNewElements=interpretation.maxNewElements-1 |
145 | if(interpretation.minNewElements > 0) { | 157 | if(interpretation.minNewElements > 0) { |
146 | interpretation.minNewElements=interpretation.minNewElements-1 | 158 | interpretation.minNewElements=interpretation.minNewElements-1 |
147 | } | 159 | }*/ |
148 | 160 | ||
149 | // Types | 161 | // Types |
150 | typeInterpretation.elements += newElement | 162 | typeInterpretation.elements += newElement |
151 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] | 163 | typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] |
152 | 164 | ||
165 | // Scope propagation | ||
166 | scopePropagator.propagateAdditionToType(typeInterpretation) | ||
167 | |||
153 | statistics.addExecutionTime(System.nanoTime-startTime) | 168 | statistics.addExecutionTime(System.nanoTime-startTime) |
154 | ] | 169 | ] |
155 | } | 170 | } |