From 8872950a961a07525a871ea5459f67ae138546a1 Mon Sep 17 00:00:00 2001 From: Rebus Farkas Date: Wed, 19 Sep 2018 14:22:01 +0200 Subject: Extend hypergraph shaping functionality --- .../META-INF/MANIFEST.MF | 2 +- .../InstanceModel2PartialInterpretation.xtend | 21 ++++++++- ...nterpretation2NeighbourhoodRepresentation.xtend | 54 ++++++++++++++++++++++ 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, org.eclipse.xtext.xbase.lib, org.eclipse.xtend.lib, org.eclipse.xtend.lib.macro, - org.eclipse.viatra.query.runtime;bundle-version="1.5.0", + org.eclipse.viatra.query.runtime;bundle-version="1.5.0";visibility:=reexport, org.eclipse.viatra.dse;bundle-version="0.15.0", hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0" Bundle-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 { return transform(metamodelTranslationResult,objects,withID) } - public def transform( + public def transformWithTrace( + TracedOutput metamodelTranslationResult, + Resource resource, + boolean withID) + { + val objects = resource.allContents.toList + return transformWithTrace(metamodelTranslationResult,objects,withID) + } + + public def transformWithTrace( TracedOutput metamodelTranslationResult, List objects, boolean withID) @@ -130,7 +139,15 @@ class InstanceModel2PartialInterpretation { } } - return partialInterpretation + return new TracedOutput(partialInterpretation,object2DefinedElement) + } + + public def transform( + TracedOutput metamodelTranslationResult, + List objects, + boolean withID) + { + return transformWithTrace(metamodelTranslationResult,objects,withID).output } private def createTypeScopesFromKnownAttributeValues(List objects, Set 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>> relevantPatterns) { + + val Map> types = new HashMap + fillTypes(model, types, null) + val Map>> IncomingRelations = new HashMap; + val Map>> OutgoingRelations = new HashMap; + fillReferences(model, IncomingRelations, OutgoingRelations, null); + val Map>> PatternRelations = createPatternRelations(model, + relevantPatterns); + + val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, PatternRelations,range, parallels, + maxNumber); + + return res; + } /** * Collects all pattern relations for shaping @@ -135,6 +163,32 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> createPatternRelations( + PartialInterpretation model, Map>> relevantPatterns) { + val Map>> result=new HashMap; + + for (element : model.elements) { + result.put(element,new LinkedList>) + } + if (relevantPatterns===null) return result; + for (patternName : relevantPatterns.keySet) { + val allMatches=relevantPatterns.get(patternName) + + for (match : allMatches) { + var id=0; + for (matchedElement:match) { + if (matchedElement!==null) { + result.get(matchedElement).add(new PatternRelation(patternName,id,match)) + } + id++ + } + } + } + + return result; + + } def private isRelevant(TypeDeclaration t, Set relevantTypes) { if (relevantTypes === null) { -- cgit v1.2.3-54-g00ecf