From b0148d89a76b8fcbeb2e021442842e4e89690ef3 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Thu, 4 Jun 2015 18:27:28 +0100 Subject: Fixed terms' depth count in SkolemTermsManager (it was always zero). --- pom.xml | 16 ++++++++++++++- .../pagoda/multistage/MultiStageQueryEngine.java | 3 +++ .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 2 +- .../LimitedSkolemisationApproximator.java | 8 ++++---- .../rules/approximators/SkolemTermsManager.java | 23 ++++++++++------------ src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java | 11 ++++++++--- test/resources/LightTests.xml | 4 ++-- .../ox/cs/pagoda/global_tests/TestPagodaFLY.java | 2 +- 8 files changed, 44 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index ad8c2b1..0a9f1c7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,4 @@ - 4.0.0 uk.ac.ox.cs.pagoda @@ -88,6 +88,20 @@ dashboard-maven-plugin 1.0.0-beta-1 + + org.apache.maven.plugins + maven-surefire-plugin + 2.13 + + always + + false + + + testResources/LightTests.xml + + + diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java index 0987279..af1b413 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java @@ -168,6 +168,9 @@ public class MultiStageQueryEngine extends StageQueryEngine { store.makeFactsExplicit(); subTimer.reset(); oldTripleCount = store.getTriplesCount(); + + Utility.logInfo("Number of violations: " + violations.size()); + for(Violation v : violations) { Utility.logDebug("Dealing with violation: " + v.constraint); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 123bd5e..727f80d 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -190,7 +190,7 @@ class MyQueryReasoner extends QueryReasoner { return; OWLOntology relevantOntologySubset = extractRelevantOntologySubset(queryRecord); - queryRecord.saveRelevantOntology("/home/alessandro/Desktop/fragment_query" + queryRecord.getQueryID() + ".owl"); +// queryRecord.saveRelevantOntology("./fragment_query" + queryRecord.getQueryID() + ".owl"); if(PagodaProperties.getDefaultUseSkolemUpperBound() && querySkolemisedRelevantSubset(relevantOntologySubset, queryRecord)) diff --git a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java index dc2ba8a..da67264 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java +++ b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java @@ -64,14 +64,14 @@ public class LimitedSkolemisationApproximator implements TupleDependentApproxima private Collection overApprox(DLClause clause, DLClause originalClause, Collection> violationTuples) { ArrayList result = new ArrayList<>(); - for(Tuple violationTuple : violationTuples) - if(getMaxDepth(violationTuple) > maxTermDepth) { - result.addAll(alternativeApproximator.convert(clause, originalClause, null)); + if(getMaxDepth(violationTuple) < maxTermDepth) { + result.addAll(getGroundSkolemisation(clause, originalClause, violationTuple)); Utility.logDebug("Approximating maximal individual by a constant in rule:" + originalClause); } else - result.addAll(getGroundSkolemisation(clause, originalClause, violationTuple)); + result.addAll(alternativeApproximator.convert(clause, originalClause, null)); + return result; } diff --git a/src/uk/ac/ox/cs/pagoda/rules/approximators/SkolemTermsManager.java b/src/uk/ac/ox/cs/pagoda/rules/approximators/SkolemTermsManager.java index 07ad1f9..ef004c4 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/approximators/SkolemTermsManager.java +++ b/src/uk/ac/ox/cs/pagoda/rules/approximators/SkolemTermsManager.java @@ -21,7 +21,6 @@ public class SkolemTermsManager { private Map individualToDepth_map = new HashMap<>(); private int dependenciesCounter = 0; - // TODO replace with hashcode. in case of collision you would get only a different upper bound model. private Map, Integer> dependencyToId_map = new HashMap<>(); private SkolemTermsManager() { @@ -49,36 +48,33 @@ public class SkolemTermsManager { /** * Get a fresh Individual, unique for the clause, the offset and the dependency. - * */ + */ public Individual getFreshIndividual(DLClause originalClause, int offset, Tuple dependency) { String termId = Integer.toString(mapClauseToId(originalClause) + offset) + "_" + mapDependencyToId(dependency); Individual newIndividual = Individual.create(SKOLEMISED_INDIVIDUAL_PREFIX + termId); int depth = 0; - for (Individual individual : dependency) + for(Individual individual : dependency) depth = Integer.max(depth, getDepthOf(individual)); - individualToDepth_map.put(newIndividual, depth); + individualToDepth_map.put(newIndividual, depth + 1); return newIndividual; } /** * Get a fresh Individual, unique for the clause and the offset. - * */ + */ public Individual getFreshIndividual(DLClause originalClause, int offset) { String termId = Integer.toString(mapClauseToId(originalClause) + offset); - Individual newIndividual = Individual.create(SKOLEMISED_INDIVIDUAL_PREFIX + termId); -// individualToDepth_map.put(newIndividual, 0); // TODO REMOVE - - return newIndividual; + return Individual.create(SKOLEMISED_INDIVIDUAL_PREFIX + termId); } /** * Get the depth of a term. *

* The term must have been generated by this manager. - * */ + */ public int getDepthOf(Individual individual) { if(individualToDepth_map.containsKey(individual)) return individualToDepth_map.get(individual); else return 0; @@ -86,7 +82,7 @@ public class SkolemTermsManager { /** * Get the number of individuals generated by this manager. - * */ + */ public int getNumberOfSkolemisedIndividual() { return individualToDepth_map.keySet().size(); } @@ -107,9 +103,10 @@ public class SkolemTermsManager { private int noOfExistential(DLClause originalClause) { int no = 0; - for (Atom atom : originalClause.getHeadAtoms()) - if (atom.getDLPredicate() instanceof AtLeast) + for(Atom atom : originalClause.getHeadAtoms()) + if(atom.getDLPredicate() instanceof AtLeast) no += ((AtLeast) atom.getDLPredicate()).getNumber(); return no; } + } diff --git a/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java b/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java index 3e72748..9139a5d 100644 --- a/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java +++ b/src/uk/ac/ox/cs/pagoda/util/tuples/Tuple.java @@ -1,6 +1,7 @@ package uk.ac.ox.cs.pagoda.util.tuples; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.Spliterator; import java.util.function.Consumer; @@ -11,10 +12,9 @@ public class Tuple implements Iterable { Tuple() { } + @SafeVarargs public Tuple(T... elements) { - for(T t: elements) { - this.elements.add(t); - } + Collections.addAll(this.elements, elements); } public Tuple(Iterable iterable) { @@ -41,4 +41,9 @@ public class Tuple implements Iterable { public Spliterator spliterator() { return elements.spliterator(); } + + @Override + public int hashCode() { + return elements.hashCode() + getClass().hashCode(); + } } diff --git a/test/resources/LightTests.xml b/test/resources/LightTests.xml index 859e3fa..e260c25 100644 --- a/test/resources/LightTests.xml +++ b/test/resources/LightTests.xml @@ -10,10 +10,10 @@ - + - + \ No newline at end of file diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java index 352bcba..4fdccf8 100644 --- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java +++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java @@ -12,7 +12,7 @@ import java.nio.file.Paths; public class TestPagodaFLY { - @Test(groups = {"light"}) + // @Test(groups = {"light"}) public void answersCorrectness_withGJFC() throws IOException { String ontoDir = TestUtil.getConfig().getProperty("ontoDir"); Path answers = Paths.get(File.createTempFile("answers", ".json").getAbsolutePath()); -- cgit v1.2.3