# 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> import 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.

Dependency | Features |
---|---|

`Documenter` | Building the package's documentation. |

`LaTeXStrings` | Input 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.

Dependency | Features |
---|---|

`ExponentialUtilities` | Utility functions for exponential integrators from the SciML scientific machine learning ecosystem. |

`Expokit` | Julia 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.

Dependency | Features |
---|---|

`IntervalConstraintProgramming` | Conservative polyhedral approximation of a region defined implicitly via nonlinear constraints. |

`IntervalMatrices` | Set operations that involve matrices whose coefficients are intervals. |

`TaylorModels` | Taylor 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.

Dependency | Features |
---|---|

`Optim` | Optimization 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.

Dependency | Features |
---|---|

`Polyhedra` | Concrete polyhedra library. |

`CDDLib` | Polyhedral computations backend. |

## Random sampling and triangulation

Dependency | Features |
---|---|

`Distributions` | Random sampling. |

`MiniQhull` | Voronoi-Delaunay triangulation of `LazySets` types. |

## Special array types

Dependency | Features |
---|---|

`StaticArrays` | Statically defined arrays. |

## Symbolic utilities

Dependency | Features |
---|---|

`Symbolics` | Create 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.

Dependency | Features |
---|---|

`Makie` | Mainly for 3D and interactive plots. |

`Plots` | Mainly 2D plots. |