Optional Features

This section summarizes each optional dependency and the features available when used together with LazySets.jl. Internally, optional dependencies in Julia are handled with the package Requires.jl.

Installing all dependencies

Use the following command to install all optional dependencies. Installing all optional dependencies is required if you want to run the full test suite and build the documentation locally.

julia> using Pkg; Pkg.add(["CDDLib",
                           "Distributions",
                           "Documenter",
                           "Expokit",
                           "ExponentialUtilities",
                           "IntervalMatrices",
                           "Makie",
                           "Optim",
                           "Polyhedra",
                           "RecipesBase",
                           "StaticArrays",
                           "Symbolics",
                           "TaylorModels"])

Documentation

To build the project's documentation locally you need to install Documenter.jl.

DependencyFeatures
DocumenterBuilding the package's documentation.
LaTeXStringsInput and display of LaTeX equation strings, used in plots.

Exponential backends

Exponential backends are used to compute the action of matrix exponentials over sets lazily, e.g. $\rho(d, e^{A \delta} X)$ for $A$ large and sparse.

DependencyFeatures
ExponentialUtilitiesUtility functions for exponential integrators from the SciML scientific machine learning ecosystem.
ExpokitJulia implementation of EXPOKIT routines.

Interval methods

For validated numerics, we build upon the Julia ecosystem JuliaIntervals. The package IntervalArithmetic.jl, which is a hard dependency of LazySets, implements rigorous floating-point calculations using interval arithmetic in Julia and is the basis for the implementation of Interval. There are other interval packages that can also be used in conjunction with LazySets and provide additional functionality.

The package IntervalLinearAlgebra is not an optional dependency of LazySets, but these packages can be used in conjunction to compute solution sets of interval linear systems.

DependencyFeatures
IntervalConstraintProgrammingConservative polyhedral approximation of a region defined implicitly via nonlinear constraints.
IntervalMatricesSet operations that involve matrices whose coefficients are intervals.
TaylorModelsTaylor expansion of functions with rigorous interval remainder.

Note: IntervalConstraintProgramming is currently not tested due to compatibility issues.

Optimization algorithms

Some computations require use of external numerical optimization solvers. The modeling language JuMP is loaded by default, together with the GLPK solver for linear programs (LPs). Other solvers can be loaded on-demand, even commercial ones, provided that you have the appropriate license. See JuMP's documentation page on supported solvers for further details.

For other uses, such as line search methods to compute the support function of lazy intersections of certain sets, Optim can be optionally loaded.

DependencyFeatures
OptimOptimization package in pure Julia.

Polyhedral computations

The optional package Polyhedra.jl is required whenever you want to work with concrete polyhedra representations in dimension higher than 2, e.g. to solve the vertex enumeration problem (converting from constraint to vertex representation of a polytope). While Polyhedra implements its own default backend, it is also possible to load external ones, such as cdd through CDDLib.jl. For a list of available polyhedra backends, see the website of the JuliaPolyhedra ecosystem.

DependencyFeatures
PolyhedraConcrete polyhedra library.
CDDLibPolyhedral computations backend.

Random sampling and triangulation

DependencyFeatures
DistributionsRandom sampling.
MiniQhullVoronoi-Delaunay triangulation of LazySets types.

Special array types

DependencyFeatures
StaticArraysStatically defined arrays.

Symbolic utilities

DependencyFeatures
SymbolicsCreate sets using symbolic expressions.

Visualization

As in other Julia packages, the user has to manually install and load the package Plots in order to produce visual results. As a plotting backend we recommend using GR, which is the default backend and is automatically installed together with Plots.

DependencyFeatures
MakieMainly for 3D and interactive plots.
PlotsMainly 2D plots.