Release 2.3

This new version introduces concurrency in the library, applied to evolution routines and drawing at the moment. We also offer the ability to add arguments to executables (both C++ and Python) in order to set variables such as concurrency level, drawer to be used or logger verbosity.


  • N: new feature
  • A: addition to a feature
  • C: change to the behavior of a feature
  • F: fixed feature
  • R: removed feature


  • #538 (N) Introduce a concurrency module designed for parallel execution of internal tasks
  • #549 (N) Introduce a Least Recently Used cache utility for holding a limited number of homogeneous objects
  • #559 (N) Introduce an optional ariadne_main.hpp that offers an ariadne_main() function handling all header tasks for an executable
  • #562 (N) Introduce a command line interface class for acquiring CLI input arguments setting logger verbosity, theme and scheduler, along with concurrency, graphics backend and drawer
  • #561 (A) Add Python bindings for TaskManager in order to control concurrency
  • #570 (A) Add Python bindings for GraphicsManager in order to control drawer and graphics backend
  • #571 (A) Add Python bindings for Logger in order to expose (themed) logging
  • #599 (A) Add extra Python bindings for HybridEnclosure, add Python subscripting for ListSet
  • #602 (A) Add extra Python bindings for Enclosure, add Python bindings for Point2d for graphics
  • #605 (A) Add Python bindings for CommandLineInterface, to acquire arguments to a Python script
  • #551 (C) Make VectorFieldEvolver process sets in parallel (when splitting initially or during evolution)
  • #556 (C) Disallow unsafe default value of upper semantics for orbit methods
  • #565 (C) Draw lists of (Labelled/Hybrid)Enclosure in parallel
  • #563 (C) Rename the ‘output’ module into the ‘io’ module to support future classes related to input
  • #566 (C) Make HybridEvolver process sets in parallel (due to either splitting or multiple trajectories)
  • #573 (C) Use an LRU cache for modes in CompositeHybridAutomaton, avoid exhausting a given mode in HybridEvolver before changing mode
  • #580 (C) VectorFieldEvolver, IteratedMapEvolver and HybridEvolver now check that the initial enclosure is consistent
  • #592 (C) Enclosure now uses the global GraphicsManager drawer instead of having a dedicated configuration field
  • #595 (C) Modify examples to use ariadne_main function for simplicity, tutorials are not changed
  • #539 (F) A segmentation fault sometimes would be issued when terminating the executable, due to logging
  • #557 (F) Fix behavior of StopWatch utility for concurrent code, enhance the class for choosing a duration type
  • #567 (F) Fix problem with state_time space creation when state space already contains the ’t’ variable
  • #576 (F) Fix HybridEnclosure state_set() incorrectly working when an auxiliary function is present
  • #578 (F) Fix VectorFieldEvolver not storing the auxiliary mapping to the initial enclosure created from an expression set
  • #581 (F) Fix Enclosure splittings not carrying over the auxiliary mapping
  • #558 (R) Remove unnecessary IteratedMapEvolver::enclosure methods
  • #552 (R) Remove evolve/reach/reach_evolve methods from EvolverInterface, relying on orbit generation only
  • #553 (R) Remove ability to write an evolver object to the standard output, since it was implemented as a fixed string for all evolvers anyway