aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Rebus Farkas <rebus.detenyleg@gmail.com>2018-09-19 14:22:01 +0200
committerLibravatar Rebus Farkas <rebus.detenyleg@gmail.com>2018-09-19 14:22:01 +0200
commit8872950a961a07525a871ea5459f67ae138546a1 (patch)
treebbb3d8480fac8b1b241cf812b0a5bf48a5e90e69
parentMerge branch 'master' into hypergraphs (diff)
downloadVIATRA-Generator-8872950a961a07525a871ea5459f67ae138546a1.tar.gz
VIATRA-Generator-8872950a961a07525a871ea5459f67ae138546a1.tar.zst
VIATRA-Generator-8872950a961a07525a871ea5459f67ae138546a1.zip
Extend hypergraph shaping functionality
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF2
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend21
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend54
3 files changed, 74 insertions, 3 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
index 83c90829..ee9f8929 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
@@ -26,7 +26,7 @@ Require-Bundle: org.eclipse.core.runtime,
26 org.eclipse.xtext.xbase.lib, 26 org.eclipse.xtext.xbase.lib,
27 org.eclipse.xtend.lib, 27 org.eclipse.xtend.lib,
28 org.eclipse.xtend.lib.macro, 28 org.eclipse.xtend.lib.macro,
29 org.eclipse.viatra.query.runtime;bundle-version="1.5.0", 29 org.eclipse.viatra.query.runtime;bundle-version="1.5.0";visibility:=reexport,
30 org.eclipse.viatra.dse;bundle-version="0.15.0", 30 org.eclipse.viatra.dse;bundle-version="0.15.0",
31 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0" 31 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0"
32Bundle-ActivationPolicy: lazy 32Bundle-ActivationPolicy: lazy
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
index 8aaaacb5..1a276090 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
@@ -40,7 +40,16 @@ class InstanceModel2PartialInterpretation {
40 return transform(metamodelTranslationResult,objects,withID) 40 return transform(metamodelTranslationResult,objects,withID)
41 } 41 }
42 42
43 public def transform( 43 public def transformWithTrace(
44 TracedOutput<LogicProblem, Ecore2Logic_Trace> metamodelTranslationResult,
45 Resource resource,
46 boolean withID)
47 {
48 val objects = resource.allContents.toList
49 return transformWithTrace(metamodelTranslationResult,objects,withID)
50 }
51
52 public def transformWithTrace(
44 TracedOutput<LogicProblem, Ecore2Logic_Trace> metamodelTranslationResult, 53 TracedOutput<LogicProblem, Ecore2Logic_Trace> metamodelTranslationResult,
45 List<EObject> objects, 54 List<EObject> objects,
46 boolean withID) 55 boolean withID)
@@ -130,7 +139,15 @@ class InstanceModel2PartialInterpretation {
130 } 139 }
131 } 140 }
132 141
133 return partialInterpretation 142 return new TracedOutput(partialInterpretation,object2DefinedElement)
143 }
144
145 public def transform(
146 TracedOutput<LogicProblem, Ecore2Logic_Trace> metamodelTranslationResult,
147 List<EObject> objects,
148 boolean withID)
149 {
150 return transformWithTrace(metamodelTranslationResult,objects,withID).output
134 } 151 }
135 152
136 private def createTypeScopesFromKnownAttributeValues(List<EObject> objects, Set<EAttribute> attributesUsed) { 153 private def createTypeScopesFromKnownAttributeValues(List<EObject> objects, Set<EAttribute> attributesUsed) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
index 8b5d7f2c..080c3b79 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
@@ -92,6 +92,34 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
92 92
93 return res; 93 return res;
94 } 94 }
95
96 /**
97 * Creates a neighbourhood representation with traces
98 * @param model The model to be represented.
99 * @param range The range of the neighbourhood.
100 * @param parallels The maximal number of parallel references to be differentiated.
101 * @param maxNumber The maximal number of elements in a equivalence class that can be differentiated.
102 * @param relevantTypes The set of types to include in the diversity calculations (when value is null, all types are considered)
103 * @param relevantRelations The set of relations to include in the diversity calculations (when value is null, all relations are considered)
104 * @param relevantPatterns The set of patterns to include in the diversity calculations
105 * (NOT the well-formedness constraints) - when value is null, NO patterns are considered
106 */
107 def public createRepresentation(PartialInterpretation model, int range, int parallels, int maxNumber,
108 Map<String,List<List<DefinedElement>>> relevantPatterns) {
109
110 val Map<DefinedElement, Set<String>> types = new HashMap
111 fillTypes(model, types, null)
112 val Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations = new HashMap;
113 val Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations = new HashMap;
114 fillReferences(model, IncomingRelations, OutgoingRelations, null);
115 val Map<DefinedElement, List<PatternRelation<DefinedElement>>> PatternRelations = createPatternRelations(model,
116 relevantPatterns);
117
118 val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, PatternRelations,range, parallels,
119 maxNumber);
120
121 return res;
122 }
95 123
96 /** 124 /**
97 * Collects all pattern relations for shaping 125 * Collects all pattern relations for shaping
@@ -135,6 +163,32 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
135 return result; 163 return result;
136 164
137 } 165 }
166
167 def Map<DefinedElement, List<PatternRelation<DefinedElement>>> createPatternRelations(
168 PartialInterpretation model, Map<String,List<List<DefinedElement>>> relevantPatterns) {
169 val Map<DefinedElement, List<PatternRelation<DefinedElement>>> result=new HashMap;
170
171 for (element : model.elements) {
172 result.put(element,new LinkedList<PatternRelation<DefinedElement>>)
173 }
174 if (relevantPatterns===null) return result;
175 for (patternName : relevantPatterns.keySet) {
176 val allMatches=relevantPatterns.get(patternName)
177
178 for (match : allMatches) {
179 var id=0;
180 for (matchedElement:match) {
181 if (matchedElement!==null) {
182 result.get(matchedElement).add(new PatternRelation<DefinedElement>(patternName,id,match))
183 }
184 id++
185 }
186 }
187 }
188
189 return result;
190
191 }
138 192
139 def private isRelevant(TypeDeclaration t, Set<TypeDeclaration> relevantTypes) { 193 def private isRelevant(TypeDeclaration t, Set<TypeDeclaration> relevantTypes) {
140 if (relevantTypes === null) { 194 if (relevantTypes === null) {