From f42954a45bea9f3e40090447804f33f12c080640 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 24 Mar 2018 21:44:49 -0400 Subject: upgraded attribute support for the graph solver --- .../logic2viatra/patterns/PatternGenerator.xtend | 3 +- .../patterns/RelationDefinitionIndexer.xtend | 23 +++++++++++--- .../logic2viatra/patterns/TypeIndexer.xtend | 8 ++--- .../InstanceModel2PartialInterpretation.xtend | 12 +++++-- ...nterpretation2NeighbourhoodRepresentation.xtend | 12 +++++-- .../visualisation/PartialInterpretation2Gml.xtend | 12 ++++++- .../PartialInterpretation2Graphviz.xtend | 37 ++++++++++++++++++++-- 7 files changed, 88 insertions(+), 19 deletions(-) (limited to 'Solvers/VIATRA-Solver') 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 { String targetVariable, Modality modality) { - throw new UnsupportedOperationException + '''find «modality.name.toLowerCase»InRelation«canonizeName('''«attribute.name» attribute «attribute.EContainingClass.name»''') + »(problem,interpretation,«sourceVariable»,«targetVariable»);''' } 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 { }«ENDFOR» ''' } catch(UnsupportedOperationException e) { - throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"!''',e) + e.printStackTrace + throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"! Reason: «e.message»''',e) } } private def transformPatternWithTwoParameters(RelationDefinition relation, PQuery p, Modality modality) { @@ -137,7 +138,7 @@ class RelationDefinitionIndexer { modality.toMustMay) } else throw new UnsupportedOperationException('''unknown key: «key.class»''') } else { - throw new UnsupportedOperationException() + throw new UnsupportedOperationException('''Unsupported touple size: «touple.size»''') } } @@ -196,10 +197,22 @@ class RelationDefinitionIndexer { var String additionalDefinition; if(target instanceof EEnumLiteral) { targetString = '''const_«target.name»_«target.EEnum.name»''' - additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); LogicProblem.elements(problem,«targetString»);''' + additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); //LogicProblem.elements(problem,«targetString»);''' } else if(target instanceof Integer) { - targetString = target.toString - additionalDefinition = '''''' + targetString = '''const_«target»_Integer''' + additionalDefinition = '''IntegerElement.value(«targetString»,«target»);''' + } else if(target instanceof Boolean) { + targetString = '''const_«target»_Boolean''' + additionalDefinition = '''BooleanElement.value(«targetString»,«target»);''' + } else if(target instanceof String) { + targetString = '''const_«target»_String''' + additionalDefinition = '''StringElement.value(«targetString»,"«target»");''' + } else if(target instanceof Double) { + targetString = '''const_«target»_Number''' + additionalDefinition = '''RealElement.value(«targetString»,"«target»");''' + } else if(target instanceof Float) { + targetString = '''const_«target»_Number''' + additionalDefinition = '''RealElement.value(«targetString»,"«target»");''' } else { throw new UnsupportedOperationException('''Unknown constant type: «target.class»''') } 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 { reference.referred.referInstanceOf(modality,variableName) } public def dispatch CharSequence referInstanceOfByReference(BoolTypeReference reference, Modality modality, String variableName) { - '''find instaneofBoolean(problem, interpretation, «variableName»);''' + '''BooleanElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(IntTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofInteger(problem, interpretation, «variableName»);''' + '''IntegerElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(RealTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofReal(problem, interpretation, «variableName»);''' + '''RealElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(StringTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofString(problem, interpretation, «variableName»);''' + '''StringElement(«variableName»);''' } } \ 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 { if(attribute.isMany) { val listOfTargets = source.eGet(attribute) as List for(target : listOfTargets) { - translateLink(interpretation,sourceElement,translateValue(target,ecore2LogicTrace,partialInterpretationTrace)) + val value = translateValue(target,ecore2LogicTrace,partialInterpretationTrace) + if(value != null) { + translateLink(interpretation,sourceElement,value) + } } } else { val target = source.eGet(attribute) if(target !== null) { - translateLink(interpretation,sourceElement,translateValue(target,ecore2LogicTrace,partialInterpretationTrace)) + val value = translateValue(target,ecore2LogicTrace,partialInterpretationTrace) + if(value != null) { + translateLink(interpretation,sourceElement,value) + } } } } @@ -131,6 +137,6 @@ class InstanceModel2PartialInterpretation { } dispatch protected def translateValue(Object value, Ecore2Logic_Trace ecore2LogicTrace, Problem2PartialInterpretationTrace partialInterpretationTrace) { - throw new UnsupportedOperationException('''Mapping of «value.class.simpleName» in partial models is currently not supported!''') + //throw new UnsupportedOperationException('''Mapping of «value.class.simpleName» in partial models is currently not supported!''') } } \ 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> node2Type, Set relevantTypes) { @@ -222,8 +228,8 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation objectToID = new HashMap @@ -19,7 +29,7 @@ class PartialInterpretation2Gml { ''' graph [ - «FOR object:p.elements + i.newElements SEPARATOR '\n'» + «FOR object:i.elements SEPARATOR '\n'» «this.transformObject(object,object.typesOfElement(i),objectToID)» «ENDFOR» «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.* import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* import java.awt.image.BufferedImage +import java.util.Collection +import org.eclipse.xtext.xbase.lib.Functions.Function1 class GraphvizVisualisation implements PartialInterpretationVisualiser { @@ -44,6 +46,16 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser { visualisePartialInterpretation(partialInterpretation,false) } + def private getElements(PartialInterpretation model) { + return + model.problem.elements + + model.newElements + + model.booleanelements+ + model.integerelements+ + model.stringelement+ + model.realelements + } + def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) { val problem = partialInterpretation.problem @@ -51,7 +63,7 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser { val oldElements = problem.elements val newElements = partialInterpretation.newElements //val prototypeElements = #[partialInterpretation.openWorldElementPrototype] - val allElements = problem.elements + partialInterpretation.newElements + val allElements = getElements(partialInterpretation) // Indexing types val mustTypes = new HashMap> @@ -90,7 +102,18 @@ class GraphvizVisualisation implements PartialInterpretationVisualiser { elements2ID.put(newElement,id) elements2Node.put(newElement,image) } - // Prototype elements +// for(booleanElementIndex: 0.. void drawDataTypes(Collection collection, Function1 namer, HashMap elements2Node, HashMap elements2ID) { + for(booleanElementIndex: 0.. mustTypes, Set mayTypes) { var tableStyle = ''' CELLSPACING="0" BORDER="2" CELLBORDER="0" CELLPADDING="1" STYLE="ROUNDED"''' if(typeColoringStyle==TypeColoringStyle::AVERAGE) { -- cgit v1.2.3-54-g00ecf