·
4 commits
to develop
since this release
Added
- AutomataLib now supports JPMS modules. Many of the artifacts now provide a
module-info
descriptor with the exception ofautomata-brics
andautomata-jung-visualizer
which do not have modular dependencies and only provide anAutomatic-Module-Name
in their respectiveMANIFEST.MF
s. 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
TabakovVardiRandomAutomata
that 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
ValmariInitializers
andValmariExtractors
for, 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-core
artifact whose packages have been extended by a.impl
suffix. 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#toGrowingAlphabetOrThrowException
method has been moved toAlphabet#asGrowingAlphabetOrThrowException
so that one does not require anautomata-core
dependency for a simple cast. - The
AutomatonBuilderImpl#withStateProperty
method has had its parameter order flipped. - The
AWUtil
class has been moved fromnet.automatalib.common.util.array
tonet.automatalib.common.smartcollection
(in theautomata-commons-smartcollections
artifact). - The
ArrayStorage
andArrayUtil
classes have been moved fromnet.automatalib.common.smartcollection
tonet.automatalib.common.util.array
(in theautomata-commons-util
artifact). CollectionsUtil#allTuples
has been moved toIterableUtil#allTuples
.CollectionsUtil#cartesianProduct
has been moved toIterableUtil#cartesianProduct
.CollectionsUtil
has been renamed toCollectionUtil
.- The
DirectPowersetDTS
class has been renamed toPowersetView
. - The
FormatException
is 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 theFormatException
instead of leaking implementation details (such as theParseException
s generated by JavaCC). - The
MutableGraph
class has been aligned with itsMutableAutomaton
counterpart in that we no longer force nullable edge properties (see removed section). Furthermore the graph implementations have been renamed accordingly:{,Abstract}Compact{,Bidi}Graph
has been renamed to{,Abstract}CompactUniversal{,Bidi}Graph
.CompactGraph
now is a graph with void node properties and edge properties, i.e., it only stores adjacency information.
OneSEVPAMinimizer
has been moved fromnet.automatalib.util.minimizer
tonet.automatalib.util.automaton.minimizer
.- The
PaigeTarjanMinimization
class (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)HopcroftMinimizer
class. - 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}HypothesisState
methods 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
ResizingArrayStorage
class has been merged withArrayStorage
. - The
SimpleMapGraph
class no longer implementsShrinkableGraph
since it cannot correctly implementcreateDynamicNodeMapping()
. - The
Visualization
factory has been moved from theautomata-core
artifact to theautomata-api
artifact. Furthermore, the previousDummyVP
has been replaced with aNoopVP
that 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-settings
module. - The
net:automatalib.tooling:automata-build-tools
module has been renamed tonet.automatalib:automata-build-config
.
Removed
- The
BlockAutomaton
has 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 theAutomata
class. - The method
Covers#incrementalStructuralCover
has 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#incrementalCover
instead. - The method
DeterministicEquivalenceTest#findSeparatingWordLarge
has been removed. The normalfindSeparatingWord
method now correctly adapts to various sizes. - The methods
xor
,impl
,equiv
, andcombine
ofNFAs
have 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 anull
property, you may denote your edge property type as@Nullable
and 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#powersetView
instead.TAFParseDiagnosticListener
has been removed. Reporting is now done via (slf4j) logging.- The
net.automatalib:automata-serialization-core
artifact has been dropped. Its contents are now part of thenet.automatalib:automata-api
artifact.
Fixed
- Fixed a bug in
SBAs#toCFMPS
which would allow the returned view to reach a final node on a non-return symbol. - Fixed (another) inconsistency bug in
Incremental*DAGBuilder
s. - The
AUTParser
now correctly reads non-deterministic automata. - The
TAFParsers
now correctly support wildcard transition definitions for DFAs.