From 51afd0eebaf00906d128b5bbcb16de0571ef6bb9 Mon Sep 17 00:00:00 2001 From: Akira <akira.charoensit@inria.fr> Date: Tue, 25 Mar 2025 10:05:51 +0100 Subject: [PATCH] (All tests passing) adding cylic tests, refactoring tracker GRI --- ...actStaticGRIBasedExplainer_TrackerGRI.java | 39 +++++-------- .../MowlOntologyTest.java | 2 +- .../FactSupportExplainerTest.java | 54 +++++++++++++++++ .../RuleSupportExplainerTest.java | 54 +++++++++++++++++ .../FactSupportExplainerSat4JTest.java | 54 +++++++++++++++++ .../RuleSupportExplainerSat4JTest.java | 55 ++++++++++++++++++ ...xplainerWithLinearTrackerAndSat4JTest.java | 53 +++++++++++++++++ ...xplainerWithLinearTrackerAndSat4JTest.java | 58 +++++++++++++++++++ 8 files changed, 345 insertions(+), 24 deletions(-) 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 e757dc7dc..2fdb5d0fc 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 b66e0c7cf..8b3d766e8 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 9ddf4ceea..40a6267ae 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 5cc7c7ca9..8b396462e 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 648373cfa..c0702b15c 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 f2aae67ce..0d1bd3612 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 396a9f00c..7299603e9 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 01a754253..4b877eaef 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"); + } + + } -- GitLab