From ea0f09096afe05e2d414c707584e1e33c0c44383 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 21 Apr 2023 02:12:04 +0200 Subject: refactor: simplify ModelAdapter * Remove the reflection-based machinery around adapter types. * Adapter builders, store adapters, and model adapters are now only associated with each other based on static and runtime types. * Simplifies writing new adapters. * Hierarchical syntax for adding adapter builders to the store builder. --- .../tools/refinery/store/reasoning/Reasoning.java | 29 ---------------------- .../refinery/store/reasoning/ReasoningAdapter.java | 9 ++++--- .../refinery/store/reasoning/ReasoningBuilder.java | 2 +- .../reasoning/internal/ReasoningAdapterImpl.java | 2 +- .../reasoning/internal/ReasoningBuilderImpl.java | 13 ++++------ .../store/reasoning/lifting/DnfLifter.java | 8 +++--- .../reasoning/rule/RelationRefinementAction.java | 4 +-- .../reasoning/translator/TranslationUnit.java | 5 ---- .../base/BaseDecisionTranslationUnit.java | 5 ---- 9 files changed, 19 insertions(+), 58 deletions(-) delete mode 100644 subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java (limited to 'subprojects/store-reasoning') diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java deleted file mode 100644 index 3d3df2b2..00000000 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors - * - * SPDX-License-Identifier: EPL-2.0 - */ -package tools.refinery.store.reasoning; - -import tools.refinery.store.reasoning.internal.ReasoningBuilderImpl; -import tools.refinery.store.adapter.ModelAdapterBuilderFactory; -import tools.refinery.store.model.ModelStoreBuilder; -import tools.refinery.store.reasoning.representation.PartialRelation; - -public final class Reasoning extends ModelAdapterBuilderFactory { - public static final Reasoning ADAPTER = new Reasoning(); - - public static final PartialRelation EXISTS = new PartialRelation("exists", 1); - - public static final PartialRelation EQUALS = new PartialRelation("equals", 1); - - private Reasoning() { - super(ReasoningAdapter.class, ReasoningStoreAdapter.class, ReasoningBuilder.class); - } - - @Override - public ReasoningBuilder createBuilder(ModelStoreBuilder storeBuilder) { - return new ReasoningBuilderImpl(storeBuilder); - } -} diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java index 8dedddf7..8f319242 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java @@ -6,12 +6,15 @@ package tools.refinery.store.reasoning; import tools.refinery.store.adapter.ModelAdapter; +import tools.refinery.store.query.ResultSet; +import tools.refinery.store.query.dnf.Dnf; import tools.refinery.store.reasoning.representation.AnyPartialSymbol; +import tools.refinery.store.reasoning.representation.PartialRelation; import tools.refinery.store.reasoning.representation.PartialSymbol; -import tools.refinery.store.query.dnf.Dnf; -import tools.refinery.store.query.ResultSet; public interface ReasoningAdapter extends ModelAdapter { + PartialRelation EXISTS = new PartialRelation("exists", 1); + @Override ReasoningStoreAdapter getStoreAdapter(); @@ -23,5 +26,5 @@ public interface ReasoningAdapter extends ModelAdapter { PartialInterpretation getPartialInterpretation(PartialSymbol partialSymbol); - ResultSet getLiftedResultSet(Dnf query); + ResultSet getLiftedResultSet(Dnf query); } diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java index df7b6e4d..d3a337e8 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java @@ -29,5 +29,5 @@ public interface ReasoningBuilder extends ModelAdapterBuilder { Dnf lift(Modality modality, Dnf query); @Override - ReasoningStoreAdapter createStoreAdapter(ModelStore store); + ReasoningStoreAdapter build(ModelStore store); } diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java index 96514d36..33b6f3c6 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java @@ -37,7 +37,7 @@ public class ReasoningAdapterImpl implements ReasoningAdapter { } @Override - public ResultSet getLiftedResultSet(Dnf query) { + public ResultSet getLiftedResultSet(Dnf query) { return null; } } diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java index 49f7c7d3..aa71496c 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java @@ -7,16 +7,12 @@ package tools.refinery.store.reasoning.internal; import tools.refinery.store.adapter.AbstractModelAdapterBuilder; import tools.refinery.store.model.ModelStore; -import tools.refinery.store.model.ModelStoreBuilder; +import tools.refinery.store.query.dnf.Dnf; import tools.refinery.store.reasoning.ReasoningBuilder; import tools.refinery.store.reasoning.literal.Modality; -import tools.refinery.store.query.dnf.Dnf; - -public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements ReasoningBuilder { - public ReasoningBuilderImpl(ModelStoreBuilder storeBuilder) { - super(storeBuilder); - } +public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder + implements ReasoningBuilder { @Override public ReasoningBuilder liftedQuery(Dnf liftedQuery) { return null; @@ -24,11 +20,12 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements @Override public Dnf lift(Modality modality, Dnf query) { + checkNotConfigured(); return null; } @Override - public ReasoningStoreAdapterImpl createStoreAdapter(ModelStore store) { + public ReasoningStoreAdapterImpl doBuild(ModelStore store) { return null; } } diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java index 157f06e8..594005f1 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java @@ -14,7 +14,7 @@ import tools.refinery.store.query.literal.CallPolarity; import tools.refinery.store.query.literal.Literal; import tools.refinery.store.query.term.DataVariable; import tools.refinery.store.query.term.Variable; -import tools.refinery.store.reasoning.Reasoning; +import tools.refinery.store.reasoning.ReasoningAdapter; import tools.refinery.store.reasoning.literal.ModalConstraint; import tools.refinery.store.reasoning.literal.Modality; import tools.refinery.store.reasoning.literal.PartialLiterals; @@ -74,8 +74,8 @@ public class DnfLifter { } for (var quantifiedVariable : quantifiedVariables) { // Quantify over data variables that are not already quantified with the expected modality. - liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE, new ModalConstraint(modality, Reasoning.EXISTS), - List.of(quantifiedVariable))); + liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE, + new ModalConstraint(modality, ReasoningAdapter.EXISTS), List.of(quantifiedVariable))); } builder.clause(liftedLiterals); return changed || !quantifiedVariables.isEmpty(); @@ -87,7 +87,7 @@ public class DnfLifter { callLiteral.getPolarity() == CallPolarity.POSITIVE && callLiteral.getTarget() instanceof ModalConstraint modalConstraint && modalConstraint.modality() == modality && - modalConstraint.constraint().equals(Reasoning.EXISTS)) { + modalConstraint.constraint().equals(ReasoningAdapter.EXISTS)) { return callLiteral.getArguments().get(0); } return null; diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java index e4c702ea..0beee248 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java @@ -5,7 +5,7 @@ */ package tools.refinery.store.reasoning.rule; -import tools.refinery.store.reasoning.Reasoning; +import tools.refinery.store.reasoning.ReasoningAdapter; import tools.refinery.store.reasoning.representation.PartialRelation; import tools.refinery.store.model.Model; import tools.refinery.store.query.term.Variable; @@ -28,7 +28,7 @@ public record RelationRefinementAction(PartialRelation target, List ar @Override public RuleActionExecutor createExecutor(int[] argumentIndices, Model model) { - var targetInterpretation = model.getAdapter(Reasoning.ADAPTER).getPartialInterpretation(target); + var targetInterpretation = model.getAdapter(ReasoningAdapter.class).getPartialInterpretation(target); return activationTuple -> { int arity = argumentIndices.length; var arguments = new int[arity]; diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java index 7f01122b..6e44a7d7 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java @@ -6,7 +6,6 @@ package tools.refinery.store.reasoning.translator; import tools.refinery.store.model.Model; -import tools.refinery.store.model.ModelStoreBuilder; import tools.refinery.store.reasoning.ReasoningBuilder; import java.util.Collection; @@ -23,10 +22,6 @@ public abstract class TranslationUnit { configureReasoningBuilder(); } - protected ModelStoreBuilder getModelStoreBuilder() { - return reasoningBuilder.getStoreBuilder(); - } - protected void configureReasoningBuilder() { // Nothing to configure by default. } diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java index d41e11c6..405e58ac 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java @@ -36,11 +36,6 @@ public class BaseDecisionTranslationUnit extends TranslationUnit { this(partialRelation, new UniformSeed<>(partialRelation.arity(), TruthValue.UNKNOWN)); } - @Override - protected void configureReasoningBuilder() { - getModelStoreBuilder().symbol(symbol); - } - @Override public Collection getTranslatedRelations() { return List.of(new TranslatedBaseDecision(getReasoningBuilder(), partialRelation, symbol)); -- cgit v1.2.3-54-g00ecf