diff options
author | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-03-24 21:44:49 -0400 |
---|---|---|
committer | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-03-24 21:44:49 -0400 |
commit | f42954a45bea9f3e40090447804f33f12c080640 (patch) | |
tree | 1c57d4ca595bf7825460c6aa080f93ea04d5689c | |
parent | Factory for string literals. (diff) | |
download | VIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.tar.gz VIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.tar.zst VIATRA-Generator-f42954a45bea9f3e40090447804f33f12c080640.zip |
upgraded attribute support for the graph solver
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 | |||
12 | import java.util.Set | 12 | import java.util.Set |
13 | 13 | ||
14 | class PartialInterpretation2Gml { | 14 | class 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 | ||
30 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | 30 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* |
31 | import java.awt.image.BufferedImage | 31 | import java.awt.image.BufferedImage |
32 | import java.util.Collection | ||
33 | import org.eclipse.xtext.xbase.lib.Functions.Function1 | ||
32 | 34 | ||
33 | class GraphvizVisualisation implements PartialInterpretationVisualiser { | 35 | class 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) { |