Skip to content

automatalib-0.12.0

Latest
Compare
Choose a tag to compare
@mtf90 mtf90 released this 04 Feb 15:40
· 4 commits to develop since this release

Full changelog

Added

  • AutomataLib now supports JPMS modules. Many of the artifacts now provide a module-info descriptor with the exception of automata-brics and automata-jung-visualizer which do not have modular dependencies and only provide an Automatic-Module-Name in their respective MANIFEST.MFs. As a consequence of this, the distribution artifacts (for Maven-less environments) also only provide an Automatic-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 and ValmariExtractors 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 to Alphabet#asGrowingAlphabetOrThrowException so that one does not require an automata-core dependency for a simple cast.
  • The AutomatonBuilderImpl#withStateProperty method has had its parameter order flipped.
  • The AWUtil class has been moved from net.automatalib.common.util.array to net.automatalib.common.smartcollection (in the automata-commons-smartcollections artifact).
  • The ArrayStorage and ArrayUtil classes have been moved from net.automatalib.common.smartcollection to net.automatalib.common.util.array (in the automata-commons-util artifact).
  • CollectionsUtil#allTuples has been moved to IterableUtil#allTuples.
  • CollectionsUtil#cartesianProduct has been moved to IterableUtil#cartesianProduct.
  • CollectionsUtil has been renamed to CollectionUtil.
  • The DirectPowersetDTS class has been renamed to PowersetView.
  • 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 the FormatException instead of leaking implementation details (such as the ParseExceptions generated by JavaCC).
  • The MutableGraph class has been aligned with its MutableAutomaton 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 from net.automatalib.util.minimizer to net.automatalib.util.automaton.minimizer.
  • The PaigeTarjanMinimization class (including all supporting classes such as PaigeTarjanInitializers) 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 to RecursiveADSNode#{get,set}State. Furthermore, getState() and getSymbol() no longer return null but throw an UnsupportedOperationException in case of an illegal access.
  • The ResizingArrayStorage class has been merged with ArrayStorage.
  • The SimpleMapGraph class no longer implements ShrinkableGraph since it cannot correctly implement createDynamicNodeMapping().
  • The Visualization factory has been moved from the automata-core artifact to the automata-api artifact. Furthermore, the previous DummyVP has been replaced with a NoopVP 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 the java.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 to net.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 the Automata 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 use Covers#incrementalCover instead.
  • The method DeterministicEquivalenceTest#findSeparatingWordLarge has been removed. The normal findSeparatingWord method now correctly adapts to various sizes.
  • The methods xor, impl, equiv, and combine of NFAs 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 a null property, you may denote your edge property type as @Nullable and use connect(N source, N target, EP property) accordingly. The same goes for MutableGraph's IntAbstraction.
  • SimpleTS#getSuccessors(S state, Iterable<? extends I> input) has been removed. In order to traverse a (non-deterministic) transition system, use TransitionSystem#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 the net.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*DAGBuilders.
  • The AUTParser now correctly reads non-deterministic automata.
  • The TAFParsers now correctly support wildcard transition definitions for DFAs.