diff --git a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/explainers/AbstractStaticGRIBasedExplainer_TrackerGRI.java b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/explainers/AbstractStaticGRIBasedExplainer_TrackerGRI.java index e757dc7dcf9e98d9955617a4e48e507c5137dff2..2fdb5d0fca7cd927a217aa9eb96fd37b49b99374 100644 --- a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/explainers/AbstractStaticGRIBasedExplainer_TrackerGRI.java +++ b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/explainers/AbstractStaticGRIBasedExplainer_TrackerGRI.java @@ -28,7 +28,7 @@ public abstract class AbstractStaticGRIBasedExplainer_TrackerGRI<ExplanationType /* * A KB where we want to trace bodyAtoms */ - protected KnowledgeBase kb; + protected KnowledgeBase inputKB; /* * A KB whose factbase will contain the GRI and whose rulebase is the transformedRB @@ -45,39 +45,32 @@ public abstract class AbstractStaticGRIBasedExplainer_TrackerGRI<ExplanationType * The factory for transforming rules */ GRIRuleTransformer ruleTransformer = GRIRuleTransformer.instance(); - + Predicate<Atom> belongsToInitialFactbase; /** * Sets the initial KB and compute the GRI * - * @param kb the current kb + * @param inputKB the current kb */ - public AbstractStaticGRIBasedExplainer_TrackerGRI(KnowledgeBase kb) { - this.kb = kb; + public AbstractStaticGRIBasedExplainer_TrackerGRI(KnowledgeBase inputKB, Solver solver) { + this.inputKB = inputKB; this.intialAtoms = new HashSet<Atom>(); - kb.getFactBase().getAtoms().forEach(intialAtoms::add); + inputKB.getFactBase().getAtoms().forEach(intialAtoms::add); - var trackedChase = DefaultChaseForExplanations.chaseForTracker(this.kb); + var trackedChase = DefaultChaseForExplanations.chaseForTracker(this.inputKB); this.griKBChase = trackedChase.chase(); this.griTracker = trackedChase.tracker(); } - /** - * Sets the initial KB and compute the GRI - * - * @param kb the current kb - */ - public AbstractStaticGRIBasedExplainer_TrackerGRI(KnowledgeBase kb, Solver solver) { - this.kb = kb; - - this.intialAtoms = new HashSet<Atom>(); - kb.getFactBase().getAtoms().forEach(intialAtoms::add); + public void pipeline() { + recordInitialFactbase(); + } - var trackedChase = DefaultChaseForExplanations.chaseForTracker(this.kb); - this.griKBChase = trackedChase.chase(); - this.griTracker = trackedChase.tracker(); - this.solver=solver; + public void recordInitialFactbase() { + belongsToInitialFactbase = atom -> inputKB.getFactBase().contains(atom); } + + /** * Saturates the GRI with Tracing rules to compute relevant bodyAtoms and triggers for the query. * Then calls the solver. @@ -86,11 +79,11 @@ public abstract class AbstractStaticGRIBasedExplainer_TrackerGRI<ExplanationType * @return */ public Set<ExplanationType> getAllExplanations(Atom query) { - if (!kb.getFactBase().contains(query)) { + if (!inputKB.getFactBase().contains(query)) { return Set.of(); } - Predicate<Atom> belongsToInitialFactbase = atom -> intialAtoms.contains(atom) ; + belongsToInitialFactbase = atom -> intialAtoms.contains(atom) ; var res = getGMUSProcessor(this.solver).computeAllExplanations(griTracker, query, belongsToInitialFactbase); diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/check_has_explanation/MowlOntologyTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/check_has_explanation/MowlOntologyTest.java index b66e0c7cfa86a8142e67bb3ceac71b444afa228b..8b3d766e84dc834ac85e216df5b18831a21441d2 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/check_has_explanation/MowlOntologyTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/check_has_explanation/MowlOntologyTest.java @@ -30,7 +30,7 @@ import java.util.stream.Stream; public class MowlOntologyTest { static String mowl_bench_path = "./src/test/resources/mowl-bench-main/"; - static List<String> mowl_bench_datasets = TestData.default_mowl_bench_datasets; + static List<String> mowl_bench_datasets = TestData.all_mowl_bench_datasets; enum AtomicQueryExplainerType { STATIC_GRI_FB_MARCO, diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/FactSupportExplainerTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/FactSupportExplainerTest.java index 9ddf4ceea56075fc17196cf0f028377559d85083..40a6267aebd9dbff018b46cd2ca87aa13ff3d986 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/FactSupportExplainerTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/FactSupportExplainerTest.java @@ -28,6 +28,60 @@ public class FactSupportExplainerTest { public void setUp() { } + + + @Test + public void FactSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new FactSupportExplainer_KBGRI(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + @Test + public void FactSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new FactSupportExplainer_KBGRI(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void FactSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new FactSupportExplainer_KBGRI(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + @Test public void FactSupportExplainerTest4() { Atom query = TestData.pa; diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/RuleSupportExplainerTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/RuleSupportExplainerTest.java index 5cc7c7ca9f24d7035a4e85d2045f0491a3ca0130..8b396462e9649d4586ab8f7906a7f086bed20b5f 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/RuleSupportExplainerTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_marco/RuleSupportExplainerTest.java @@ -137,4 +137,58 @@ public class RuleSupportExplainerTest { } + + @Test + public void RuleSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new RuleSupportExplainer_KBGRI(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx, TestData.r10_qx_tx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new RuleSupportExplainer_KBGRI(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = new RuleSupportExplainer_KBGRI(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + } diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/FactSupportExplainerSat4JTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/FactSupportExplainerSat4JTest.java index 648373cfab1c383fdff2f7cf9c01110456b8a189..c0702b15c20c19f78ca7276c6a23994340337d88 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/FactSupportExplainerSat4JTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/FactSupportExplainerSat4JTest.java @@ -35,6 +35,60 @@ public class FactSupportExplainerSat4JTest { public void setUp() { } + + + @Test + public void FactSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + @Test + public void FactSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void FactSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + @Test public void FactSupportExplainerTest4() { Atom query = TestData.pa; diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/RuleSupportExplainerSat4JTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/RuleSupportExplainerSat4JTest.java index f2aae67ce92654854a2986bc3cf352637017f654..0d1bd3612f42775cc82cf85b595c64dceba1f66a 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/RuleSupportExplainerSat4JTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/kb_gri_s4j/RuleSupportExplainerSat4JTest.java @@ -140,4 +140,59 @@ public class RuleSupportExplainerSat4JTest { } + + @Test + public void RuleSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx, TestData.r10_qx_tx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + } diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/FactSupportExplainerWithLinearTrackerAndSat4JTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/FactSupportExplainerWithLinearTrackerAndSat4JTest.java index 396a9f00ccadc7e5c1cf33b44397f08d6e961595..7299603e92e715267b6704a6cd0d7e363fa07df9 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/FactSupportExplainerWithLinearTrackerAndSat4JTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/FactSupportExplainerWithLinearTrackerAndSat4JTest.java @@ -5,6 +5,7 @@ import fr.boreal.explanation.kb_gri.explainers.static_gri.FactSupportExplainer_K import fr.boreal.explanation.kb_gri.rule_transformation.GRIRuleTransformer; import fr.boreal.explanation.solving_enumerating.sat4j.Sat4JSolver; import fr.boreal.explanation.tracker_gri.explainers.FactSupportExplainer_TrackerGRI; +import fr.boreal.explanation.tracker_gri.explainers.KBSupportExplainer_TrackerGRI; import fr.boreal.model.kb.api.FactBase; import fr.boreal.model.kb.api.KnowledgeBase; import fr.boreal.model.kb.api.RuleBase; @@ -35,6 +36,58 @@ public class FactSupportExplainerWithLinearTrackerAndSat4JTest { public void setUp() { } + @Test + public void FactSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + @Test + public void FactSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void FactSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<FactBase> explanations = explainer.getAllExplanations(query); + + FactBase expectedFactBase1 = new SimpleInMemoryGraphStore(Set.of(TestData.pa)); + + Assertions.assertTrue(explanations.contains(expectedFactBase1), "(Completeness issue) Explanation missing: " + expectedFactBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + @Test public void FactSupportExplainerTest4() { Atom query = TestData.pa; diff --git a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/RuleSupportExplainerWithLinearTrackerAndSat4JTest.java b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/RuleSupportExplainerWithLinearTrackerAndSat4JTest.java index 01a754253d4476ce2502c5836653467f8a25bd15..4b877eaefdbe458cadceeea92155ffc88449bc46 100644 --- a/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/RuleSupportExplainerWithLinearTrackerAndSat4JTest.java +++ b/integraal/integraal-explanation/src/test/java/fr/boreal/test/explanation/unit_tests/explainer/tracker_gri_s4j/RuleSupportExplainerWithLinearTrackerAndSat4JTest.java @@ -1,8 +1,10 @@ package fr.boreal.test.explanation.unit_tests.explainer.tracker_gri_s4j; +import fr.boreal.explanation.api.explainers.AtomicQueryExplainer; import fr.boreal.explanation.kb_gri.explainers.static_gri.RuleSupportExplainer_KBGRI; import fr.boreal.explanation.kb_gri.rule_transformation.GRIRuleTransformer; import fr.boreal.explanation.solving_enumerating.sat4j.Sat4JSolver; +import fr.boreal.explanation.tracker_gri.explainers.KBSupportExplainer_TrackerGRI; import fr.boreal.explanation.tracker_gri.explainers.RuleSupportExplainer_TrackerGRI; import fr.boreal.model.kb.api.FactBase; import fr.boreal.model.kb.api.KnowledgeBase; @@ -141,4 +143,60 @@ public class RuleSupportExplainerWithLinearTrackerAndSat4JTest { } + + + @Test + public void RuleSupportExplainerTestCyclic3() { + Atom query = TestData.ta; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx, TestData.r10_qx_tx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic2() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r10_qx_tx, TestData.r11_tx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + + @Test + public void RuleSupportExplainerTestCyclic1() { + Atom query = TestData.qa; + + FactBase factBase = new SimpleInMemoryGraphStore(List.of(TestData.pa)); + RuleBase ruleBase = new RuleBaseImpl(List.of(TestData.r1_px_qx,TestData.r9_qx_px)); + KnowledgeBase kb = new KnowledgeBaseImpl(factBase, ruleBase); + + explainer = getExplainer(kb); + Set<RuleBase> explanations = explainer.getAllExplanations(query); + + RuleBase expectedRuleBase1 = new RuleBaseImpl(Set.of(TestData.r1_px_qx)); + + Assertions.assertTrue(explanations.contains(expectedRuleBase1), "(Completeness issue) Explanation missing: " + expectedRuleBase1); + Assertions.assertEquals(1, explanations.size(), "(Soundness issue) identify non-explanation as explanation"); + } + + }