automatalib-0.12.0
·
52 commits
to develop
since this release
Added
- AutomataLib now supports JPMS modules. Many of the artifacts now provide a
module-infodescriptor with the exception ofautomata-bricsandautomata-jung-visualizerwhich do not have modular dependencies and only provide anAutomatic-Module-Namein their respectiveMANIFEST.MFs. As a consequence of this, the distribution artifacts (for Maven-less environments) also only provide anAutomatic-Module-Name. Note that while this is a Java 9+ feature, AutomataLib still supports Java 8 byte code for the remaining class files. - Added
TabakovVardiRandomAutomatathat allows for creating Tabakov-Vardi random automata, in particular, NFAs (thanks to @jn1z). - Added (de-) serializers for the BA format supported by tools such as SPOT, RABIT, Walnut, etc. (thanks to @jn1z).
- Added Valmari's algorithm for solving the coarsest relational partition problem in O(m + log n). This includes utility classes such as
ValmariInitializersandValmariExtractorsfor, e.g., convenient quotienting of NFAs via bi-similarity (thanks to @mtf90).
Changed
- The JPMS support introduces several changes:
- You now require at least a JDK 11 to build AutomataLib.
- 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 AutomataLib documentation on JDK 8 builds.
- Split packages had to be refactored. This mainly concerns code from the
automata-coreartifact whose packages have been extended by a.implsuffix. This somewhat reverts the refactorings of the previous release (sorry for the back and forth) but since it only affects import statements, it should be fairly easy to address with IDE automation.
- The
Alphabets#toGrowingAlphabetOrThrowExceptionmethod has been moved toAlphabet#asGrowingAlphabetOrThrowExceptionso that one does not require anautomata-coredependency for a simple cast. - The
AutomatonBuilderImpl#withStatePropertymethod has had its parameter order flipped. - The
AWUtilclass has been moved fromnet.automatalib.common.util.arraytonet.automatalib.common.smartcollection(in theautomata-commons-smartcollectionsartifact). - The
ArrayStorageandArrayUtilclasses have been moved fromnet.automatalib.common.smartcollectiontonet.automatalib.common.util.array(in theautomata-commons-utilartifact). CollectionsUtil#allTupleshas been moved toIterableUtil#allTuples.CollectionsUtil#cartesianProducthas been moved toIterableUtil#cartesianProduct.CollectionsUtilhas been renamed toCollectionUtil.- The
DirectPowersetDTSclass has been renamed toPowersetView. - The
FormatExceptionis now a checked exception because we can reasonably expect clients to recover from this error. Furthermore, all parsing-related code has been aligned to use theFormatExceptioninstead of leaking implementation details (such as theParseExceptions generated by JavaCC). - The
MutableGraphclass has been aligned with itsMutableAutomatoncounterpart in that we no longer force nullable edge properties (see removed section). Furthermore the graph implementations have been renamed accordingly:{,Abstract}Compact{,Bidi}Graphhas been renamed to{,Abstract}CompactUniversal{,Bidi}Graph.CompactGraphnow is a graph with void node properties and edge properties, i.e., it only stores adjacency information.
OneSEVPAMinimizerhas been moved fromnet.automatalib.util.minimizertonet.automatalib.util.automaton.minimizer.- The
PaigeTarjanMinimizationclass (including all supporting classes such asPaigeTarjanInitializers) has been removed because, despite its name, the class never implemented Paige-Tarjan's algorithm for solving the relational coarsest partition problem but the functional one instead. Most of the previous functionality has been migrated to the (now correctly named)HopcroftMinimizerclass. - The serializers have been overhauled to allow for better integration of custom automaton types (especially when parsing). Some of the changes introduce new factory methods which may require some refactoring but the previous functionality is still available. As a part of this streamlining, many parsers no longer automatically un-compress or buffer the input streams to reduce overhead. The need for this can be determined best where the streams are created (in user-land).
- The
RecursiveADSNode#{get,set}HypothesisStatemethods have been renamed toRecursiveADSNode#{get,set}State. Furthermore,getState()andgetSymbol()no longer return null but throw an UnsupportedOperationException in case of an illegal access. - The
ResizingArrayStorageclass has been merged withArrayStorage. - The
SimpleMapGraphclass no longer implementsShrinkableGraphsince it cannot correctly implementcreateDynamicNodeMapping(). - The
Visualizationfactory has been moved from theautomata-coreartifact to theautomata-apiartifact. Furthermore, the previousDummyVPhas been replaced with aNoopVPthat does not show a swing window anymore when no proper VisualizationProvider is configured but instead logs an error message. This allows us to drop thejava.desktop(module) dependency for headless setups and only require it in actual visualizers (DOT, JUNG, etc.). - AutomataLib's settings have been carved out in a separate
automata-commons-settingsmodule. - The
net:automatalib.tooling:automata-build-toolsmodule has been renamed tonet.automatalib:automata-build-config.
Removed
- The
BlockAutomatonhas been removed from Béal-Crochemore's minimization algorithm. The class never was a full automaton (in the AutomataLib sense) and could not become one without access to the original automaton at which point the transformations are the same as already implemented in theAutomataclass. - The method
Covers#incrementalStructuralCoverhas been removed because it is not possible to correctly compute the set without a distinction between state cover and transition cover elements. Users may useCovers#incrementalCoverinstead. - The method
DeterministicEquivalenceTest#findSeparatingWordLargehas been removed. The normalfindSeparatingWordmethod now correctly adapts to various sizes. - The methods
xor,impl,equiv, andcombineofNFAshave been removed since the product automaton constructions do not correspond to the respective language operations. - The method
MutableGraph#connect(N source, N target)has been removed. If you want to explicitly set anullproperty, you may denote your edge property type as@Nullableand useconnect(N source, N target, EP property)accordingly. The same goes forMutableGraph'sIntAbstraction. SimpleTS#getSuccessors(S state, Iterable<? extends I> input)has been removed. In order to traverse a (non-deterministic) transition system, useTransitionSystem#powersetViewinstead.TAFParseDiagnosticListenerhas been removed. Reporting is now done via (slf4j) logging.- The
net.automatalib:automata-serialization-coreartifact has been dropped. Its contents are now part of thenet.automatalib:automata-apiartifact.
Fixed
- Fixed a bug in
SBAs#toCFMPSwhich would allow the returned view to reach a final node on a non-return symbol. - Fixed (another) inconsistency bug in
Incremental*DAGBuilders. - The
AUTParsernow correctly reads non-deterministic automata. - The
TAFParsersnow correctly support wildcard transition definitions for DFAs.