aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-24 21:44:49 -0400
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-24 21:44:49 -0400
commitf42954a45bea9f3e40090447804f33f12c080640 (patch)
tree1c57d4ca595bf7825460c6aa080f93ea04d5689c
parentFactory for string literals. (diff)
downloadVIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.tar.gz
VIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.tar.zst
VIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.zip
upgraded attribute support for the graph solver
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend32
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend22
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend3
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend23
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend8
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend37
9 files changed, 136 insertions, 25 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
index e83b81e6..3d2c46a5 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend
@@ -129,6 +129,38 @@ class Constraint2Logic {
129 { 129 {
130 return value.asTerm 130 return value.asTerm
131 } 131 }
132 private def dispatch transformConstantValue(
133 Boolean value,
134 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
135 Viatra2LogicTrace viatra2LogicTrace,
136 Viatra2LogicConfiguration config)
137 {
138 return value.asTerm
139 }
140 private def dispatch transformConstantValue(
141 String value,
142 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
143 Viatra2LogicTrace viatra2LogicTrace,
144 Viatra2LogicConfiguration config)
145 {
146 return value.asTerm
147 }
148 private def dispatch transformConstantValue(
149 Double value,
150 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
151 Viatra2LogicTrace viatra2LogicTrace,
152 Viatra2LogicConfiguration config)
153 {
154 return value.asTerm
155 }
156 private def dispatch transformConstantValue(
157 Float value,
158 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
159 Viatra2LogicTrace viatra2LogicTrace,
160 Viatra2LogicConfiguration config)
161 {
162 return value.asTerm
163 }
132 private def dispatch transformConstantValue(Object other, 164 private def dispatch transformConstantValue(Object other,
133 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace, 165 TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace,
134 Viatra2LogicTrace viatra2LogicTrace, 166 Viatra2LogicTrace viatra2LogicTrace,
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
index d0c57db1..42c93da1 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend
@@ -105,13 +105,15 @@ class Viatra2Logic {
105 val relationName = '''pattern «pquery.fullyQualifiedName.replace('.',' ')»''' 105 val relationName = '''pattern «pquery.fullyQualifiedName.replace('.',' ')»'''
106 val parameters = new ArrayList<Variable>(pquery.parameters.size) 106 val parameters = new ArrayList<Variable>(pquery.parameters.size)
107 for(vParam: pquery.parameters) { 107 for(vParam: pquery.parameters) {
108 //println(">" + vParam.declaredUnaryType)
109 val type = vParam.declaredUnaryType as BaseEMFTypeKey<? extends EClassifier>
108 val parameterType = transformTypeReference( 110 val parameterType = transformTypeReference(
109 vParam.declaredUnaryType as BaseEMFTypeKey<? extends EClassifier>, 111 type,
110 ecore2LogicTrace 112 ecore2LogicTrace
111 ) 113 )
112 if(parameterType == null) { 114// if(parameterType == null) {
113 println(parameterType) 115// println(parameterType)
114 } 116// }
115 val parameterName = '''parameter «vParam.name»''' 117 val parameterName = '''parameter «vParam.name»'''
116 val lParam = createVar(parameterName,parameterType) 118 val lParam = createVar(parameterName,parameterType)
117 viatra2LogicTrace.parameter2Variable.put(pquery->vParam,lParam) 119 viatra2LogicTrace.parameter2Variable.put(pquery->vParam,lParam)
@@ -252,13 +254,21 @@ class Viatra2Logic {
252 254
253 def TypeDescriptor getType(PVariable v, PBody body, TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) { 255 def TypeDescriptor getType(PVariable v, PBody body, TracedOutput<LogicProblem, Ecore2Logic_Trace> ecore2LogicTrace) {
254 if(v.isPositiveVariable) { 256 if(v.isPositiveVariable) {
255 val types = v.lookup( 257 val allTypes = v.lookup(
256 body.getAllUnaryTypeRestrictions(EMFQueryMetaContext.INSTANCE)) 258 body.getAllUnaryTypeRestrictions(EMFQueryMetaContext.INSTANCE))
259 val types = allTypes.filter[it.inputKey instanceof BaseEMFTypeKey<?>].toSet
260
257 if(types.size == 0) { 261 if(types.size == 0) {
258 throw new AssertionError('''No type for «v.name»''') 262 throw new AssertionError('''
263 No EMF type for «v.name».
264 Non-EMF types: [«FOR t : allTypes.filter[!types.contains(it)].map[inputKey.prettyPrintableName] SEPARATOR ','»«t»«ENDFOR»]''')
259 } else if(types.size == 1){ 265 } else if(types.size == 1){
260 return (types.head.inputKey as BaseEMFTypeKey<? extends EClassifier>).transformTypeReference(ecore2LogicTrace) 266 return (types.head.inputKey as BaseEMFTypeKey<? extends EClassifier>).transformTypeReference(ecore2LogicTrace)
261 } else { 267 } else {
268// println('''
269// Type Judgements of «v.name»
270// «types.map[inputKey.prettyPrintableName]»
271// ''')
262 return this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace, 272 return this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace,
263 calculateCommonSubtype(types.map[ 273 calculateCommonSubtype(types.map[
264 (it.inputKey as BaseEMFTypeKey<EClass>).emfKey as EClass 274 (it.inputKey as BaseEMFTypeKey<EClass>).emfKey as EClass
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
index 7caa3e19..34094cac 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
@@ -89,7 +89,8 @@ class PatternGenerator {
89 String targetVariable, 89 String targetVariable,
90 Modality modality) 90 Modality modality)
91 { 91 {
92 throw new UnsupportedOperationException 92 '''find «modality.name.toLowerCase»InRelation«canonizeName('''«attribute.name» attribute «attribute.EContainingClass.name»''')
93 »(problem,interpretation,«sourceVariable»,«targetVariable»);'''
93 } 94 }
94 95
95 public def canonizeName(String name) { 96 public def canonizeName(String name) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend
index 794e706b..39b6fbc0 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend
@@ -91,7 +91,8 @@ class RelationDefinitionIndexer {
91 }«ENDFOR» 91 }«ENDFOR»
92 ''' 92 '''
93 } catch(UnsupportedOperationException e) { 93 } catch(UnsupportedOperationException e) {
94 throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"!''',e) 94 e.printStackTrace
95 throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"! Reason: «e.message»''',e)
95 } 96 }
96 } 97 }
97 private def transformPatternWithTwoParameters(RelationDefinition relation, PQuery p, Modality modality) { 98 private def transformPatternWithTwoParameters(RelationDefinition relation, PQuery p, Modality modality) {
@@ -137,7 +138,7 @@ class RelationDefinitionIndexer {
137 modality.toMustMay) 138 modality.toMustMay)
138 } else throw new UnsupportedOperationException('''unknown key: «key.class»''') 139 } else throw new UnsupportedOperationException('''unknown key: «key.class»''')
139 } else { 140 } else {
140 throw new UnsupportedOperationException() 141 throw new UnsupportedOperationException('''Unsupported touple size: «touple.size»''')
141 } 142 }
142 } 143 }
143 144
@@ -196,10 +197,22 @@ class RelationDefinitionIndexer {
196 var String additionalDefinition; 197 var String additionalDefinition;
197 if(target instanceof EEnumLiteral) { 198 if(target instanceof EEnumLiteral) {
198 targetString = '''const_«target.name»_«target.EEnum.name»''' 199 targetString = '''const_«target.name»_«target.EEnum.name»'''
199 additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); LogicProblem.elements(problem,«targetString»);''' 200 additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); //LogicProblem.elements(problem,«targetString»);'''
200 } else if(target instanceof Integer) { 201 } else if(target instanceof Integer) {
201 targetString = target.toString 202 targetString = '''const_«target»_Integer'''
202 additionalDefinition = '''''' 203 additionalDefinition = '''IntegerElement.value(«targetString»,«target»);'''
204 } else if(target instanceof Boolean) {
205 targetString = '''const_«target»_Boolean'''
206 additionalDefinition = '''BooleanElement.value(«targetString»,«target»);'''
207 } else if(target instanceof String) {
208 targetString = '''const_«target»_String'''
209 additionalDefinition = '''StringElement.value(«targetString»,"«target»");'''
210 } else if(target instanceof Double) {
211 targetString = '''const_«target»_Number'''
212 additionalDefinition = '''RealElement.value(«targetString»,"«target»");'''
213 } else if(target instanceof Float) {
214 targetString = '''const_«target»_Number'''
215 additionalDefinition = '''RealElement.value(«targetString»,"«target»");'''
203 } else { 216 } else {
204 throw new UnsupportedOperationException('''Unknown constant type: «target.class»''') 217 throw new UnsupportedOperationException('''Unknown constant type: «target.class»''')
205 } 218 }
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend
index 9afec0de..630fad51 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend
@@ -23,16 +23,16 @@ abstract class TypeIndexer {
23 reference.referred.referInstanceOf(modality,variableName) 23 reference.referred.referInstanceOf(modality,variableName)
24 } 24 }
25 public def dispatch CharSequence referInstanceOfByReference(BoolTypeReference reference, Modality modality, String variableName) { 25 public def dispatch CharSequence referInstanceOfByReference(BoolTypeReference reference, Modality modality, String variableName) {
26 '''find instaneofBoolean(problem, interpretation, «variableName»);''' 26 '''BooleanElement(«variableName»);'''
27 } 27 }
28 public def dispatch CharSequence referInstanceOfByReference(IntTypeReference reference, Modality modality, String variableName) { 28 public def dispatch CharSequence referInstanceOfByReference(IntTypeReference reference, Modality modality, String variableName) {
29 '''find pattern instaneofInteger(problem, interpretation, «variableName»);''' 29 '''IntegerElement(«variableName»);'''
30 } 30 }
31 public def dispatch CharSequence referInstanceOfByReference(RealTypeReference reference, Modality modality, String variableName) { 31 public def dispatch CharSequence referInstanceOfByReference(RealTypeReference reference, Modality modality, String variableName) {
32 '''find pattern instaneofReal(problem, interpretation, «variableName»);''' 32 '''RealElement(«variableName»);'''
33 } 33 }
34 public def dispatch CharSequence referInstanceOfByReference(StringTypeReference reference, Modality modality, String variableName) { 34 public def dispatch CharSequence referInstanceOfByReference(StringTypeReference reference, Modality modality, String variableName) {
35 '''find pattern instaneofString(problem, interpretation, «variableName»);''' 35 '''StringElement(«variableName»);'''
36 } 36 }
37 37
38} \ No newline at end of file 38} \ No newline at end of file
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
index d9c1b8f6..761e77b1 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend
@@ -104,12 +104,18 @@ class InstanceModel2PartialInterpretation {
104 if(attribute.isMany) { 104 if(attribute.isMany) {
105 val listOfTargets = source.eGet(attribute) as List<? extends EObject> 105 val listOfTargets = source.eGet(attribute) as List<? extends EObject>
106 for(target : listOfTargets) { 106 for(target : listOfTargets) {
107 translateLink(interpretation,sourceElement,translateValue(target,ecore2LogicTrace,partialInterpretationTrace)) 107 val value = translateValue(target,ecore2LogicTrace,partialInterpretationTrace)
108 if(value != null) {
109 translateLink(interpretation,sourceElement,value)
110 }
108 } 111 }
109 } else { 112 } else {
110 val target = source.eGet(attribute) 113 val target = source.eGet(attribute)
111 if(target !== null) { 114 if(target !== null) {
112 translateLink(interpretation,sourceElement,translateValue(target,ecore2LogicTrace,partialInterpretationTrace)) 115 val value = translateValue(target,ecore2LogicTrace,partialInterpretationTrace)
116 if(value != null) {
117 translateLink(interpretation,sourceElement,value)
118 }
113 } 119 }
114 } 120 }
115 } 121 }
@@ -131,6 +137,6 @@ class InstanceModel2PartialInterpretation {
131 } 137 }
132 138
133 dispatch protected def translateValue(Object value, Ecore2Logic_Trace ecore2LogicTrace, Problem2PartialInterpretationTrace partialInterpretationTrace) { 139 dispatch protected def translateValue(Object value, Ecore2Logic_Trace ecore2LogicTrace, Problem2PartialInterpretationTrace partialInterpretationTrace) {
134 throw new UnsupportedOperationException('''Mapping of «value.class.simpleName» in partial models is currently not supported!''') 140 //throw new UnsupportedOperationException('''Mapping of «value.class.simpleName» in partial models is currently not supported!''')
135 } 141 }
136} \ No newline at end of file 142} \ No newline at end of file
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 936f2117..a5739edf 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
@@ -184,7 +184,13 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
184 } 184 }
185 185
186 def private getElements(PartialInterpretation model) { 186 def private getElements(PartialInterpretation model) {
187 return model.problem.elements + model.newElements 187 return
188 model.problem.elements +
189 model.newElements +
190 model.booleanelements+
191 model.integerelements+
192 model.stringelement+
193 model.realelements
188 } 194 }
189 195
190 def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, Set<TypeDeclaration> relevantTypes) { 196 def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, Set<TypeDeclaration> relevantTypes) {
@@ -222,8 +228,8 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
222 if(type.isRelevant(relevantRelations)) { 228 if(type.isRelevant(relevantRelations)) {
223 for(link : relationInterpretation.relationlinks) { 229 for(link : relationInterpretation.relationlinks) {
224 if(link instanceof BinaryElementRelationLink) { 230 if(link instanceof BinaryElementRelationLink) {
225 OutgoingRelations.get(link.param1) += new OutgoingRelation(link.param2,type.name) 231 OutgoingRelations.get(link.param1) += new OutgoingRelation(link.param2,type.name)
226 IncomingRelations.get(link.param2) += new IncomingRelation(link.param1,type.name) 232 IncomingRelations.get(link.param2) += new IncomingRelation(link.param1,type.name)
227 } else throw new UnsupportedOperationException 233 } else throw new UnsupportedOperationException
228 } 234 }
229 } 235 }
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
index 819cae00..6e948827 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
@@ -12,6 +12,16 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
12import java.util.Set 12import java.util.Set
13 13
14class PartialInterpretation2Gml { 14class PartialInterpretation2Gml {
15 def private getElements(PartialInterpretation model) {
16 return
17 model.problem.elements +
18 model.newElements +
19 model.booleanelements+
20 model.integerelements+
21 model.stringelement+
22 model.realelements
23 }
24
15 def public transform(PartialInterpretation i) { 25 def public transform(PartialInterpretation i) {
16 val p = i.problem 26 val p = i.problem
17 val Map<DefinedElement, Integer> objectToID = new HashMap 27 val Map<DefinedElement, Integer> objectToID = new HashMap
@@ -19,7 +29,7 @@ class PartialInterpretation2Gml {
19 ''' 29 '''
20 graph 30 graph
21 [ 31 [
22 «FOR object:p.elements + i.newElements SEPARATOR '\n'» 32 «FOR object:i.elements SEPARATOR '\n'»
23 «this.transformObject(object,object.typesOfElement(i),objectToID)» 33 «this.transformObject(object,object.typesOfElement(i),objectToID)»
24 «ENDFOR» 34 «ENDFOR»
25 «FOR relation:i.partialrelationinterpretation» 35 «FOR relation:i.partialrelationinterpretation»
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
index e4ff4146..95e1f74d 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
@@ -29,6 +29,8 @@ import static guru.nidi.graphviz.model.Factory.*
29 29
30import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 30import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
31import java.awt.image.BufferedImage 31import java.awt.image.BufferedImage
32import java.util.Collection
33import org.eclipse.xtext.xbase.lib.Functions.Function1
32 34
33class GraphvizVisualisation implements PartialInterpretationVisualiser { 35class GraphvizVisualisation implements PartialInterpretationVisualiser {
34 36
@@ -44,6 +46,16 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser {
44 visualisePartialInterpretation(partialInterpretation,false) 46 visualisePartialInterpretation(partialInterpretation,false)
45 } 47 }
46 48
49 def private getElements(PartialInterpretation model) {
50 return
51 model.problem.elements +
52 model.newElements +
53 model.booleanelements+
54 model.integerelements+
55 model.stringelement+
56 model.realelements
57 }
58
47 def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) { 59 def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) {
48 val problem = partialInterpretation.problem 60 val problem = partialInterpretation.problem
49 61
@@ -51,7 +63,7 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser {
51 val oldElements = problem.elements 63 val oldElements = problem.elements
52 val newElements = partialInterpretation.newElements 64 val newElements = partialInterpretation.newElements
53 //val prototypeElements = #[partialInterpretation.openWorldElementPrototype] 65 //val prototypeElements = #[partialInterpretation.openWorldElementPrototype]
54 val allElements = problem.elements + partialInterpretation.newElements 66 val allElements = getElements(partialInterpretation)
55 67
56 // Indexing types 68 // Indexing types
57 val mustTypes = new HashMap<DefinedElement,Set<Type>> 69 val mustTypes = new HashMap<DefinedElement,Set<Type>>
@@ -90,7 +102,18 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser {
90 elements2ID.put(newElement,id) 102 elements2ID.put(newElement,id)
91 elements2Node.put(newElement,image) 103 elements2Node.put(newElement,image)
92 } 104 }
93 // Prototype elements 105// for(booleanElementIndex: 0..<partialInterpretation.booleanelements.size) {
106// val newElement = partialInterpretation.booleanelements.get(booleanElementIndex)
107// val id = '''«newElement.value»'''
108// val image = drawElement(newElement,id,false,emptySet,emptySet)
109// elements2ID.put(newElement,id)
110// elements2Node.put(newElement,image)
111// }
112
113 partialInterpretation.booleanelements.drawDataTypes([it.value.toString],elements2Node,elements2ID)
114 partialInterpretation.integerelements.drawDataTypes([it.value.toString],elements2Node,elements2ID)
115 partialInterpretation.stringelement.drawDataTypes(['''"«it.value.toString»"'''],elements2Node,elements2ID)
116 partialInterpretation.realelements.drawDataTypes([it.value.toString],elements2Node,elements2ID)
94 117
95 // Drawing the edges 118 // Drawing the edges
96 val edges = new HashMap 119 val edges = new HashMap
@@ -116,6 +139,16 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser {
116 return new GraphvisVisualisation(graph) 139 return new GraphvisVisualisation(graph)
117 } 140 }
118 141
142 def protected <T extends DefinedElement> void drawDataTypes(Collection<T> collection, Function1<T,String> namer, HashMap<DefinedElement, Node> elements2Node, HashMap<DefinedElement, String> elements2ID) {
143 for(booleanElementIndex: 0..<collection.size) {
144 val newElement = collection.get(booleanElementIndex)
145 val id = namer.apply(newElement)
146 val image = drawElement(newElement,id,false,emptySet,emptySet)
147 elements2ID.put(newElement,id)
148 elements2Node.put(newElement,image)
149 }
150 }
151
119 def protected drawElement(DefinedElement element, String ID, boolean old, Set<Type> mustTypes, Set<Type> mayTypes) { 152 def protected drawElement(DefinedElement element, String ID, boolean old, Set<Type> mustTypes, Set<Type> mayTypes) {
120 var tableStyle = ''' CELLSPACING="0" BORDER="2" CELLBORDER="0" CELLPADDING="1" STYLE="ROUNDED"''' 153 var tableStyle = ''' CELLSPACING="0" BORDER="2" CELLBORDER="0" CELLPADDING="1" STYLE="ROUNDED"'''
121 if(typeColoringStyle==TypeColoringStyle::AVERAGE) { 154 if(typeColoringStyle==TypeColoringStyle::AVERAGE) {