diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ac87275f5..6c7fbdc9a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,15 +6,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [Full changelog](https://github.com/LearnLib/learnlib/compare/learnlib-0.17.0...HEAD) +### Added + +* LearnLib now supports JPMS modules. All artifacts now provide a `module-info` descriptor except of the distribution artifacts (for Maven-less environments) which only provide an `Automatic-Module-Name` due to non-modular dependencies. Note that while this is a Java 9+ feature, LearnLib still supports Java 8 byte code for the remaining class files. + ### Changed +* The JPMS support introduces several changes: + * You now require at least a JDK 11 to build LearnLib. + * We use modules to better structure the aggregated JavaDoc. Since there exist breaking changes between Java 8 and Java 9 regarding documentation (see package-list vs. element-list), you can no longer link against the LearnLib documentation on JDK 8 builds. + * Split packages had to be refactored. + * The `de.learnlib.oracle.parallelism` interfaces in the `learnlib-api` artifact have been moved to the `de.learnlib.oracle` package. + * The `ThreadSafe` caches have been moved from the `learnlib-parallelism` artifact to the `learnlib-cache` artifact. + * The `GrowingAlphabet` and `Resumable` tests from the `learnlib-learner-it-support` artifact been moved to the `learnlib-test-support` artifact. + * The `OTUtils` class no longer provides the `displayHTMLInBrowser` methods in order to not depend on `java.desktop`. If you relied on this functionality, use the `writeHTMLToFile` methods instead and call `Desktop.getDesktop().open(file.toURI())` yourself. + * The classes in the `learnlib-learning-examples` artifact have their package renamed to `de.learnlib.testsupport.example`. * With the removal of the `learnlib-annotation-processor` artifact (see below), the `learnlib-build-config` artifact is now part of the `de.learnlib` group again. * The `ReuseOracleBuilder` and `ReuseTreeBuilder` classes are now auto-generated and therefore reside in the respective packages of their previously enclosing classes. ### Removed * The `de.learnlib.tooling:learnlib-annotation-processor` artifact has been dropped. The functionality has been moved to a [standalone project](https://github.com/LearnLib/build-tools). -* The the `de.learnlib:learnlib-rpni-edsm` and `de.learnlib:learnlib-rpni-mdl` artifacts have been dropped. The code has been merged with the `de.learnlib:learnlib-rpni` artifact. +* The `de.learnlib:learnlib-rpni-edsm` and `de.learnlib:learnlib-rpni-mdl` artifacts have been dropped. The code has been merged with the `de.learnlib:learnlib-rpni` artifact. ## [0.17.0] - 2023-11-15 diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/AbstractAAARLearner.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/AbstractAAARLearner.java index 55923f2c7b..064624050e 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/AbstractAAARLearner.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/AbstractAAARLearner.java @@ -28,8 +28,8 @@ import de.learnlib.query.DefaultQuery; import net.automatalib.alphabet.Alphabet; import net.automatalib.alphabet.GrowingAlphabet; -import net.automatalib.alphabet.GrowingMapAlphabet; import net.automatalib.alphabet.SupportsGrowingAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.MutableDeterministic; import net.automatalib.automaton.UniversalDeterministicAutomaton; import net.automatalib.word.Word; diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/AbstractExplicitAAARLearner.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/AbstractExplicitAAARLearner.java index ce075733b4..6fc06c6a31 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/AbstractExplicitAAARLearner.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/AbstractExplicitAAARLearner.java @@ -32,8 +32,8 @@ import de.learnlib.algorithm.aaar.generic.AbstractGenericAAARLearner; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; import net.automatalib.alphabet.SupportsGrowingAlphabet; +import net.automatalib.alphabet.impl.Alphabets; /** * An "explicit" refinement of the {@link AbstractAAARLearner}. This implementation requires a prior partition of (all) diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFA.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFA.java index 27d7afc537..64dc314efd 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFA.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFA.java @@ -23,8 +23,8 @@ import de.learnlib.algorithm.aaar.TranslatingDFA; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.fsa.CompactDFA; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; /** * A {@link DFA}-specific refinement of {@link AbstractExplicitAAARLearner}. diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealy.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealy.java index 47f86ce525..74a553714e 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealy.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealy.java @@ -23,8 +23,8 @@ import de.learnlib.algorithm.aaar.TranslatingMealyMachine; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.transducer.CompactMealy; import net.automatalib.automaton.transducer.MealyMachine; +import net.automatalib.automaton.transducer.impl.CompactMealy; import net.automatalib.word.Word; /** diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMoore.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMoore.java index f267f90682..14f35f5ef9 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMoore.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMoore.java @@ -23,8 +23,8 @@ import de.learnlib.algorithm.aaar.TranslatingMooreMachine; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.transducer.CompactMoore; import net.automatalib.automaton.transducer.MooreMachine; +import net.automatalib.automaton.transducer.impl.CompactMoore; import net.automatalib.word.Word; /** diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/AbstractGenericAAARLearner.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/AbstractGenericAAARLearner.java index a35f41d6e2..3ef2ba9f41 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/AbstractGenericAAARLearner.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/AbstractGenericAAARLearner.java @@ -27,8 +27,8 @@ import de.learnlib.algorithm.aaar.explicit.AbstractExplicitAAARLearner; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; import net.automatalib.alphabet.SupportsGrowingAlphabet; +import net.automatalib.alphabet.impl.Alphabets; /** * A "generic" refinement of the {@link AbstractAAARLearner}. This implementation uses a single diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFA.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFA.java index 37ddd52dab..43c7d64bb8 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFA.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFA.java @@ -22,8 +22,8 @@ import de.learnlib.algorithm.aaar.TranslatingDFA; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.fsa.CompactDFA; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; /** * A {@link DFA}-specific refinement of {@link AbstractGenericAAARLearner}. diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealy.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealy.java index 9d2a37d65b..aee3706d67 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealy.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealy.java @@ -22,8 +22,8 @@ import de.learnlib.algorithm.aaar.TranslatingMealyMachine; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.transducer.CompactMealy; import net.automatalib.automaton.transducer.MealyMachine; +import net.automatalib.automaton.transducer.impl.CompactMealy; import net.automatalib.word.Word; /** diff --git a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMoore.java b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMoore.java index f97e0a7482..ba5dab73cd 100644 --- a/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMoore.java +++ b/algorithms/active/aaar/src/main/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMoore.java @@ -22,8 +22,8 @@ import de.learnlib.algorithm.aaar.TranslatingMooreMachine; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.transducer.CompactMoore; import net.automatalib.automaton.transducer.MooreMachine; +import net.automatalib.automaton.transducer.impl.CompactMoore; import net.automatalib.word.Word; /** diff --git a/algorithms/active/aaar/src/main/java/module-info.java b/algorithms/active/aaar/src/main/java/module-info.java new file mode 100644 index 0000000000..1995b07f62 --- /dev/null +++ b/algorithms/active/aaar/src/main/java/module-info.java @@ -0,0 +1,44 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This module provides the implementation of the AAAR learning algorithm as described in the paper + * Automata Learning with Automated Alphabet Abstraction + * Refinement by Falk Howar, Bernhard Steffen, and Maik Merten. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-aaar</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.aaar { + + requires com.google.common; + requires de.learnlib.api; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + exports de.learnlib.algorithm.aaar; + exports de.learnlib.algorithm.aaar.abstraction; + exports de.learnlib.algorithm.aaar.explicit; + exports de.learnlib.algorithm.aaar.generic; +} diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/AbstractAAARTest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/AbstractAAARTest.java index 593f6d493a..66a78eb28d 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/AbstractAAARTest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/AbstractAAARTest.java @@ -20,10 +20,10 @@ import com.google.common.collect.Lists; import de.learnlib.algorithm.LearningAlgorithm; -import de.learnlib.example.LearningExample; import de.learnlib.oracle.MembershipOracle; import de.learnlib.oracle.equivalence.SampleSetEQOracle; import de.learnlib.oracle.membership.SimulatorOracle; +import de.learnlib.testsupport.example.LearningExample; import de.learnlib.util.Experiment; import net.automatalib.alphabet.Alphabet; import net.automatalib.automaton.UniversalDeterministicAutomaton; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFATest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFATest.java index 930558adad..3e7b69a772 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFATest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerDFATest.java @@ -17,8 +17,8 @@ import de.learnlib.algorithm.aaar.AAARTestUtil; import de.learnlib.algorithm.aaar.AbstractAAARTest; -import de.learnlib.example.dfa.ExamplePaulAndMary; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary; import net.automatalib.alphabet.Alphabet; import net.automatalib.automaton.fsa.DFA; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealyTest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealyTest.java index 7fb43b9108..097fa25e58 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealyTest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMealyTest.java @@ -17,9 +17,9 @@ import de.learnlib.algorithm.aaar.AAARTestUtil; import de.learnlib.algorithm.aaar.AbstractAAARTest; -import de.learnlib.example.mealy.ExampleCoffeeMachine; -import de.learnlib.example.mealy.ExampleCoffeeMachine.Input; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input; import net.automatalib.alphabet.Alphabet; import net.automatalib.automaton.transducer.MealyMachine; import net.automatalib.word.Word; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMooreTest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMooreTest.java index 139508b49a..9537b9f6b9 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMooreTest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/explicit/ExplicitAAARLearnerMooreTest.java @@ -21,10 +21,10 @@ import de.learnlib.algorithm.aaar.AAARTestUtil; import de.learnlib.algorithm.aaar.AbstractAAARTest; import de.learnlib.algorithm.aaar.ComboConstructor; -import de.learnlib.example.moore.ExampleRandomMoore; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.moore.ExampleRandomMoore; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.transducer.MooreMachine; import net.automatalib.common.util.Pair; import net.automatalib.word.Word; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFATest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFATest.java index 905943113c..b8c9a37581 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFATest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerDFATest.java @@ -25,8 +25,8 @@ import de.learnlib.algorithm.aaar.AAARTestUtil; import de.learnlib.algorithm.aaar.AbstractAAARTest; import de.learnlib.algorithm.aaar.abstraction.AbstractAbstractionTree; -import de.learnlib.example.dfa.ExamplePaulAndMary; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary; import net.automatalib.alphabet.Alphabet; import net.automatalib.automaton.fsa.DFA; import net.automatalib.common.util.IOUtil; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealyTest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealyTest.java index bdbefb9829..20cf8106be 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealyTest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMealyTest.java @@ -25,8 +25,8 @@ import de.learnlib.algorithm.aaar.AAARTestUtil; import de.learnlib.algorithm.aaar.AbstractAAARTest; import de.learnlib.algorithm.aaar.abstraction.AbstractAbstractionTree; -import de.learnlib.example.mealy.ExampleGrid; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.mealy.ExampleGrid; import net.automatalib.alphabet.Alphabet; import net.automatalib.automaton.transducer.MealyMachine; import net.automatalib.common.util.IOUtil; diff --git a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMooreTest.java b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMooreTest.java index 71fbdfcc36..e63d0b6f23 100644 --- a/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMooreTest.java +++ b/algorithms/active/aaar/src/test/java/de/learnlib/algorithm/aaar/generic/GenericAAARLearnerMooreTest.java @@ -28,10 +28,10 @@ import de.learnlib.algorithm.aaar.AbstractAAARTest; import de.learnlib.algorithm.aaar.ComboConstructor; import de.learnlib.algorithm.aaar.abstraction.AbstractAbstractionTree; -import de.learnlib.example.moore.ExampleRandomMoore; import de.learnlib.oracle.MembershipOracle; +import de.learnlib.testsupport.example.moore.ExampleRandomMoore; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.transducer.MooreMachine; import net.automatalib.common.util.IOUtil; import net.automatalib.common.util.Pair; diff --git a/algorithms/active/adt/pom.xml b/algorithms/active/adt/pom.xml index d4cba7bf22..c514e0ca4b 100644 --- a/algorithms/active/adt/pom.xml +++ b/algorithms/active/adt/pom.xml @@ -111,6 +111,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-adt</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.adt { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.common.util; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires net.automatalib.util; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.adt.ads; + exports de.learnlib.algorithm.adt.adt; + exports de.learnlib.algorithm.adt.api; + exports de.learnlib.algorithm.adt.automaton; + exports de.learnlib.algorithm.adt.config; + exports de.learnlib.algorithm.adt.learner; + exports de.learnlib.algorithm.adt.model; + exports de.learnlib.algorithm.adt.util; +} diff --git a/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/automaton/ADTHypothesisTest.java b/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/automaton/ADTHypothesisTest.java index 7f410b3e53..ad7b15b8e4 100644 --- a/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/automaton/ADTHypothesisTest.java +++ b/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/automaton/ADTHypothesisTest.java @@ -16,7 +16,7 @@ package de.learnlib.algorithm.adt.automaton; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.concept.StateIDs; import org.testng.Assert; import org.testng.annotations.Test; diff --git a/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/learner/ADTGrowingAlphabetTest.java b/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/learner/ADTGrowingAlphabetTest.java index 312acdf911..ecabff514b 100644 --- a/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/learner/ADTGrowingAlphabetTest.java +++ b/algorithms/active/adt/src/test/java/de/learnlib/algorithm/adt/learner/ADTGrowingAlphabetTest.java @@ -16,9 +16,7 @@ package de.learnlib.algorithm.adt.learner; import java.util.Collection; -import java.util.List; import java.util.Random; -import java.util.function.Consumer; import de.learnlib.algorithm.adt.config.ADTExtenders; import de.learnlib.algorithm.adt.config.LeafSplitters; @@ -28,7 +26,7 @@ import de.learnlib.oracle.membership.SULSymbolQueryOracle; import de.learnlib.testsupport.AbstractGrowingAlphabetTest; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.transducer.MealyMachine; import net.automatalib.util.automaton.random.RandomAutomata; import net.automatalib.word.Word; @@ -65,13 +63,4 @@ protected ADTLearner
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-dhc</artifactId> + * <version>${version}</version> + * </dependency> + **/ -package de.learnlib.algorithm.dhc; +open module de.learnlib.algorithm.dhc { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.dhc.mealy; +} diff --git a/algorithms/active/dhc/src/test/java/de/learnlib/algorithm/dhc/mealy/MealyDHCTest.java b/algorithms/active/dhc/src/test/java/de/learnlib/algorithm/dhc/mealy/MealyDHCTest.java index 2a6e80fa90..99423003cc 100644 --- a/algorithms/active/dhc/src/test/java/de/learnlib/algorithm/dhc/mealy/MealyDHCTest.java +++ b/algorithms/active/dhc/src/test/java/de/learnlib/algorithm/dhc/mealy/MealyDHCTest.java @@ -20,18 +20,18 @@ import java.util.List; import java.util.Random; -import de.learnlib.example.mealy.ExampleCoffeeMachine; -import de.learnlib.example.mealy.ExampleCoffeeMachine.Input; -import de.learnlib.example.mealy.ExampleGrid; -import de.learnlib.example.mealy.ExampleStack; import de.learnlib.oracle.MembershipOracle.MealyMembershipOracle; import de.learnlib.oracle.equivalence.MealySimulatorEQOracle; import de.learnlib.oracle.membership.MealySimulatorOracle; import de.learnlib.query.DefaultQuery; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input; +import de.learnlib.testsupport.example.mealy.ExampleGrid; +import de.learnlib.testsupport.example.mealy.ExampleStack; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.transducer.CompactMealy; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.transducer.MealyMachine; +import net.automatalib.automaton.transducer.impl.CompactMealy; import net.automatalib.util.automaton.random.RandomAutomata; import net.automatalib.word.Word; import org.testng.Assert; diff --git a/algorithms/active/kearns-vazirani/pom.xml b/algorithms/active/kearns-vazirani/pom.xml index 7f12d36783..5c998b498d 100644 --- a/algorithms/active/kearns-vazirani/pom.xml +++ b/algorithms/active/kearns-vazirani/pom.xml @@ -87,6 +87,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-kearns-vazirani</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.kv { + + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.common.util; + requires de.learnlib.datastructure.discriminationtree; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.kv; + exports de.learnlib.algorithm.kv.dfa; + exports de.learnlib.algorithm.kv.mealy; +} diff --git a/algorithms/active/lstar/pom.xml b/algorithms/active/lstar/pom.xml index 5d35ba727d..8abc9c786b 100644 --- a/algorithms/active/lstar/pom.xml +++ b/algorithms/active/lstar/pom.xml @@ -109,6 +109,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-lstar</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.lstar { + + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.common.util; + requires de.learnlib.datastructure.observationtable; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.lstar; + exports de.learnlib.algorithm.lstar.ce; + exports de.learnlib.algorithm.lstar.closing; + exports de.learnlib.algorithm.lstar.dfa; + exports de.learnlib.algorithm.lstar.mealy; + exports de.learnlib.algorithm.lstar.moore; + exports de.learnlib.algorithm.malerpnueli; + exports de.learnlib.algorithm.rivestschapire; +} diff --git a/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ClassicLStarMealyGrowingAlphabetTest.java b/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ClassicLStarMealyGrowingAlphabetTest.java index ad7d0f836b..ba0579099f 100644 --- a/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ClassicLStarMealyGrowingAlphabetTest.java +++ b/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ClassicLStarMealyGrowingAlphabetTest.java @@ -21,14 +21,14 @@ import de.learnlib.algorithm.lstar.closing.ClosingStrategies; import de.learnlib.algorithm.lstar.mealy.ClassicLStarMealy; import de.learnlib.algorithm.lstar.mealy.ExtensibleLStarMealy; -import de.learnlib.example.mealy.ExampleCoffeeMachine; -import de.learnlib.example.mealy.ExampleCoffeeMachine.Input; import de.learnlib.oracle.MembershipOracle; import de.learnlib.oracle.MembershipOracle.MealyMembershipOracle; import de.learnlib.oracle.membership.MealySimulatorOracle; import de.learnlib.query.DefaultQuery; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input; import de.learnlib.util.mealy.MealyUtil; -import net.automatalib.alphabet.GrowingMapAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.transducer.MealyMachine; import net.automatalib.word.Word; import org.testng.Assert; diff --git a/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ExtensibleLStarDFAResumableLearnerTest.java b/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ExtensibleLStarDFAResumableLearnerTest.java index 18abe550f8..0e45514ba9 100644 --- a/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ExtensibleLStarDFAResumableLearnerTest.java +++ b/algorithms/active/lstar/src/test/java/de/learnlib/algorithm/lstar/ExtensibleLStarDFAResumableLearnerTest.java @@ -20,7 +20,7 @@ import de.learnlib.oracle.MembershipOracle.DFAMembershipOracle; import de.learnlib.testsupport.AbstractResumableLearnerDFATest; import net.automatalib.alphabet.Alphabet; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; public class ExtensibleLStarDFAResumableLearnerTest extends AbstractResumableLearnerDFATest
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-nlstar</artifactId> + * <version>${version}</version> + * </dependency> + **/ -package de.learnlib.algorithm.nlstar; +open module de.learnlib.algorithm.nlstar { + + requires de.learnlib.api; + requires de.learnlib.common.util; + requires net.automatalib.api; + requires net.automatalib.core; + requires net.automatalib.util; + requires org.checkerframework.checker.qual; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.nlstar; +} diff --git a/algorithms/active/nlstar/src/test/java/de/learnlib/algorithm/nlstar/NLStarTest.java b/algorithms/active/nlstar/src/test/java/de/learnlib/algorithm/nlstar/NLStarTest.java index 2ee76f8f6d..d5a7ea5716 100644 --- a/algorithms/active/nlstar/src/test/java/de/learnlib/algorithm/nlstar/NLStarTest.java +++ b/algorithms/active/nlstar/src/test/java/de/learnlib/algorithm/nlstar/NLStarTest.java @@ -20,9 +20,9 @@ import de.learnlib.oracle.membership.NFASimulatorOracle; import de.learnlib.util.Experiment; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.fsa.CompactNFA; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.NFA; +import net.automatalib.automaton.fsa.impl.CompactNFA; import net.automatalib.util.automaton.Automata; import net.automatalib.util.automaton.builder.AutomatonBuilders; import net.automatalib.util.automaton.fsa.NFAs; diff --git a/algorithms/active/observation-pack-vpa/pom.xml b/algorithms/active/observation-pack-vpa/pom.xml index 5afa33fb2c..8b5ca0bffc 100644 --- a/algorithms/active/observation-pack-vpa/pom.xml +++ b/algorithms/active/observation-pack-vpa/pom.xml @@ -124,4 +124,19 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-observation-pack-vpa</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.observationpack.vpa { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.datastructure.discriminationtree; + requires de.learnlib.datastructure.list; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.observationpack.vpa; + exports de.learnlib.algorithm.observationpack.vpa.hypothesis; +} diff --git a/algorithms/active/observation-pack-vpa/src/test/java/de/learnlib/algorithm/observationpack/vpa/DTVisualizationTest.java b/algorithms/active/observation-pack-vpa/src/test/java/de/learnlib/algorithm/observationpack/vpa/DTVisualizationTest.java index 74ed5cd8ae..714ca03777 100644 --- a/algorithms/active/observation-pack-vpa/src/test/java/de/learnlib/algorithm/observationpack/vpa/DTVisualizationTest.java +++ b/algorithms/active/observation-pack-vpa/src/test/java/de/learnlib/algorithm/observationpack/vpa/DTVisualizationTest.java @@ -26,10 +26,10 @@ import de.learnlib.oracle.equivalence.vpa.SimulatorEQOracle; import de.learnlib.oracle.membership.SEVPASimulatorOracle; import de.learnlib.util.Experiment; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.alphabet.DefaultVPAlphabet; -import net.automatalib.automaton.vpa.DefaultOneSEVPA; +import net.automatalib.alphabet.impl.Alphabets; +import net.automatalib.alphabet.impl.DefaultVPAlphabet; import net.automatalib.automaton.vpa.OneSEVPA; +import net.automatalib.automaton.vpa.impl.DefaultOneSEVPA; import net.automatalib.common.util.IOUtil; import net.automatalib.serialization.dot.GraphDOT; import net.automatalib.util.automaton.random.RandomAutomata; diff --git a/algorithms/active/observation-pack/pom.xml b/algorithms/active/observation-pack/pom.xml index 562ba255cf..c093c4e8be 100644 --- a/algorithms/active/observation-pack/pom.xml +++ b/algorithms/active/observation-pack/pom.xml @@ -96,6 +96,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-observation-pack</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.observationpack { + + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.common.util; + requires de.learnlib.datastructure.discriminationtree; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.observationpack; + exports de.learnlib.algorithm.observationpack.dfa; + exports de.learnlib.algorithm.observationpack.hypothesis; + exports de.learnlib.algorithm.observationpack.mealy; + exports de.learnlib.algorithm.observationpack.moore; +} diff --git a/algorithms/active/observation-pack/src/test/java/de/learnlib/algorithm/observationpack/DTVisualizationTest.java b/algorithms/active/observation-pack/src/test/java/de/learnlib/algorithm/observationpack/DTVisualizationTest.java index c336a11da4..9273eedf37 100644 --- a/algorithms/active/observation-pack/src/test/java/de/learnlib/algorithm/observationpack/DTVisualizationTest.java +++ b/algorithms/active/observation-pack/src/test/java/de/learnlib/algorithm/observationpack/DTVisualizationTest.java @@ -20,10 +20,10 @@ import de.learnlib.algorithm.observationpack.mealy.OPLearnerMealy; import de.learnlib.algorithm.observationpack.mealy.OPLearnerMealyBuilder; -import de.learnlib.example.mealy.ExampleCoffeeMachine.Input; import de.learnlib.oracle.membership.SULOracle; import de.learnlib.sul.SUL; import de.learnlib.testsupport.AbstractVisualizationTest; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input; import net.automatalib.alphabet.Alphabet; import net.automatalib.serialization.dot.GraphDOT; import org.checkerframework.checker.initialization.qual.UnderInitialization; diff --git a/algorithms/active/oml/pom.xml b/algorithms/active/oml/pom.xml index bbfe28e09b..cfd14add0e 100644 --- a/algorithms/active/oml/pom.xml +++ b/algorithms/active/oml/pom.xml @@ -69,6 +69,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-oml</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.oml { + + requires de.learnlib.api; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + exports de.learnlib.algorithm.oml.lstar; + exports de.learnlib.algorithm.oml.ttt; + exports de.learnlib.algorithm.oml.ttt.dfa; + exports de.learnlib.algorithm.oml.ttt.dt; + exports de.learnlib.algorithm.oml.ttt.mealy; + exports de.learnlib.algorithm.oml.ttt.pt; + exports de.learnlib.algorithm.oml.ttt.st; +} diff --git a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/adapter/dfa/KearnsVaziraniAdapterDFA.java b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/adapter/dfa/KearnsVaziraniAdapterDFA.java index 285d452675..ef1820ba78 100644 --- a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/adapter/dfa/KearnsVaziraniAdapterDFA.java +++ b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/adapter/dfa/KearnsVaziraniAdapterDFA.java @@ -20,7 +20,7 @@ import de.learnlib.algorithm.kv.dfa.KearnsVaziraniDFA; import de.learnlib.oracle.MembershipOracle; import net.automatalib.alphabet.Alphabet; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.word.Word; /** diff --git a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/package-info.java b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/package-info.java deleted file mode 100644 index 4cac27fa96..0000000000 --- a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2013-2024 TU Dortmund University - * This file is part of LearnLib, http://www.learnlib.de/. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package (and sub-packages) provides the implementations of various learning algorithms for systems of procedural - * automata such as the ones described in the papers Compositional - * learning of mutually recursive procedural systems and From Languages to Behaviors and Back by Markus Frohme and - * Bernhard Steffen. - */ -package de.learnlib.algorithm.procedural; diff --git a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/sba/SBALearner.java b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/sba/SBALearner.java index 62abf8012f..e42388b515 100644 --- a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/sba/SBALearner.java +++ b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/sba/SBALearner.java @@ -38,14 +38,14 @@ import de.learnlib.query.DefaultQuery; import de.learnlib.util.MQUtil; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.DefaultProceduralInputAlphabet; -import net.automatalib.alphabet.GrowingMapAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; import net.automatalib.alphabet.SupportsGrowingAlphabet; +import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.fsa.DFA; -import net.automatalib.automaton.procedural.EmptySBA; import net.automatalib.automaton.procedural.SBA; -import net.automatalib.automaton.procedural.StackSBA; +import net.automatalib.automaton.procedural.impl.EmptySBA; +import net.automatalib.automaton.procedural.impl.StackSBA; import net.automatalib.common.util.Pair; import net.automatalib.common.util.mapping.Mapping; import net.automatalib.util.automaton.Automata; diff --git a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spa/SPALearner.java b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spa/SPALearner.java index 7fbea07967..e6cafe869f 100644 --- a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spa/SPALearner.java +++ b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spa/SPALearner.java @@ -38,13 +38,13 @@ import de.learnlib.oracle.MembershipOracle; import de.learnlib.query.DefaultQuery; import de.learnlib.util.MQUtil; -import net.automatalib.alphabet.GrowingMapAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; import net.automatalib.alphabet.SupportsGrowingAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.fsa.DFA; -import net.automatalib.automaton.procedural.EmptySPA; import net.automatalib.automaton.procedural.SPA; -import net.automatalib.automaton.procedural.StackSPA; +import net.automatalib.automaton.procedural.impl.EmptySPA; +import net.automatalib.automaton.procedural.impl.StackSPA; import net.automatalib.common.util.mapping.Mapping; import net.automatalib.word.Word; import net.automatalib.word.WordBuilder; diff --git a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spmm/SPMMLearner.java b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spmm/SPMMLearner.java index 41dd4ae43f..922a71a1c4 100644 --- a/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spmm/SPMMLearner.java +++ b/algorithms/active/procedural/src/main/java/de/learnlib/algorithm/procedural/spmm/SPMMLearner.java @@ -35,13 +35,13 @@ import de.learnlib.query.DefaultQuery; import de.learnlib.util.MQUtil; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.DefaultProceduralInputAlphabet; -import net.automatalib.alphabet.GrowingMapAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; import net.automatalib.alphabet.SupportsGrowingAlphabet; -import net.automatalib.automaton.procedural.EmptySPMM; +import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.procedural.SPMM; -import net.automatalib.automaton.procedural.StackSPMM; +import net.automatalib.automaton.procedural.impl.EmptySPMM; +import net.automatalib.automaton.procedural.impl.StackSPMM; import net.automatalib.automaton.transducer.MealyMachine; import net.automatalib.common.util.Pair; import net.automatalib.common.util.mapping.Mapping; diff --git a/algorithms/active/procedural/src/main/java/module-info.java b/algorithms/active/procedural/src/main/java/module-info.java new file mode 100644 index 0000000000..37d0de9e03 --- /dev/null +++ b/algorithms/active/procedural/src/main/java/module-info.java @@ -0,0 +1,59 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This module provides the implementations of various learning algorithms for systems of procedural automata such as + * the ones described in the papers Compositional learning of + * mutually recursive procedural systems and From Languages + * to Behaviors and Back by Markus Frohme and Bernhard Steffen. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-procedural</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.procedural { + + requires com.google.common; + requires de.learnlib.algorithm.kv; + requires de.learnlib.algorithm.lstar; + requires de.learnlib.algorithm.observationpack; + requires de.learnlib.algorithm.oml; + requires de.learnlib.algorithm.ttt; + requires de.learnlib.api; + requires de.learnlib.common.util; + requires de.learnlib.common.counterexample; + requires de.learnlib.datastructure.observationtable; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires net.automatalib.util; + requires org.checkerframework.checker.qual; + + exports de.learnlib.algorithm.procedural; + exports de.learnlib.algorithm.procedural.adapter.dfa; + exports de.learnlib.algorithm.procedural.adapter.mealy; + exports de.learnlib.algorithm.procedural.sba; + exports de.learnlib.algorithm.procedural.sba.manager; + exports de.learnlib.algorithm.procedural.spa; + exports de.learnlib.algorithm.procedural.spa.manager; + exports de.learnlib.algorithm.procedural.spmm; + exports de.learnlib.algorithm.procedural.spmm.manager; +} diff --git a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/ATManagerTest.java b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/ATManagerTest.java index 422d071aaf..4acf20b16a 100644 --- a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/ATManagerTest.java +++ b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/ATManagerTest.java @@ -18,9 +18,9 @@ import de.learnlib.algorithm.procedural.sba.manager.DefaultATManager; import de.learnlib.algorithm.procedural.sba.manager.OptimizingATManager; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.alphabet.DefaultProceduralInputAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; +import net.automatalib.alphabet.impl.Alphabets; +import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet; import net.automatalib.word.Word; import org.testng.Assert; import org.testng.annotations.DataProvider; diff --git a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/OptimizationsTest.java b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/OptimizationsTest.java index 33335873c7..951686c461 100644 --- a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/OptimizationsTest.java +++ b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/sba/OptimizationsTest.java @@ -21,11 +21,11 @@ import de.learnlib.algorithm.procedural.SymbolWrapper; import de.learnlib.algorithm.procedural.adapter.dfa.TTTAdapterDFA; import de.learnlib.algorithm.procedural.sba.manager.OptimizingATManager; -import de.learnlib.example.sba.ExamplePalindrome; import de.learnlib.oracle.equivalence.EQOracleChain; import de.learnlib.oracle.equivalence.SampleSetEQOracle; import de.learnlib.oracle.equivalence.sba.SimulatorEQOracle; import de.learnlib.oracle.membership.SimulatorOracle; +import de.learnlib.testsupport.example.sba.ExamplePalindrome; import de.learnlib.util.Experiment; import net.automatalib.alphabet.ProceduralInputAlphabet; import net.automatalib.automaton.procedural.SBA; diff --git a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spa/ATRManagerTest.java b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spa/ATRManagerTest.java index 56a8f1f7fe..60f8fbf84c 100644 --- a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spa/ATRManagerTest.java +++ b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spa/ATRManagerTest.java @@ -18,9 +18,9 @@ import de.learnlib.algorithm.procedural.spa.manager.DefaultATRManager; import de.learnlib.algorithm.procedural.spa.manager.OptimizingATRManager; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.alphabet.DefaultProceduralInputAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; +import net.automatalib.alphabet.impl.Alphabets; +import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet; import net.automatalib.word.Word; import org.testng.Assert; import org.testng.annotations.DataProvider; diff --git a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/ATManagerTest.java b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/ATManagerTest.java index aa486f1b6c..e466e90058 100644 --- a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/ATManagerTest.java +++ b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/ATManagerTest.java @@ -19,9 +19,9 @@ import de.learnlib.algorithm.procedural.spmm.manager.OptimizingATManager; import de.learnlib.query.DefaultQuery; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.alphabet.DefaultProceduralInputAlphabet; import net.automatalib.alphabet.ProceduralInputAlphabet; +import net.automatalib.alphabet.impl.Alphabets; +import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet; import net.automatalib.word.Word; import org.testng.Assert; import org.testng.annotations.DataProvider; diff --git a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/OptimizationsTest.java b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/OptimizationsTest.java index a2e6eec38b..074f3640da 100644 --- a/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/OptimizationsTest.java +++ b/algorithms/active/procedural/src/test/java/de/learnlib/algorithm/procedural/spmm/OptimizationsTest.java @@ -21,11 +21,11 @@ import de.learnlib.algorithm.procedural.SymbolWrapper; import de.learnlib.algorithm.procedural.adapter.mealy.TTTAdapterMealy; import de.learnlib.algorithm.procedural.spmm.manager.OptimizingATManager; -import de.learnlib.example.spmm.ExamplePalindrome; import de.learnlib.oracle.equivalence.EQOracleChain; import de.learnlib.oracle.equivalence.SampleSetEQOracle; import de.learnlib.oracle.equivalence.spmm.SimulatorEQOracle; import de.learnlib.oracle.membership.SimulatorOracle; +import de.learnlib.testsupport.example.spmm.ExamplePalindrome; import de.learnlib.util.Experiment; import net.automatalib.alphabet.ProceduralInputAlphabet; import net.automatalib.automaton.procedural.SPMM; diff --git a/algorithms/active/ttt-vpa/src/main/java/de/learnlib/algorithm/ttt/vpa/package-info.java b/algorithms/active/ttt-vpa/src/main/java/module-info.java similarity index 50% rename from algorithms/active/ttt-vpa/src/main/java/de/learnlib/algorithm/ttt/vpa/package-info.java rename to algorithms/active/ttt-vpa/src/main/java/module-info.java index dc648c68cb..0c713c44b5 100644 --- a/algorithms/active/ttt-vpa/src/main/java/de/learnlib/algorithm/ttt/vpa/package-info.java +++ b/algorithms/active/ttt-vpa/src/main/java/module-info.java @@ -15,8 +15,30 @@ */ /** - * This package (and sub-packages) provides the implementation of the VPA adaption of the TTT learning algorithm as + * This module provides the implementation of the VPA adaption of the TTT learning algorithm as * presented in the PhD thesis Foundations of Active Automata * Learning: An Algorithmic Perspective by Malte Isberner. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-ttt-vpa</artifactId> + * <version>${version}</version> + * </dependency> + **/ -package de.learnlib.algorithm.ttt.vpa; +open module de.learnlib.algorithm.ttt.vpa { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.algorithm.observationpack.vpa; + requires de.learnlib.common.counterexample; + requires de.learnlib.datastructure.discriminationtree; + requires net.automatalib.api; + requires org.checkerframework.checker.qual; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.ttt.vpa; +} diff --git a/algorithms/active/ttt/pom.xml b/algorithms/active/ttt/pom.xml index 63a023953c..8ad7a84b3e 100644 --- a/algorithms/active/ttt/pom.xml +++ b/algorithms/active/ttt/pom.xml @@ -105,6 +105,10 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-ttt</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.ttt { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.common.counterexample; + requires de.learnlib.common.util; + requires de.learnlib.datastructure.discriminationtree; + requires de.learnlib.datastructure.list; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + requires static de.learnlib.tooling.annotation; + + exports de.learnlib.algorithm.ttt.base; + exports de.learnlib.algorithm.ttt.dfa; + exports de.learnlib.algorithm.ttt.mealy; + exports de.learnlib.algorithm.ttt.moore; +} diff --git a/algorithms/active/ttt/src/test/java/de/learnlib/algorithm/ttt/TTTVisualizationTest.java b/algorithms/active/ttt/src/test/java/de/learnlib/algorithm/ttt/TTTVisualizationTest.java index 53cd4c0169..e14b0e7a37 100644 --- a/algorithms/active/ttt/src/test/java/de/learnlib/algorithm/ttt/TTTVisualizationTest.java +++ b/algorithms/active/ttt/src/test/java/de/learnlib/algorithm/ttt/TTTVisualizationTest.java @@ -20,10 +20,10 @@ import de.learnlib.algorithm.ttt.mealy.TTTLearnerMealy; import de.learnlib.algorithm.ttt.mealy.TTTLearnerMealyBuilder; -import de.learnlib.example.mealy.ExampleCoffeeMachine.Input; import de.learnlib.oracle.membership.SULOracle; import de.learnlib.sul.SUL; import de.learnlib.testsupport.AbstractVisualizationTest; +import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input; import net.automatalib.alphabet.Alphabet; import net.automatalib.serialization.dot.GraphDOT; import org.testng.Assert; diff --git a/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/OSTIA.java b/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/OSTIA.java index a49378cb21..10c9217c86 100644 --- a/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/OSTIA.java +++ b/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/OSTIA.java @@ -34,7 +34,7 @@ import de.learnlib.query.DefaultQuery; import net.automatalib.alphabet.Alphabet; import net.automatalib.alphabet.GrowingAlphabet; -import net.automatalib.alphabet.GrowingMapAlphabet; +import net.automatalib.alphabet.impl.GrowingMapAlphabet; import net.automatalib.automaton.transducer.SubsequentialTransducer; import net.automatalib.common.smartcollection.IntSeq; import net.automatalib.common.util.Pair; diff --git a/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/package-info.java b/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/package-info.java deleted file mode 100644 index d8d2b923f0..0000000000 --- a/algorithms/passive/ostia/src/main/java/de/learnlib/algorithm/ostia/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2013-2024 TU Dortmund University - * This file is part of LearnLib, http://www.learnlib.de/. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This package (and sub-packages) provides the implementation of the "onward subsequential transducer inference - * algorithm" (OSTIA) learning algorithm as presented in the paper Learning - * Subsequential Transducers for Pattern Recognition Interpretation Tasks by Jose Oncina, Pedro GarcÃa, and Enrique - * Vidal. - */ -package de.learnlib.algorithm.ostia; diff --git a/algorithms/passive/ostia/src/main/java/module-info.java b/algorithms/passive/ostia/src/main/java/module-info.java new file mode 100644 index 0000000000..7b250402e7 --- /dev/null +++ b/algorithms/passive/ostia/src/main/java/module-info.java @@ -0,0 +1,41 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This module provides the implementation of the "onward subsequential transducer inference algorithm" (OSTIA) learning + * algorithm as presented in the paper Learning Subsequential Transducers + * for Pattern Recognition Interpretation Tasks by Jose Oncina, Pedro GarcÃa, and Enrique Vidal. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-ostia</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.algorithm.ostia { + + requires de.learnlib.api; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires org.checkerframework.checker.qual; + + exports de.learnlib.algorithm.ostia; +} diff --git a/algorithms/passive/ostia/src/test/java/de/learnlib/algorithm/ostia/OSTIATest.java b/algorithms/passive/ostia/src/test/java/de/learnlib/algorithm/ostia/OSTIATest.java index 02ebaba2cf..b2369ae77c 100644 --- a/algorithms/passive/ostia/src/test/java/de/learnlib/algorithm/ostia/OSTIATest.java +++ b/algorithms/passive/ostia/src/test/java/de/learnlib/algorithm/ostia/OSTIATest.java @@ -29,9 +29,9 @@ import com.google.common.collect.Iterables; import com.google.common.io.CharStreams; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.transducer.CompactSST; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.transducer.SubsequentialTransducer; +import net.automatalib.automaton.transducer.impl.CompactSST; import net.automatalib.common.smartcollection.IntSeq; import net.automatalib.common.util.IOUtil; import net.automatalib.common.util.Pair; diff --git a/algorithms/passive/rpni/pom.xml b/algorithms/passive/rpni/pom.xml index 82d5768f3b..c7dca4acbb 100644 --- a/algorithms/passive/rpni/pom.xml +++ b/algorithms/passive/rpni/pom.xml @@ -100,4 +100,19 @@ limitations under the License.
* More details on these implementations can be found in the book Grammatical Inference by Colin de la Higuera. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-rpni</artifactId> + * <version>${version}</version> + * </dependency> + **/ -package de.learnlib.algorithm.rpni; +open module de.learnlib.algorithm.rpni { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.datastructure.pta; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.common.util; + requires org.checkerframework.checker.qual; + + exports de.learnlib.algorithm.rpni; +} diff --git a/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/EDSMScoreTest.java b/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/EDSMScoreTest.java index 20173e61ab..655f8ac483 100644 --- a/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/EDSMScoreTest.java +++ b/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/EDSMScoreTest.java @@ -24,9 +24,9 @@ import de.learnlib.datastructure.pta.BlueFringePTAState; import de.learnlib.datastructure.pta.RedBlueMerge; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.common.smartcollection.IntSeq; import net.automatalib.util.automaton.Automata; import net.automatalib.util.automaton.builder.AutomatonBuilders; diff --git a/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/MDLScoreTest.java b/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/MDLScoreTest.java index 42c0d61913..29981ca254 100644 --- a/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/MDLScoreTest.java +++ b/algorithms/passive/rpni/src/test/java/de/learnlib/algorithm/rpni/MDLScoreTest.java @@ -21,7 +21,7 @@ import de.learnlib.datastructure.pta.BlueFringePTA; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.DFA; import net.automatalib.common.smartcollection.IntSeq; import net.automatalib.word.Word; diff --git a/api/src/main/java/de/learnlib/algorithm/package-info.java b/api/src/main/java/de/learnlib/algorithm/package-info.java index e010aaaff2..639e1ac4e1 100644 --- a/api/src/main/java/de/learnlib/algorithm/package-info.java +++ b/api/src/main/java/de/learnlib/algorithm/package-info.java @@ -15,6 +15,6 @@ */ /** - * This package (including sub-packages) contains the basic interfaces and classes of learning algorithms of LearnLib. + * This package contains the basic interfaces and classes of learning algorithms of LearnLib. */ package de.learnlib.algorithm; diff --git a/api/src/main/java/de/learnlib/oracle/parallelism/BatchInterruptedException.java b/api/src/main/java/de/learnlib/exception/BatchInterruptedException.java similarity index 93% rename from api/src/main/java/de/learnlib/oracle/parallelism/BatchInterruptedException.java rename to api/src/main/java/de/learnlib/exception/BatchInterruptedException.java index dd7dad2b3c..70ee1e07b7 100644 --- a/api/src/main/java/de/learnlib/oracle/parallelism/BatchInterruptedException.java +++ b/api/src/main/java/de/learnlib/exception/BatchInterruptedException.java @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.learnlib.oracle.parallelism; +package de.learnlib.exception; import java.util.Collection; +import de.learnlib.oracle.BatchProcessor; + /** * Exception that is thrown if a parallel batch is interrupted during processing. Note that we cannot rethrow the {@link * InterruptedException} since the {@code throws} specification of {@link BatchProcessor#processBatch(Collection)} does diff --git a/api/src/main/java/de/learnlib/oracle/parallelism/BatchProcessor.java b/api/src/main/java/de/learnlib/oracle/BatchProcessor.java similarity index 93% rename from api/src/main/java/de/learnlib/oracle/parallelism/BatchProcessor.java rename to api/src/main/java/de/learnlib/oracle/BatchProcessor.java index 576e043474..f6f64f1969 100644 --- a/api/src/main/java/de/learnlib/oracle/parallelism/BatchProcessor.java +++ b/api/src/main/java/de/learnlib/oracle/BatchProcessor.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.learnlib.oracle.parallelism; +package de.learnlib.oracle; import java.util.Collection; -import de.learnlib.oracle.MembershipOracle; +import de.learnlib.exception.BatchInterruptedException; /** * A markup interface for classes that can process a batch of work in a parallel environment (e.g. a {@link diff --git a/api/src/main/java/de/learnlib/oracle/MembershipOracle.java b/api/src/main/java/de/learnlib/oracle/MembershipOracle.java index ce54f25154..85777158e2 100644 --- a/api/src/main/java/de/learnlib/oracle/MembershipOracle.java +++ b/api/src/main/java/de/learnlib/oracle/MembershipOracle.java @@ -18,7 +18,6 @@ import java.util.Collection; import java.util.Collections; -import de.learnlib.oracle.parallelism.BatchProcessor; import de.learnlib.query.DefaultQuery; import de.learnlib.query.Query; import net.automatalib.automaton.fsa.DFA; diff --git a/api/src/main/java/de/learnlib/oracle/OmegaMembershipOracle.java b/api/src/main/java/de/learnlib/oracle/OmegaMembershipOracle.java index a3dcae13db..0c23010fe0 100644 --- a/api/src/main/java/de/learnlib/oracle/OmegaMembershipOracle.java +++ b/api/src/main/java/de/learnlib/oracle/OmegaMembershipOracle.java @@ -20,7 +20,6 @@ import de.learnlib.oracle.MembershipOracle.DFAMembershipOracle; import de.learnlib.oracle.MembershipOracle.MealyMembershipOracle; -import de.learnlib.oracle.parallelism.BatchProcessor; import de.learnlib.query.OmegaQuery; import de.learnlib.sul.ObservableSUL; import net.automatalib.common.util.Pair; diff --git a/api/src/main/java/de/learnlib/oracle/parallelism/ParallelOmegaOracle.java b/api/src/main/java/de/learnlib/oracle/ParallelOmegaOracle.java similarity index 91% rename from api/src/main/java/de/learnlib/oracle/parallelism/ParallelOmegaOracle.java rename to api/src/main/java/de/learnlib/oracle/ParallelOmegaOracle.java index 182698dbe9..baa01c806c 100644 --- a/api/src/main/java/de/learnlib/oracle/parallelism/ParallelOmegaOracle.java +++ b/api/src/main/java/de/learnlib/oracle/ParallelOmegaOracle.java @@ -13,9 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.learnlib.oracle.parallelism; - -import de.learnlib.oracle.OmegaMembershipOracle; +package de.learnlib.oracle; /** * {@link ParallelOracle} equivalent for {@link OmegaMembershipOracle}. diff --git a/api/src/main/java/de/learnlib/oracle/parallelism/ParallelOracle.java b/api/src/main/java/de/learnlib/oracle/ParallelOracle.java similarity index 93% rename from api/src/main/java/de/learnlib/oracle/parallelism/ParallelOracle.java rename to api/src/main/java/de/learnlib/oracle/ParallelOracle.java index b28f2c5bf6..785c0314db 100644 --- a/api/src/main/java/de/learnlib/oracle/parallelism/ParallelOracle.java +++ b/api/src/main/java/de/learnlib/oracle/ParallelOracle.java @@ -13,9 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.learnlib.oracle.parallelism; - -import de.learnlib.oracle.MembershipOracle; +package de.learnlib.oracle; /** * Basic interface for {@link MembershipOracle}s that can process queries in parallel. diff --git a/api/src/main/java/de/learnlib/oracle/parallelism/ThreadPool.java b/api/src/main/java/de/learnlib/oracle/ThreadPool.java similarity index 98% rename from api/src/main/java/de/learnlib/oracle/parallelism/ThreadPool.java rename to api/src/main/java/de/learnlib/oracle/ThreadPool.java index eeec1ba219..a25cb9da1b 100644 --- a/api/src/main/java/de/learnlib/oracle/parallelism/ThreadPool.java +++ b/api/src/main/java/de/learnlib/oracle/ThreadPool.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.learnlib.oracle.parallelism; +package de.learnlib.oracle; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/api/src/main/java/de/learnlib/oracle/package-info.java b/api/src/main/java/de/learnlib/oracle/package-info.java index 5ad8aaeedf..e329a1e920 100644 --- a/api/src/main/java/de/learnlib/oracle/package-info.java +++ b/api/src/main/java/de/learnlib/oracle/package-info.java @@ -15,7 +15,7 @@ */ /** - * This package (including sub-packages) contains the basic interfaces and classes for describing and implementing - * various types of oracles used throughout LearnLib. + * This package contains the basic interfaces and classes for describing and implementing various types of oracles used + * throughout LearnLib. */ package de.learnlib.oracle; diff --git a/api/src/main/java/module-info.java b/api/src/main/java/module-info.java new file mode 100644 index 0000000000..be44554115 --- /dev/null +++ b/api/src/main/java/module-info.java @@ -0,0 +1,44 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This module provides the core interfaces of LearnLib. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-api</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.api { + + requires net.automatalib.api; + requires net.automatalib.common.util; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + exports de.learnlib; + exports de.learnlib.algorithm; + exports de.learnlib.exception; + exports de.learnlib.logging; + exports de.learnlib.oracle; + exports de.learnlib.query; + exports de.learnlib.statistic; + exports de.learnlib.sul; +} diff --git a/archetypes/basic/src/main/resources/archetype-resources/src/main/java/Example.java b/archetypes/basic/src/main/resources/archetype-resources/src/main/java/Example.java index cc70c5005e..4b108515b3 100644 --- a/archetypes/basic/src/main/resources/archetype-resources/src/main/java/Example.java +++ b/archetypes/basic/src/main/resources/archetype-resources/src/main/java/Example.java @@ -12,9 +12,9 @@ import de.learnlib.util.Experiment.DFAExperiment; import de.learnlib.util.statistic.SimpleProfiler; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.util.automaton.builder.AutomatonBuilders; import net.automatalib.visualization.Visualization; diff --git a/archetypes/complete/src/main/resources/archetype-resources/src/main/java/Example.java b/archetypes/complete/src/main/resources/archetype-resources/src/main/java/Example.java index cc70c5005e..4b108515b3 100644 --- a/archetypes/complete/src/main/resources/archetype-resources/src/main/java/Example.java +++ b/archetypes/complete/src/main/resources/archetype-resources/src/main/java/Example.java @@ -12,9 +12,9 @@ import de.learnlib.util.Experiment.DFAExperiment; import de.learnlib.util.statistic.SimpleProfiler; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.util.automaton.builder.AutomatonBuilders; import net.automatalib.visualization.Visualization; diff --git a/build-parent/pom.xml b/build-parent/pom.xml index 8e231fafdf..6adae30f93 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -109,6 +109,7 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-counterexamples</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.common.counterexample { + + requires de.learnlib.api; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires org.checkerframework.checker.qual; + + exports de.learnlib.acex; + exports de.learnlib.counterexample; +} diff --git a/commons/settings/pom.xml b/commons/settings/pom.xml index a5118e6695..5cd4b9c17e 100644 --- a/commons/settings/pom.xml +++ b/commons/settings/pom.xml @@ -69,4 +69,28 @@ limitations under the License.
* Pool policy for threads of parallel oracles. - *
- * See de.learnlib.oracle.parallelism.ParallelOracle#PoolPolicy + * + * @see PoolPolicy */ PARALLEL_POOL_POLICY("parallel.pool_policy"), diff --git a/commons/settings/src/main/java/de/learnlib/setting/LearnLibSettings.java b/commons/settings/src/main/java/de/learnlib/setting/LearnLibSettings.java index 6cead93953..6b12f6eaf4 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/LearnLibSettings.java +++ b/commons/settings/src/main/java/de/learnlib/setting/LearnLibSettings.java @@ -34,7 +34,7 @@ public final class LearnLibSettings { private final Properties properties; private LearnLibSettings() { - properties = SettingsSource.readSettings(LearnLibSettingsSource.class); + properties = SettingsSource.readSettings(SettingsSource.class); } public static LearnLibSettings getInstance() { diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesAutomataLibSettingsSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesAutomataLibSettingsSource.java index 12c23cc195..74325d6ac7 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesAutomataLibSettingsSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesAutomataLibSettingsSource.java @@ -17,9 +17,10 @@ import net.automatalib.AutomataLibSettingsSource; import net.automatalib.common.util.setting.LocalFileSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(AutomataLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibLocalPropertiesAutomataLibSettingsSource extends LocalFileSource implements AutomataLibSettingsSource { diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesSource.java index 9b0f13fa63..202864b6e3 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibLocalPropertiesSource.java @@ -17,9 +17,10 @@ import de.learnlib.setting.LearnLibSettingsSource; import net.automatalib.common.util.setting.LocalFileSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(LearnLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibLocalPropertiesSource extends LocalFileSource implements LearnLibSettingsSource { public LearnLibLocalPropertiesSource() { diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesAutomataLibSettingsSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesAutomataLibSettingsSource.java index a28d97e2bc..22f5e3b8bf 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesAutomataLibSettingsSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesAutomataLibSettingsSource.java @@ -17,9 +17,10 @@ import net.automatalib.AutomataLibSettingsSource; import net.automatalib.common.util.setting.AbstractClassPathFileSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(AutomataLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibPropertiesAutomataLibSettingsSource extends AbstractClassPathFileSource implements AutomataLibSettingsSource { diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesSource.java index 1e7e3db794..941eb06bcd 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibPropertiesSource.java @@ -17,9 +17,10 @@ import de.learnlib.setting.LearnLibSettingsSource; import net.automatalib.common.util.setting.AbstractClassPathFileSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(LearnLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibPropertiesSource extends AbstractClassPathFileSource implements LearnLibSettingsSource { public LearnLibPropertiesSource() { diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesAutomataLibSettingsSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesAutomataLibSettingsSource.java index 9d72658a66..a618f5344e 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesAutomataLibSettingsSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesAutomataLibSettingsSource.java @@ -17,8 +17,9 @@ import net.automatalib.AutomataLibSettingsSource; import net.automatalib.common.util.setting.AbstractSystemPropertiesSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(AutomataLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibSystemPropertiesAutomataLibSettingsSource extends AbstractSystemPropertiesSource implements AutomataLibSettingsSource {} diff --git a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesSource.java b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesSource.java index ed0990f899..09484947a0 100644 --- a/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesSource.java +++ b/commons/settings/src/main/java/de/learnlib/setting/sources/LearnLibSystemPropertiesSource.java @@ -17,7 +17,8 @@ import de.learnlib.setting.LearnLibSettingsSource; import net.automatalib.common.util.setting.AbstractSystemPropertiesSource; +import net.automatalib.common.util.setting.SettingsSource; import org.kohsuke.MetaInfServices; -@MetaInfServices(LearnLibSettingsSource.class) +@MetaInfServices(SettingsSource.class) public class LearnLibSystemPropertiesSource extends AbstractSystemPropertiesSource implements LearnLibSettingsSource {} diff --git a/commons/settings/src/main/java/module-info.java b/commons/settings/src/main/java/module-info.java new file mode 100644 index 0000000000..c647ee331f --- /dev/null +++ b/commons/settings/src/main/java/module-info.java @@ -0,0 +1,51 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import de.learnlib.setting.sources.LearnLibLocalPropertiesAutomataLibSettingsSource; +import de.learnlib.setting.sources.LearnLibLocalPropertiesSource; +import de.learnlib.setting.sources.LearnLibPropertiesAutomataLibSettingsSource; +import de.learnlib.setting.sources.LearnLibPropertiesSource; +import de.learnlib.setting.sources.LearnLibSystemPropertiesAutomataLibSettingsSource; +import de.learnlib.setting.sources.LearnLibSystemPropertiesSource; +import net.automatalib.common.util.setting.SettingsSource; + +/** + * This module provides a collection of utility methods to parse LearnLib specific settings. + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-settings</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.setting { + + requires de.learnlib.api; + requires net.automatalib.common.util; + requires net.automatalib.api; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + requires static org.kohsuke.metainf_services; + + exports de.learnlib.setting; + exports de.learnlib.setting.sources; + + provides SettingsSource with LearnLibLocalPropertiesAutomataLibSettingsSource, LearnLibPropertiesAutomataLibSettingsSource, LearnLibSystemPropertiesAutomataLibSettingsSource, LearnLibLocalPropertiesSource, LearnLibPropertiesSource, LearnLibSystemPropertiesSource; +} diff --git a/commons/util/src/main/java/de/learnlib/util/nfa/NFALearnerWrapper.java b/commons/util/src/main/java/de/learnlib/util/nfa/NFALearnerWrapper.java index 7d78e9673b..6c7f3c6998 100644 --- a/commons/util/src/main/java/de/learnlib/util/nfa/NFALearnerWrapper.java +++ b/commons/util/src/main/java/de/learnlib/util/nfa/NFALearnerWrapper.java @@ -18,8 +18,8 @@ import de.learnlib.algorithm.LearningAlgorithm; import de.learnlib.query.DefaultQuery; import net.automatalib.alphabet.Alphabet; -import net.automatalib.automaton.fsa.CompactDFA; import net.automatalib.automaton.fsa.NFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.util.automaton.fsa.NFAs; public class NFALearnerWrapper implements LearningAlgorithm.DFALearner { diff --git a/commons/util/src/main/java/module-info.java b/commons/util/src/main/java/module-info.java new file mode 100644 index 0000000000..e48f7a5f71 --- /dev/null +++ b/commons/util/src/main/java/module-info.java @@ -0,0 +1,45 @@ +/* Copyright (C) 2013-2024 TU Dortmund University + * This file is part of LearnLib, http://www.learnlib.de/. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This module provides a collection of utility methods for learning setups (oracle wrappers, etc.). + *
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-util</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.common.util { + + requires de.learnlib.api; + requires de.learnlib.filter.statistic; + requires net.automatalib.api; + requires net.automatalib.common.util; + requires net.automatalib.core; + requires net.automatalib.util; + requires org.checkerframework.checker.qual; + requires org.slf4j; + + exports de.learnlib.util; + exports de.learnlib.util.mealy; + exports de.learnlib.util.moore; + exports de.learnlib.util.nfa; + exports de.learnlib.util.statistic; +} diff --git a/commons/util/src/test/java/de/learnlib/util/ExperimentTest.java b/commons/util/src/test/java/de/learnlib/util/ExperimentTest.java index bbd27c5e84..ad052f7b1f 100644 --- a/commons/util/src/test/java/de/learnlib/util/ExperimentTest.java +++ b/commons/util/src/test/java/de/learnlib/util/ExperimentTest.java @@ -24,9 +24,9 @@ import de.learnlib.util.Experiment.DFAExperiment; import de.learnlib.util.statistic.SimpleProfiler; import net.automatalib.alphabet.Alphabet; -import net.automatalib.alphabet.Alphabets; -import net.automatalib.automaton.fsa.CompactDFA; +import net.automatalib.alphabet.impl.Alphabets; import net.automatalib.automaton.fsa.DFA; +import net.automatalib.automaton.fsa.impl.CompactDFA; import net.automatalib.util.automaton.random.RandomAutomata; import net.automatalib.word.Word; import org.checkerframework.checker.nullness.qual.Nullable; diff --git a/datastructures/discrimination-tree/pom.xml b/datastructures/discrimination-tree/pom.xml index 51801ecdaa..bea44bc030 100644 --- a/datastructures/discrimination-tree/pom.xml +++ b/datastructures/discrimination-tree/pom.xml @@ -28,7 +28,7 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-datastructure-dt</artifactId> + * <version>${version}</version> + * </dependency> + *+ */ +open module de.learnlib.datastructure.discriminationtree { + + requires com.google.common; + requires de.learnlib.api; + requires de.learnlib.datastructure.list; + requires net.automatalib.api; + requires net.automatalib.common.smartcollection; + requires net.automatalib.common.util; + requires net.automatalib.util; + requires org.checkerframework.checker.qual; + + exports de.learnlib.datastructure.discriminationtree; + exports de.learnlib.datastructure.discriminationtree.iterators; + exports de.learnlib.datastructure.discriminationtree.model; +} diff --git a/datastructures/list/pom.xml b/datastructures/list/pom.xml index 410f4816c5..0d4cb64133 100644 --- a/datastructures/list/pom.xml +++ b/datastructures/list/pom.xml @@ -28,7 +28,7 @@ limitations under the License.
+ * This module is provided by the following Maven dependency: + *
+ * <dependency> + * <groupId>de.learnlib</groupId> + * <artifactId>learnlib-datastructure-list</artifactId> + * <version>${version}</version> + * </dependency> + **/ -package de.learnlib.algorithm.aaar; +open module de.learnlib.datastructure.list { + + requires com.google.common; + requires org.checkerframework.checker.qual; + + exports de.learnlib.datastructure.list; +} diff --git a/datastructures/observation-table/pom.xml b/datastructures/observation-table/pom.xml index b3aff6ab40..bcc69ade83 100644 --- a/datastructures/observation-table/pom.xml +++ b/datastructures/observation-table/pom.xml @@ -27,8 +27,8 @@ limitations under the License.
- * This method internally relies on {@link Desktop#browse(java.net.URI)}, hence it will not work if {@link Desktop} - * is not supported, or if the application is running in headless mode. - *
- * IMPORTANT NOTE: Calling this method may delay the termination of the JVM by up to 5 seconds. This is due
- * to the fact that the temporary file created in this method is marked for deletion upon JVM termination. If the
- * JVM terminates too early, it might be deleted before it was loaded by the browser.
+ * Writes the contents of a given observation table into a file using HTML as a (markup) language and the given
+ * functions to display inputs and outputs.
*
* @param table
- * the observation table to display
+ * the observation table to write to the file
+ * @param file
+ * the file to write to
* @param wordToString
- * the transformation from words to strings. This transformation is not required nor expected to
- * escape HTML entities
+ * the input word renderer
* @param outputToString
- * the transformation from outputs to strings. This transformation is not required nor expected to
- * escape HTML entities
+ * the output value renderer
+ * @param
+ * input symbol type
+ * @param
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-datastructure-ot</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.datastructure.observationtable {
+
+ requires com.google.common;
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.common.smartcollection;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.datastructure.observationtable;
+ exports de.learnlib.datastructure.observationtable.reader;
+ exports de.learnlib.datastructure.observationtable.writer;
+}
diff --git a/datastructures/observation-table/src/test/java/de/learnlib/datastructure/observationtable/writer/SuffixASCIIWriterTest.java b/datastructures/observation-table/src/test/java/de/learnlib/datastructure/observationtable/writer/SuffixASCIIWriterTest.java
index 615804cf3a..1db6ac1a3e 100644
--- a/datastructures/observation-table/src/test/java/de/learnlib/datastructure/observationtable/writer/SuffixASCIIWriterTest.java
+++ b/datastructures/observation-table/src/test/java/de/learnlib/datastructure/observationtable/writer/SuffixASCIIWriterTest.java
@@ -20,7 +20,7 @@
import de.learnlib.datastructure.observationtable.ObservationTableSource;
import de.learnlib.datastructure.observationtable.reader.SuffixASCIIReader;
import net.automatalib.alphabet.GrowingAlphabet;
-import net.automatalib.alphabet.GrowingMapAlphabet;
+import net.automatalib.alphabet.impl.GrowingMapAlphabet;
import org.testng.Assert;
import org.testng.annotations.Test;
diff --git a/datastructures/pta/pom.xml b/datastructures/pta/pom.xml
index 939f851e72..8f840c8dce 100644
--- a/datastructures/pta/pom.xml
+++ b/datastructures/pta/pom.xml
@@ -28,7 +28,7 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-datastructure-pta</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.datastructure.pta {
+
+ requires com.google.common;
+ requires net.automatalib.api;
+ requires net.automatalib.common.smartcollection;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.datastructure.pta;
+ exports de.learnlib.datastructure.pta.config;
+ exports de.learnlib.datastructure.pta.wrapper;
+}
diff --git a/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/MergedAutomatonTest.java b/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/MergedAutomatonTest.java
index d9724bfdaa..5a564c50c9 100644
--- a/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/MergedAutomatonTest.java
+++ b/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/MergedAutomatonTest.java
@@ -19,7 +19,7 @@
import java.util.List;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.automaton.UniversalDeterministicAutomaton;
import net.automatalib.word.Word;
import org.testng.Assert;
diff --git a/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/PTAVisualizationTest.java b/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/PTAVisualizationTest.java
index 3df130ded9..edf9f4b5d9 100644
--- a/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/PTAVisualizationTest.java
+++ b/datastructures/pta/src/test/java/de/learnlib/datastructure/pta/PTAVisualizationTest.java
@@ -22,8 +22,8 @@
import com.google.common.io.CharStreams;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.transducer.CompactMoore;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.automaton.transducer.impl.CompactMoore;
import net.automatalib.common.util.IOUtil;
import net.automatalib.serialization.dot.GraphDOT;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 3bfbb4753b..86bf59ef24 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -505,6 +505,11 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-drivers-basic</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.driver {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.driver;
+ exports de.learnlib.driver.reflect;
+}
diff --git a/drivers/mapper/src/main/java/de/learnlib/mapper/StringMapper.java b/drivers/mapper/src/main/java/de/learnlib/mapper/StringMapper.java
index f0a0ca4a5c..3e08c69198 100644
--- a/drivers/mapper/src/main/java/de/learnlib/mapper/StringMapper.java
+++ b/drivers/mapper/src/main/java/de/learnlib/mapper/StringMapper.java
@@ -20,7 +20,7 @@
import de.learnlib.sul.SULMapper;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.GrowingMapAlphabet;
+import net.automatalib.alphabet.impl.GrowingMapAlphabet;
public class StringMapper
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-mapper</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.mapper {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.core;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.mapper;
+}
diff --git a/drivers/mapper/src/test/java/de/learnlib/mapper/MapperCompositionTest.java b/drivers/mapper/src/test/java/de/learnlib/mapper/MapperCompositionTest.java
index b8de96f38d..dab8c508e8 100644
--- a/drivers/mapper/src/test/java/de/learnlib/mapper/MapperCompositionTest.java
+++ b/drivers/mapper/src/test/java/de/learnlib/mapper/MapperCompositionTest.java
@@ -16,7 +16,7 @@
package de.learnlib.mapper;
import de.learnlib.Mapper;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
diff --git a/algorithms/active/adt/src/main/java/de/learnlib/algorithm/adt/package-info.java b/drivers/simulator/src/main/java/module-info.java
similarity index 53%
rename from algorithms/active/adt/src/main/java/de/learnlib/algorithm/adt/package-info.java
rename to drivers/simulator/src/main/java/module-info.java
index d4ac611521..245fb92ff8 100644
--- a/algorithms/active/adt/src/main/java/de/learnlib/algorithm/adt/package-info.java
+++ b/drivers/simulator/src/main/java/module-info.java
@@ -14,9 +14,25 @@
* limitations under the License.
*/
+import de.learnlib.sul.SUL;
+
/**
- * This package (and sub-packages) provides the implementation of the ADT learning algorithm as described in the Master
- * thesis Active Automata Learning with Adaptive Distinguishing Sequences
- * by Markus Frohme.
+ * This module provides utilities for simulating {@link SUL}s.
+ *
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-drivers-simulator</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
*/
-package de.learnlib.algorithm.adt;
+open module de.learnlib.driver.simulator {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.driver.simulator;
+}
diff --git a/examples/pom.xml b/examples/pom.xml
index 582861b1b8..a04f707b26 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -176,8 +176,8 @@ limitations under the License.
* Note: this implementation is not thread-safe. If you require a cache that is usable in a parallel
- * environment. consider using the alternatives offered by the {@code ThreadSafeDFACaches} factory from the {@code
- * learnlib-parallelism} artifact.
+ * environment. consider using the alternatives offered by the {@link ThreadSafeDFACaches} factory.
*
* @param
* input symbol type
diff --git a/oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheConsistencyTest.java b/filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheConsistencyTest.java
similarity index 100%
rename from oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheConsistencyTest.java
rename to filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheConsistencyTest.java
diff --git a/oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheOracle.java b/filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheOracle.java
similarity index 100%
rename from oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheOracle.java
rename to filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACacheOracle.java
diff --git a/oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACaches.java b/filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACaches.java
similarity index 100%
rename from oracles/parallelism/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACaches.java
rename to filters/cache/src/main/java/de/learnlib/filter/cache/dfa/ThreadSafeDFACaches.java
diff --git a/filters/cache/src/main/java/de/learnlib/filter/cache/mealy/SymbolQueryCache.java b/filters/cache/src/main/java/de/learnlib/filter/cache/mealy/SymbolQueryCache.java
index cca361c6be..66808f99f3 100644
--- a/filters/cache/src/main/java/de/learnlib/filter/cache/mealy/SymbolQueryCache.java
+++ b/filters/cache/src/main/java/de/learnlib/filter/cache/mealy/SymbolQueryCache.java
@@ -27,8 +27,9 @@
import de.learnlib.oracle.SymbolQueryOracle;
import de.learnlib.query.DefaultQuery;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.automaton.transducer.CompactMealy;
+import net.automatalib.alphabet.SupportsGrowingAlphabet;
import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.util.automaton.equivalence.NearLinearEquivalenceTest;
import net.automatalib.word.Word;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -46,7 +47,7 @@
* output alphabet type
*/
public class SymbolQueryCache
- implements SymbolQueryOracle, MealyLearningCacheOracle, Resumable
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessor.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessor.java
index f89f962b77..c3f479c999 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessor.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessor.java
@@ -25,6 +25,9 @@
import java.util.concurrent.Future;
import com.google.common.base.Throwables;
+import de.learnlib.exception.BatchInterruptedException;
+import de.learnlib.oracle.BatchProcessor;
+import de.learnlib.oracle.ThreadPool;
import de.learnlib.setting.LearnLibProperty;
import de.learnlib.setting.LearnLibSettings;
import net.automatalib.common.smartcollection.ArrayStorage;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessorBuilder.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessorBuilder.java
index e23e973255..ff7cb8c1e4 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessorBuilder.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/AbstractStaticBatchProcessorBuilder.java
@@ -21,7 +21,8 @@
import java.util.function.Supplier;
import com.google.common.base.Preconditions;
-import de.learnlib.oracle.parallelism.ThreadPool.PoolPolicy;
+import de.learnlib.oracle.BatchProcessor;
+import de.learnlib.oracle.ThreadPool.PoolPolicy;
import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.nullness.qual.Nullable;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOmegaOracle.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOmegaOracle.java
index 8cd6ee54a4..86911b14d0 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOmegaOracle.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOmegaOracle.java
@@ -21,6 +21,7 @@
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.oracle.OmegaMembershipOracle;
+import de.learnlib.oracle.ParallelOmegaOracle;
import de.learnlib.query.OmegaQuery;
import net.automatalib.word.Word;
import org.checkerframework.checker.index.qual.NonNegative;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOracle.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOracle.java
index d1605f34a5..af1e10e57e 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOracle.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicParallelOracle.java
@@ -20,6 +20,7 @@
import java.util.function.Supplier;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.oracle.ParallelOracle;
import de.learnlib.query.Query;
import org.checkerframework.checker.index.qual.NonNegative;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicQueriesJob.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicQueriesJob.java
index 3ce0e6e405..e248b6696c 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicQueriesJob.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/DynamicQueriesJob.java
@@ -17,6 +17,8 @@
import java.util.Collection;
+import de.learnlib.oracle.BatchProcessor;
+
/**
* A queries job that maintains a thread-local reference to a {@link BatchProcessor}, and dynamically selects that
* oracle depending on the executing thread.
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/ParallelOracleBuilders.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/ParallelOracleBuilders.java
index c9b0573962..f13a281668 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/ParallelOracleBuilders.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/ParallelOracleBuilders.java
@@ -22,10 +22,10 @@
import com.google.common.collect.Lists;
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.oracle.OmegaMembershipOracle;
+import de.learnlib.oracle.ThreadPool.PoolPolicy;
import de.learnlib.oracle.membership.AbstractSULOmegaOracle;
import de.learnlib.oracle.membership.SULOracle;
import de.learnlib.oracle.membership.StateLocalInputSULOracle;
-import de.learnlib.oracle.parallelism.ThreadPool.PoolPolicy;
import de.learnlib.sul.ObservableSUL;
import de.learnlib.sul.SUL;
import de.learnlib.sul.StateLocalInputSUL;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracle.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracle.java
index 4f90145f6d..2e8f30190c 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracle.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracle.java
@@ -19,6 +19,7 @@
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.oracle.OmegaMembershipOracle;
+import de.learnlib.oracle.ParallelOmegaOracle;
import de.learnlib.query.OmegaQuery;
import net.automatalib.word.Word;
import org.checkerframework.checker.index.qual.NonNegative;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracleBuilder.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracleBuilder.java
index beb447cd16..ab8ff31fcd 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracleBuilder.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOmegaOracleBuilder.java
@@ -19,7 +19,7 @@
import java.util.function.Supplier;
import de.learnlib.oracle.OmegaMembershipOracle;
-import de.learnlib.oracle.parallelism.ThreadPool.PoolPolicy;
+import de.learnlib.oracle.ThreadPool.PoolPolicy;
import de.learnlib.query.OmegaQuery;
/**
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracle.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracle.java
index 12498cdb32..9adcad3bcc 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracle.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracle.java
@@ -18,6 +18,7 @@
import java.util.Collection;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.oracle.ParallelOracle;
import de.learnlib.query.Query;
import org.checkerframework.checker.index.qual.NonNegative;
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracleBuilder.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracleBuilder.java
index f398548523..41efffef3e 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracleBuilder.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticParallelOracleBuilder.java
@@ -19,7 +19,7 @@
import java.util.function.Supplier;
import de.learnlib.oracle.MembershipOracle;
-import de.learnlib.oracle.parallelism.ThreadPool.PoolPolicy;
+import de.learnlib.oracle.ThreadPool.PoolPolicy;
import de.learnlib.query.Query;
/**
diff --git a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticQueriesJob.java b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticQueriesJob.java
index 00e068cfe0..3dec64f1a0 100644
--- a/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticQueriesJob.java
+++ b/oracles/parallelism/src/main/java/de/learnlib/oracle/parallelism/StaticQueriesJob.java
@@ -17,6 +17,8 @@
import java.util.Collection;
+import de.learnlib.oracle.BatchProcessor;
+
/**
* A queries job that maintains a fixed reference to a {@link BatchProcessor}, executes queries using this oracle
* regardless of the executing thread.
diff --git a/oracles/parallelism/src/main/java/module-info.java b/oracles/parallelism/src/main/java/module-info.java
new file mode 100644
index 0000000000..cf29aad47f
--- /dev/null
+++ b/oracles/parallelism/src/main/java/module-info.java
@@ -0,0 +1,41 @@
+/* Copyright (C) 2013-2024 TU Dortmund University
+ * This file is part of LearnLib, http://www.learnlib.de/.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This module provides support for posing membership queries in parallel.
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * This module is provided by the following Maven dependency:
+ *
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-cache</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.filter.cache {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires net.automatalib.incremental;
+ requires net.automatalib.util;
+ requires org.checkerframework.checker.qual;
+ requires org.slf4j;
+
+ // only required by documentation
+ requires static de.learnlib.oracle.parallelism;
+
+ exports de.learnlib.filter.cache;
+ exports de.learnlib.filter.cache.dfa;
+ exports de.learnlib.filter.cache.mealy;
+ exports de.learnlib.filter.cache.moore;
+ exports de.learnlib.filter.cache.sul;
+}
diff --git a/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractCacheTest.java b/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractCacheTest.java
index 886da74792..a314bc344b 100644
--- a/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractCacheTest.java
+++ b/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractCacheTest.java
@@ -26,6 +26,7 @@
import de.learnlib.query.Query;
import de.learnlib.testsupport.ResumeUtils;
import net.automatalib.alphabet.Alphabet;
+import net.automatalib.alphabet.SupportsGrowingAlphabet;
import net.automatalib.automaton.concept.Output;
import net.automatalib.word.Word;
import net.automatalib.word.WordBuilder;
@@ -148,6 +149,41 @@ public void testResuming() {
}
@Test(dependsOnMethods = "testResuming")
+ public void testAddSymbol() {
+ if (supportsGrowing()) {
+ @SuppressWarnings("unchecked")
+ final SupportsGrowingAlphabet growingCache = (SupportsGrowingAlphabet) oracle;
+
+ // test that adding existing symbols does nothing;
+ final long oldCount = getNumberOfPosedQueries();
+ alphabet.forEach(growingCache::addAlphabetSymbol);
+ final long newCount = getNumberOfPosedQueries();
+ Assert.assertEquals(newCount, oldCount);
+
+ // test that adding new symbols does nothing;
+ final Alphabet extensions = getExtensionAlphabet();
+ final long oldCount2 = getNumberOfPosedQueries();
+ extensions.forEach(growingCache::addAlphabetSymbol);
+ final long newCount2 = getNumberOfPosedQueries();
+ Assert.assertEquals(newCount2, oldCount2);
+
+ // test that adding new queries works
+ queries.clear();
+ queries.add(new DefaultQuery<>(generateWord()));
+ final long oldCount3 = getNumberOfPosedQueries();
+ oracle.processQueries(queries);
+ final long newCount3 = getNumberOfPosedQueries();
+ Assert.assertEquals(newCount3, oldCount3 + 1);
+
+ // test that querying new queries works
+ final long oldCount4 = getNumberOfPosedQueries();
+ oracle.processQueries(queries);
+ final long newCount4 = getNumberOfPosedQueries();
+ Assert.assertEquals(newCount4, oldCount4);
+ }
+ }
+
+ @Test(dependsOnMethods = "testAddSymbol")
public void testDuplicatesInBatch() {
final long oldCount = getNumberOfPosedQueries();
@@ -172,6 +208,10 @@ public void testDuplicatesInBatch() {
}
private Word generateWord() {
+ return generateWord(alphabet);
+ }
+
+ private Word generateWord(Alphabet alphabet) {
final WordBuilder result = new WordBuilder<>(LENGTH);
for (int i = 0; i < LENGTH; ++i) {
@@ -198,6 +238,8 @@ protected Query getQuery(int i) {
protected abstract Alphabet getAlphabet();
+ protected abstract Alphabet getExtensionAlphabet();
+
protected abstract A getTargetModel();
protected abstract A getInvalidTargetModel();
@@ -210,4 +252,6 @@ protected Query getQuery(int i) {
protected abstract boolean supportsPrefixes();
+ protected abstract boolean supportsGrowing();
+
}
diff --git a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java b/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java
similarity index 99%
rename from oracles/parallelism/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java
rename to filters/cache/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java
index 0902ca2a39..75f66ec1c5 100644
--- a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java
+++ b/filters/cache/src/test/java/de/learnlib/filter/cache/AbstractParallelCacheTest.java
@@ -20,7 +20,7 @@
import java.util.stream.IntStream;
import de.learnlib.oracle.EquivalenceOracle;
-import de.learnlib.oracle.parallelism.ParallelOracle;
+import de.learnlib.oracle.ParallelOracle;
import de.learnlib.query.DefaultQuery;
import net.automatalib.alphabet.Alphabet;
import net.automatalib.common.util.collection.CollectionsUtil;
diff --git a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheConfig.java b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheConfig.java
similarity index 93%
rename from oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheConfig.java
rename to filters/cache/src/test/java/de/learnlib/filter/cache/CacheConfig.java
index 4445342758..1a476de8c0 100644
--- a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheConfig.java
+++ b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheConfig.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.learnlib.filter.cache.configuration;
+package de.learnlib.filter.cache;
import java.util.ArrayList;
import java.util.Collection;
@@ -21,20 +21,18 @@
import java.util.function.BiFunction;
import java.util.function.Supplier;
-import de.learnlib.filter.cache.LearningCache;
+import de.learnlib.filter.cache.CacheCreator.DFACacheCreator;
+import de.learnlib.filter.cache.CacheCreator.MealyCacheCreator;
+import de.learnlib.filter.cache.CacheCreator.MooreCacheCreator;
+import de.learnlib.filter.cache.CacheCreator.SLISULCacheCreator;
+import de.learnlib.filter.cache.CacheCreator.SULCacheCreator;
import de.learnlib.filter.cache.LearningCache.MealyLearningCache;
-import de.learnlib.filter.cache.LearningCacheOracle;
import de.learnlib.filter.cache.LearningCacheOracle.DFALearningCacheOracle;
import de.learnlib.filter.cache.LearningCacheOracle.MealyLearningCacheOracle;
import de.learnlib.filter.cache.LearningCacheOracle.MooreLearningCacheOracle;
-import de.learnlib.filter.cache.configuration.CacheCreator.DFACacheCreator;
-import de.learnlib.filter.cache.configuration.CacheCreator.MealyCacheCreator;
-import de.learnlib.filter.cache.configuration.CacheCreator.MooreCacheCreator;
-import de.learnlib.filter.cache.configuration.CacheCreator.SLISULCacheCreator;
-import de.learnlib.filter.cache.configuration.CacheCreator.SULCacheCreator;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.oracle.ParallelOracle;
import de.learnlib.oracle.parallelism.AbstractStaticBatchProcessor;
-import de.learnlib.oracle.parallelism.ParallelOracle;
import de.learnlib.oracle.parallelism.ParallelOracleBuilders;
import de.learnlib.sul.SUL;
import de.learnlib.sul.StateLocalInputSUL;
diff --git a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheCreator.java b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheCreator.java
similarity index 87%
rename from oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheCreator.java
rename to filters/cache/src/test/java/de/learnlib/filter/cache/CacheCreator.java
index fadd6b6d64..fe47996474 100644
--- a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/CacheCreator.java
+++ b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheCreator.java
@@ -13,28 +13,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.learnlib.filter.cache.configuration;
+package de.learnlib.filter.cache;
import java.util.Collection;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
-import de.learnlib.filter.cache.LearningCache;
+import de.learnlib.filter.cache.CacheConfig.DFACollectionConfig;
+import de.learnlib.filter.cache.CacheConfig.DFASupplierConfig;
+import de.learnlib.filter.cache.CacheConfig.MealyCollectionConfig;
+import de.learnlib.filter.cache.CacheConfig.MealySupplierConfig;
+import de.learnlib.filter.cache.CacheConfig.MooreCollectionConfig;
+import de.learnlib.filter.cache.CacheConfig.MooreSupplierConfig;
+import de.learnlib.filter.cache.CacheConfig.SLISULConfig;
+import de.learnlib.filter.cache.CacheConfig.SULConfig;
import de.learnlib.filter.cache.LearningCache.DFALearningCache;
import de.learnlib.filter.cache.LearningCache.MealyLearningCache;
import de.learnlib.filter.cache.LearningCache.MooreLearningCache;
import de.learnlib.filter.cache.LearningCacheOracle.DFALearningCacheOracle;
import de.learnlib.filter.cache.LearningCacheOracle.MealyLearningCacheOracle;
import de.learnlib.filter.cache.LearningCacheOracle.MooreLearningCacheOracle;
-import de.learnlib.filter.cache.configuration.CacheConfig.DFACollectionConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.DFASupplierConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.MealyCollectionConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.MealySupplierConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.MooreCollectionConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.MooreSupplierConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.SLISULConfig;
-import de.learnlib.filter.cache.configuration.CacheConfig.SULConfig;
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.sul.SUL;
import de.learnlib.sul.StateLocalInputSUL;
diff --git a/filters/cache/src/test/java/de/learnlib/filter/cache/CacheTestUtils.java b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheTestUtils.java
index 69b0e742d7..2236ec7fa8 100644
--- a/filters/cache/src/test/java/de/learnlib/filter/cache/CacheTestUtils.java
+++ b/filters/cache/src/test/java/de/learnlib/filter/cache/CacheTestUtils.java
@@ -17,16 +17,31 @@
import java.util.Random;
+import de.learnlib.driver.simulator.MealySimulatorSUL;
+import de.learnlib.driver.simulator.StateLocalInputMealySimulatorSUL;
+import de.learnlib.filter.statistic.oracle.DFACounterOracle;
+import de.learnlib.filter.statistic.oracle.MealyCounterOracle;
+import de.learnlib.filter.statistic.oracle.MooreCounterOracle;
+import de.learnlib.filter.statistic.sul.ResetCounterSUL;
+import de.learnlib.filter.statistic.sul.ResetCounterStateLocalInputSUL;
+import de.learnlib.oracle.membership.DFASimulatorOracle;
+import de.learnlib.oracle.membership.MealySimulatorOracle;
+import de.learnlib.oracle.membership.MooreSimulatorOracle;
+import de.learnlib.sul.SUL;
+import de.learnlib.sul.StateLocalInputSUL;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.fsa.CompactDFA;
-import net.automatalib.automaton.transducer.CompactMealy;
-import net.automatalib.automaton.transducer.CompactMoore;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.automaton.fsa.impl.CompactDFA;
+import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.MooreMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
+import net.automatalib.automaton.transducer.impl.CompactMoore;
import net.automatalib.util.automaton.random.RandomAutomata;
public final class CacheTestUtils {
public static final Alphabet
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-reuse</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.filter.reuse {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires org.checkerframework.checker.qual;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.filter.reuse;
+ exports de.learnlib.filter.reuse.tree;
+}
diff --git a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/DomainKnowledgeTest.java b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/DomainKnowledgeTest.java
index 49af1bb770..d74374203c 100644
--- a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/DomainKnowledgeTest.java
+++ b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/DomainKnowledgeTest.java
@@ -24,7 +24,7 @@
import de.learnlib.filter.reuse.ReuseOracleBuilder;
import de.learnlib.filter.reuse.tree.ReuseNode.NodeResult;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.word.Word;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
diff --git a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/LearningTest.java b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/LearningTest.java
index a6c12dccdf..dcc32d6af2 100644
--- a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/LearningTest.java
+++ b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/LearningTest.java
@@ -26,7 +26,7 @@
import de.learnlib.filter.reuse.ReuseOracleBuilder;
import de.learnlib.filter.reuse.tree.ReuseTree;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.serialization.dot.GraphDOT;
import net.automatalib.word.Word;
import net.automatalib.word.WordBuilder;
diff --git a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/QuiescenceTest.java b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/QuiescenceTest.java
index d9f94e9371..6aa29250a0 100644
--- a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/QuiescenceTest.java
+++ b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/QuiescenceTest.java
@@ -23,7 +23,7 @@
import de.learnlib.filter.reuse.ReuseOracle;
import de.learnlib.filter.reuse.ReuseOracleBuilder;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.word.Word;
import net.automatalib.word.WordBuilder;
import org.testng.annotations.BeforeClass;
diff --git a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/ReuseOracleTest.java b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/ReuseOracleTest.java
index 4b6d08de81..65a5afb2d1 100644
--- a/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/ReuseOracleTest.java
+++ b/filters/reuse/src/test/java/de/learnlib/filter/reuse/test/ReuseOracleTest.java
@@ -23,7 +23,7 @@
import de.learnlib.filter.reuse.ReuseOracleBuilder;
import de.learnlib.filter.reuse.tree.ReuseNode.NodeResult;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.word.Word;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
diff --git a/filters/statistics/src/main/java/module-info.java b/filters/statistics/src/main/java/module-info.java
new file mode 100644
index 0000000000..010bc62a5b
--- /dev/null
+++ b/filters/statistics/src/main/java/module-info.java
@@ -0,0 +1,41 @@
+/* Copyright (C) 2013-2024 TU Dortmund University
+ * This file is part of LearnLib, http://www.learnlib.de/.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This module provides filters for collecting statistical data.
+ *
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-statistics</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.filter.statistic {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.filter.statistic;
+ exports de.learnlib.filter.statistic.learner;
+ exports de.learnlib.filter.statistic.oracle;
+ exports de.learnlib.filter.statistic.sul;
+}
diff --git a/filters/statistics/src/test/java/de/learnlib/filter/statistic/TestQueries.java b/filters/statistics/src/test/java/de/learnlib/filter/statistic/TestQueries.java
index 56d594d83c..6e1c44924c 100644
--- a/filters/statistics/src/test/java/de/learnlib/filter/statistic/TestQueries.java
+++ b/filters/statistics/src/test/java/de/learnlib/filter/statistic/TestQueries.java
@@ -22,8 +22,8 @@
import de.learnlib.query.Query;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.transducer.CompactMealy;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.common.util.collection.CollectionsUtil;
import net.automatalib.common.util.random.RandomUtil;
import net.automatalib.util.automaton.random.RandomAutomata;
diff --git a/oracles/emptiness-oracles/pom.xml b/oracles/emptiness-oracles/pom.xml
index b7e11fad6f..ceec43bf96 100644
--- a/oracles/emptiness-oracles/pom.xml
+++ b/oracles/emptiness-oracles/pom.xml
@@ -68,4 +68,23 @@
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-emptiness-oracles</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.oracle.emptiness {
+
+ requires de.learnlib.api;
+ requires de.learnlib.common.util;
+ requires net.automatalib.api;
+ requires org.checkerframework.checker.qual;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.oracle.emptiness;
+}
diff --git a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/AbstractLassoEmptinessOracleImplTest.java b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/AbstractLassoEmptinessOracleImplTest.java
index f0c080d37b..1b4d22ba15 100644
--- a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/AbstractLassoEmptinessOracleImplTest.java
+++ b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/AbstractLassoEmptinessOracleImplTest.java
@@ -20,7 +20,7 @@
import de.learnlib.query.DefaultQuery;
import de.learnlib.query.OmegaQuery;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.modelchecking.Lasso;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFABFEmptinessOracleTest.java b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFABFEmptinessOracleTest.java
index e4a22ada70..2c51682904 100644
--- a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFABFEmptinessOracleTest.java
+++ b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFABFEmptinessOracleTest.java
@@ -19,8 +19,8 @@
import de.learnlib.oracle.MembershipOracle.DFAMembershipOracle;
import de.learnlib.query.DefaultQuery;
-import net.automatalib.automaton.fsa.CompactDFA;
import net.automatalib.automaton.fsa.DFA;
+import net.automatalib.automaton.fsa.impl.CompactDFA;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFALassoEmptinessOracleImplTest.java b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFALassoEmptinessOracleImplTest.java
index 9ed3aeac4e..a59ec515e6 100644
--- a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFALassoEmptinessOracleImplTest.java
+++ b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/DFALassoEmptinessOracleImplTest.java
@@ -20,10 +20,10 @@
import de.learnlib.oracle.OmegaMembershipOracle.DFAOmegaMembershipOracle;
import de.learnlib.query.DefaultQuery;
import de.learnlib.query.OmegaQuery;
-import net.automatalib.automaton.fsa.CompactDFA;
import net.automatalib.automaton.fsa.DFA;
-import net.automatalib.modelchecking.DFALassoImpl;
+import net.automatalib.automaton.fsa.impl.CompactDFA;
import net.automatalib.modelchecking.Lasso;
+import net.automatalib.modelchecking.impl.DFALassoImpl;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyBFEmptinessOracleTest.java b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyBFEmptinessOracleTest.java
index 52c04072fb..b763249620 100644
--- a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyBFEmptinessOracleTest.java
+++ b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyBFEmptinessOracleTest.java
@@ -19,8 +19,8 @@
import de.learnlib.oracle.MembershipOracle.MealyMembershipOracle;
import de.learnlib.query.DefaultQuery;
-import net.automatalib.automaton.transducer.CompactMealy;
import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyLassoEmptinessOracleImplTest.java b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyLassoEmptinessOracleImplTest.java
index fce67de90d..e1951956a4 100644
--- a/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyLassoEmptinessOracleImplTest.java
+++ b/oracles/emptiness-oracles/src/test/java/de/learnlib/oracle/emptiness/MealyLassoEmptinessOracleImplTest.java
@@ -20,10 +20,10 @@
import de.learnlib.oracle.OmegaMembershipOracle.MealyOmegaMembershipOracle;
import de.learnlib.query.DefaultQuery;
import de.learnlib.query.OmegaQuery;
-import net.automatalib.automaton.transducer.CompactMealy;
import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.modelchecking.Lasso;
-import net.automatalib.modelchecking.MealyLassoImpl;
+import net.automatalib.modelchecking.impl.MealyLassoImpl;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/equivalence-oracles/src/main/java/module-info.java b/oracles/equivalence-oracles/src/main/java/module-info.java
new file mode 100644
index 0000000000..54307ad3b1
--- /dev/null
+++ b/oracles/equivalence-oracles/src/main/java/module-info.java
@@ -0,0 +1,49 @@
+/* Copyright (C) 2013-2024 TU Dortmund University
+ * This file is part of LearnLib, http://www.learnlib.de/.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This module provides a collection of equivalence oracles.
+ *
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-equivalence-oracles</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.oracle.equivalence {
+
+ requires com.google.common;
+ requires de.learnlib.api;
+ requires de.learnlib.common.util;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires net.automatalib.util;
+ requires org.checkerframework.checker.qual;
+ requires org.slf4j;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.oracle.equivalence;
+ exports de.learnlib.oracle.equivalence.mealy;
+ exports de.learnlib.oracle.equivalence.sba;
+ exports de.learnlib.oracle.equivalence.spa;
+ exports de.learnlib.oracle.equivalence.spmm;
+ exports de.learnlib.oracle.equivalence.vpa;
+}
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/DFABFInclusionOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/DFABFInclusionOracleTest.java
index 64462ac27c..20841a9733 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/DFABFInclusionOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/DFABFInclusionOracleTest.java
@@ -19,8 +19,8 @@
import de.learnlib.oracle.MembershipOracle.DFAMembershipOracle;
import de.learnlib.query.DefaultQuery;
-import net.automatalib.automaton.fsa.CompactDFA;
import net.automatalib.automaton.fsa.DFA;
+import net.automatalib.automaton.fsa.impl.CompactDFA;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/EmptyAutomatonOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/EmptyAutomatonOracleTest.java
index da540478ec..d7e96013fd 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/EmptyAutomatonOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/EmptyAutomatonOracleTest.java
@@ -15,20 +15,20 @@
*/
package de.learnlib.oracle.equivalence;
-import de.learnlib.example.LearningExample;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
-import de.learnlib.example.mealy.ExampleStack;
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.oracle.membership.SimulatorOracle;
import de.learnlib.query.DefaultQuery;
+import de.learnlib.testsupport.example.LearningExample;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
+import de.learnlib.testsupport.example.mealy.ExampleStack;
import net.automatalib.alphabet.Alphabet;
import net.automatalib.automaton.AutomatonCreator;
import net.automatalib.automaton.UniversalDeterministicAutomaton;
import net.automatalib.automaton.concept.DetSuffixOutputAutomaton;
import net.automatalib.automaton.concept.Output;
-import net.automatalib.automaton.fsa.CompactDFA;
-import net.automatalib.automaton.transducer.CompactMealy;
+import net.automatalib.automaton.fsa.impl.CompactDFA;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.exception.UndefinedPropertyAccessException;
import org.testng.Assert;
import org.testng.annotations.Test;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/IncrementalWMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/IncrementalWMethodEQOracleTest.java
index c10acafa8a..6a4ace150b 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/IncrementalWMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/IncrementalWMethodEQOracleTest.java
@@ -18,9 +18,9 @@
import java.util.HashSet;
import java.util.Set;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
import net.automatalib.alphabet.Alphabet;
import net.automatalib.automaton.fsa.DFA;
import net.automatalib.util.automaton.Automata;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/MealyBFInclusionOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/MealyBFInclusionOracleTest.java
index 214645ce75..eca3489cd4 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/MealyBFInclusionOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/MealyBFInclusionOracleTest.java
@@ -19,8 +19,8 @@
import de.learnlib.oracle.MembershipOracle.MealyMembershipOracle;
import de.learnlib.query.DefaultQuery;
-import net.automatalib.automaton.transducer.CompactMealy;
import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.util.automaton.builder.AutomatonBuilders;
import net.automatalib.word.Word;
import org.mockito.ArgumentMatchers;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWMethodEQOracleTest.java
index cb292629ab..aa2c9b533f 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWMethodEQOracleTest.java
@@ -18,9 +18,9 @@
import java.util.HashSet;
import java.util.Set;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
import net.automatalib.alphabet.Alphabet;
import net.automatalib.automaton.fsa.DFA;
import net.automatalib.util.automaton.Automata;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWordsEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWordsEQOracleTest.java
index b91affa6b0..7cb36ee37a 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWordsEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWordsEQOracleTest.java
@@ -20,7 +20,7 @@
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.automaton.concept.SuffixOutput;
import net.automatalib.word.Word;
import org.testng.Assert;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWpMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWpMethodEQOracleTest.java
index 2c1144bb4f..2a1e6b9c50 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWpMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/RandomWpMethodEQOracleTest.java
@@ -18,9 +18,9 @@
import java.util.HashSet;
import java.util.Set;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
import net.automatalib.alphabet.Alphabet;
import net.automatalib.automaton.fsa.DFA;
import net.automatalib.util.automaton.Automata;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/SampleSetEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/SampleSetEQOracleTest.java
index 9f69faeaea..1c91c327c0 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/SampleSetEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/SampleSetEQOracleTest.java
@@ -23,7 +23,7 @@
import de.learnlib.oracle.EquivalenceOracle;
import de.learnlib.oracle.MembershipOracle;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.automaton.concept.SuffixOutput;
import net.automatalib.common.util.random.RandomUtil;
import net.automatalib.word.Word;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/mealy/RandomWalkEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/mealy/RandomWalkEQOracleTest.java
index e94e4af4bf..c4b9dec966 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/mealy/RandomWalkEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/mealy/RandomWalkEQOracleTest.java
@@ -21,8 +21,8 @@
import de.learnlib.query.DefaultQuery;
import de.learnlib.sul.SUL;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.transducer.CompactMealy;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.word.Word;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.testng.Assert;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/sba/WMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/sba/WMethodEQOracleTest.java
index c2bab2a445..fb5bbd8719 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/sba/WMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/sba/WMethodEQOracleTest.java
@@ -21,9 +21,9 @@
import com.google.common.collect.Streams;
import de.learnlib.oracle.membership.SimulatorOracle;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.alphabet.DefaultProceduralInputAlphabet;
import net.automatalib.alphabet.ProceduralInputAlphabet;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet;
import net.automatalib.automaton.procedural.SBA;
import net.automatalib.util.automaton.conformance.SBAWMethodTestsIterator;
import net.automatalib.util.automaton.random.RandomAutomata;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WMethodEQOracleTest.java
index 23e171d934..55c2e223ba 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WMethodEQOracleTest.java
@@ -21,9 +21,9 @@
import com.google.common.collect.Streams;
import de.learnlib.oracle.membership.SimulatorOracle;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.alphabet.DefaultProceduralInputAlphabet;
import net.automatalib.alphabet.ProceduralInputAlphabet;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet;
import net.automatalib.automaton.procedural.SPA;
import net.automatalib.util.automaton.conformance.SPATestsIterator;
import net.automatalib.util.automaton.conformance.WMethodTestsIterator;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WpMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WpMethodEQOracleTest.java
index 5b939e2e3c..ce375185ab 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WpMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spa/WpMethodEQOracleTest.java
@@ -21,9 +21,9 @@
import com.google.common.collect.Streams;
import de.learnlib.oracle.membership.SimulatorOracle;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.alphabet.DefaultProceduralInputAlphabet;
import net.automatalib.alphabet.ProceduralInputAlphabet;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet;
import net.automatalib.automaton.procedural.SPA;
import net.automatalib.util.automaton.conformance.SPATestsIterator;
import net.automatalib.util.automaton.conformance.WpMethodTestsIterator;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spmm/WMethodEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spmm/WMethodEQOracleTest.java
index c0f2a7e229..863b7b5153 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spmm/WMethodEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/spmm/WMethodEQOracleTest.java
@@ -21,11 +21,11 @@
import com.google.common.collect.Streams;
import de.learnlib.oracle.membership.SimulatorOracle;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.alphabet.DefaultProceduralInputAlphabet;
-import net.automatalib.alphabet.DefaultProceduralOutputAlphabet;
import net.automatalib.alphabet.ProceduralInputAlphabet;
import net.automatalib.alphabet.ProceduralOutputAlphabet;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.alphabet.impl.DefaultProceduralInputAlphabet;
+import net.automatalib.alphabet.impl.DefaultProceduralOutputAlphabet;
import net.automatalib.automaton.procedural.SPMM;
import net.automatalib.util.automaton.conformance.SPMMWMethodTestsIterator;
import net.automatalib.util.automaton.random.RandomAutomata;
diff --git a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/vpa/RandomWellMatchedWordsEQOracleTest.java b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/vpa/RandomWellMatchedWordsEQOracleTest.java
index aec84576de..4a4eaf6f01 100644
--- a/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/vpa/RandomWellMatchedWordsEQOracleTest.java
+++ b/oracles/equivalence-oracles/src/test/java/de/learnlib/oracle/equivalence/vpa/RandomWellMatchedWordsEQOracleTest.java
@@ -21,9 +21,9 @@
import de.learnlib.oracle.MembershipOracle;
import de.learnlib.oracle.equivalence.AbstractEQOracleTest;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.alphabet.DefaultVPAlphabet;
import net.automatalib.alphabet.VPAlphabet;
+import net.automatalib.alphabet.impl.Alphabets;
+import net.automatalib.alphabet.impl.DefaultVPAlphabet;
import net.automatalib.automaton.concept.Output;
import net.automatalib.automaton.concept.SuffixOutput;
import net.automatalib.word.Word;
diff --git a/oracles/membership-oracles/pom.xml b/oracles/membership-oracles/pom.xml
index 075eda777b..2bf85b23f3 100644
--- a/oracles/membership-oracles/pom.xml
+++ b/oracles/membership-oracles/pom.xml
@@ -89,4 +89,19 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-membership-oracles</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.oracle.membership {
+
+ requires de.learnlib.api;
+ requires de.learnlib.common.util;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires org.checkerframework.checker.qual;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.oracle.membership;
+}
diff --git a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULOmegaOracleTest.java b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULOmegaOracleTest.java
index 1350113ac7..4cdf7166ab 100644
--- a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULOmegaOracleTest.java
+++ b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULOmegaOracleTest.java
@@ -19,12 +19,12 @@
import java.util.List;
import de.learnlib.driver.simulator.ObservableMealySimulatorSUL;
-import de.learnlib.example.mealy.ExampleCoffeeMachine;
-import de.learnlib.example.mealy.ExampleCoffeeMachine.Input;
import de.learnlib.oracle.OmegaMembershipOracle.MealyOmegaMembershipOracle;
import de.learnlib.query.OmegaQuery;
import de.learnlib.sul.ObservableSUL;
-import net.automatalib.automaton.transducer.CompactMealy;
+import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine;
+import de.learnlib.testsupport.example.mealy.ExampleCoffeeMachine.Input;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.word.Word;
import org.mockito.Mockito;
import org.testng.Assert;
diff --git a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULSymbolQueryOracleTest.java b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULSymbolQueryOracleTest.java
index 4fa2b6f729..acaeb39343 100644
--- a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULSymbolQueryOracleTest.java
+++ b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SULSymbolQueryOracleTest.java
@@ -18,10 +18,10 @@
import java.util.Random;
import de.learnlib.driver.simulator.MealySimulatorSUL;
-import de.learnlib.example.mealy.ExampleRandomMealy;
import de.learnlib.sul.SUL;
+import de.learnlib.testsupport.example.mealy.ExampleRandomMealy;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.word.Word;
import org.mockito.Mockito;
import org.testng.Assert;
diff --git a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOmegaOracleTest.java b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOmegaOracleTest.java
index b361e6d5e9..03e681e0f0 100644
--- a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOmegaOracleTest.java
+++ b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOmegaOracleTest.java
@@ -18,9 +18,9 @@
import java.util.ArrayList;
import java.util.List;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
import de.learnlib.oracle.membership.SimulatorOmegaOracle.DFASimulatorOmegaOracle;
import de.learnlib.query.OmegaQuery;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
import net.automatalib.automaton.fsa.DFA;
import net.automatalib.word.Word;
import org.testng.Assert;
diff --git a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOracleTest.java b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOracleTest.java
index 01d8822dd7..57c3b02cea 100644
--- a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOracleTest.java
+++ b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/SimulatorOracleTest.java
@@ -19,8 +19,8 @@
import java.util.ArrayList;
import java.util.List;
-import de.learnlib.example.dfa.ExamplePaulAndMary;
import de.learnlib.query.DefaultQuery;
+import de.learnlib.testsupport.example.dfa.ExamplePaulAndMary;
import net.automatalib.automaton.fsa.DFA;
import net.automatalib.word.Word;
import org.testng.Assert;
diff --git a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/StateLocalInputSULSymbolQueryOracleTest.java b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/StateLocalInputSULSymbolQueryOracleTest.java
index c8858819d9..c3b999096a 100644
--- a/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/StateLocalInputSULSymbolQueryOracleTest.java
+++ b/oracles/membership-oracles/src/test/java/de/learnlib/oracle/membership/StateLocalInputSULSymbolQueryOracleTest.java
@@ -19,10 +19,10 @@
import java.util.Random;
import de.learnlib.driver.simulator.StateLocalInputMealySimulatorSUL;
-import de.learnlib.example.mealy.ExampleRandomStateLocalInputMealy;
import de.learnlib.sul.StateLocalInputSUL;
+import de.learnlib.testsupport.example.mealy.ExampleRandomStateLocalInputMealy;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.word.Word;
import org.mockito.Mockito;
import org.testng.Assert;
diff --git a/oracles/parallelism/pom.xml b/oracles/parallelism/pom.xml
index ae5b9d47bc..3c878708b7 100644
--- a/oracles/parallelism/pom.xml
+++ b/oracles/parallelism/pom.xml
@@ -28,7 +28,7 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-parallelism</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.oracle.parallelism {
+
+ requires com.google.common;
+ requires de.learnlib.api;
+ requires de.learnlib.oracle.membership;
+ requires de.learnlib.setting;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.common.smartcollection;
+ requires org.checkerframework.checker.qual;
+
+ exports de.learnlib.oracle.parallelism;
+}
diff --git a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/Config.java b/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/Config.java
deleted file mode 100644
index eeaafb5cb1..0000000000
--- a/oracles/parallelism/src/test/java/de/learnlib/filter/cache/configuration/Config.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright (C) 2013-2024 TU Dortmund University
- * This file is part of LearnLib, http://www.learnlib.de/.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package de.learnlib.filter.cache.configuration;
-
-import java.util.Random;
-
-import de.learnlib.driver.simulator.MealySimulatorSUL;
-import de.learnlib.driver.simulator.StateLocalInputMealySimulatorSUL;
-import de.learnlib.filter.statistic.oracle.DFACounterOracle;
-import de.learnlib.filter.statistic.oracle.MealyCounterOracle;
-import de.learnlib.filter.statistic.oracle.MooreCounterOracle;
-import de.learnlib.filter.statistic.sul.ResetCounterSUL;
-import de.learnlib.filter.statistic.sul.ResetCounterStateLocalInputSUL;
-import de.learnlib.oracle.membership.DFASimulatorOracle;
-import de.learnlib.oracle.membership.MealySimulatorOracle;
-import de.learnlib.oracle.membership.MooreSimulatorOracle;
-import de.learnlib.sul.SUL;
-import de.learnlib.sul.StateLocalInputSUL;
-import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.fsa.DFA;
-import net.automatalib.automaton.transducer.CompactMealy;
-import net.automatalib.automaton.transducer.CompactMoore;
-import net.automatalib.automaton.transducer.MealyMachine;
-import net.automatalib.automaton.transducer.MooreMachine;
-import net.automatalib.util.automaton.random.RandomAutomata;
-
-public final class Config {
-
- public static final Alphabet
+ * <dependency>
+ * <groupId>de.learnlib</groupId>
+ * <artifactId>learnlib-property-oracles</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
*/
-package de.learnlib.algorithm.kv;
+open module de.learnlib.oracle.property {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires org.checkerframework.checker.qual;
+ requires org.slf4j;
+
+ requires static de.learnlib.tooling.annotation;
+
+ exports de.learnlib.oracle.property;
+}
diff --git a/oracles/property-oracles/src/test/java/de/learnlib/oracle/property/MealyPropertyOracleTest.java b/oracles/property-oracles/src/test/java/de/learnlib/oracle/property/MealyPropertyOracleTest.java
index 12e07a719f..9a7aa52349 100644
--- a/oracles/property-oracles/src/test/java/de/learnlib/oracle/property/MealyPropertyOracleTest.java
+++ b/oracles/property-oracles/src/test/java/de/learnlib/oracle/property/MealyPropertyOracleTest.java
@@ -17,7 +17,6 @@
import java.util.function.Function;
-import de.learnlib.example.mealy.ExampleTinyMealy;
import de.learnlib.oracle.EmptinessOracle.MealyEmptinessOracle;
import de.learnlib.oracle.InclusionOracle.MealyInclusionOracle;
import de.learnlib.oracle.LassoEmptinessOracle.MealyLassoEmptinessOracle;
@@ -30,10 +29,11 @@
import de.learnlib.oracle.membership.MealySimulatorOracle;
import de.learnlib.oracle.membership.SimulatorOmegaOracle.MealySimulatorOmegaOracle;
import de.learnlib.query.DefaultQuery;
+import de.learnlib.testsupport.example.mealy.ExampleTinyMealy;
import net.automatalib.alphabet.Alphabet;
-import net.automatalib.alphabet.Alphabets;
-import net.automatalib.automaton.transducer.CompactMealy;
+import net.automatalib.alphabet.impl.Alphabets;
import net.automatalib.automaton.transducer.MealyMachine;
+import net.automatalib.automaton.transducer.impl.CompactMealy;
import net.automatalib.modelchecker.ltsmin.LTSminUtil;
import net.automatalib.modelchecker.ltsmin.LTSminVersion;
import net.automatalib.modelchecker.ltsmin.ltl.LTSminLTLIOBuilder;
diff --git a/pom.xml b/pom.xml
index c747f23452..45627b027b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -209,7 +209,7 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib.testsupport</groupId>
+ * <artifactId>learnlib-learner-it-support</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.testsupport.it {
+
+ requires de.learnlib.api;
+ requires de.learnlib.common.util;
+ requires de.learnlib.driver.simulator;
+ requires de.learnlib.oracle.membership;
+ requires de.learnlib.oracle.equivalence;
+ requires de.learnlib.testsupport.example;
+ requires net.automatalib.api;
+ requires net.automatalib.core;
+ requires net.automatalib.util;
+ requires org.slf4j;
+ requires org.testng;
+
+ exports de.learnlib.testsupport.it.learner;
+}
diff --git a/test-support/learning-examples/pom.xml b/test-support/learning-examples/pom.xml
index 5a526ee09a..93e2de5b66 100644
--- a/test-support/learning-examples/pom.xml
+++ b/test-support/learning-examples/pom.xml
@@ -29,7 +29,7 @@ limitations under the License.
+ * <dependency>
+ * <groupId>de.learnlib.testsupport</groupId>
+ * <artifactId>learnlib-learning-examples</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.testsupport.example {
+
+ requires de.learnlib.api;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires net.automatalib.serialization.learnlibv2;
+ requires net.automatalib.util;
+ requires org.checkerframework.checker.qual;
+ requires org.slf4j;
+
+ exports de.learnlib.testsupport.example;
+ exports de.learnlib.testsupport.example.dfa;
+ exports de.learnlib.testsupport.example.mealy;
+ exports de.learnlib.testsupport.example.moore;
+ exports de.learnlib.testsupport.example.sba;
+ exports de.learnlib.testsupport.example.spa;
+ exports de.learnlib.testsupport.example.spmm;
+ exports de.learnlib.testsupport.example.sst;
+ exports de.learnlib.testsupport.example.vpa;
+}
diff --git a/test-support/learning-examples/src/test/java/de/learnlib/example/dfa/DFAExamplesTest.java b/test-support/learning-examples/src/test/java/de/learnlib/example/dfa/DFAExamplesTest.java
index 30d718f41c..82faf3679f 100644
--- a/test-support/learning-examples/src/test/java/de/learnlib/example/dfa/DFAExamplesTest.java
+++ b/test-support/learning-examples/src/test/java/de/learnlib/example/dfa/DFAExamplesTest.java
@@ -15,6 +15,7 @@
*/
package de.learnlib.example.dfa;
+import de.learnlib.testsupport.example.dfa.DFABenchmarks;
import org.testng.Assert;
import org.testng.annotations.Test;
diff --git a/test-support/test-support/pom.xml b/test-support/test-support/pom.xml
index 5069deb572..43d7c2fc29 100644
--- a/test-support/test-support/pom.xml
+++ b/test-support/test-support/pom.xml
@@ -17,12 +17,33 @@
+ * <dependency>
+ * <groupId>de.learnlib.testsupport</groupId>
+ * <artifactId>learnlib-test-support</artifactId>
+ * <version>${version}</version>
+ * </dependency>
+ *
+ */
+open module de.learnlib.testsupport {
+
+ requires com.google.common;
+ requires de.learnlib.api;
+ requires de.learnlib.common.util;
+ requires de.learnlib.driver.simulator;
+ requires de.learnlib.oracle.membership;
+ requires de.learnlib.testsupport.example;
+ requires net.automatalib.api;
+ requires net.automatalib.common.util;
+ requires net.automatalib.core;
+ requires net.automatalib.util;
+ requires org.checkerframework.checker.qual;
+ requires org.mockito;
+ requires org.testng;
+ requires xstream;
+
+ exports de.learnlib.testsupport;
+}