The package is designed to be easy to use while allowing any advanced tasks. It
is not meant to be a black-box optimization tool. You’ll have to carefully
design your solver. In exchange you’ll get full control of what the package
does for you, without the pain of rewriting the proximity operators and the
solvers and with the added benefit of tested algorithms. With this package, you
can focus on your problem and the best way to solve it rather that the details
of the algorithms. It comes with the following solvers:

Gradient descent

Forward-backward splitting algorithm (FISTA, ISTA)

Douglas-Rachford splitting algorithm

Generalized forward-backward

Monotone+Lipschitz forward-backward-forward primal-dual algorithm

Projection-based primal-dual algorithm

Moreover, the following acceleration schemes are included:

FISTA acceleration scheme

Backtracking based on a quadratic approximation of the objective

Regularized nonlinear acceleration (RNA)

To compose your objective, you can either define your custom functions (which
should implement an evaluation method and a gradient or proximity method) or
use one of the followings:

L1-norm

L2-norm

TV-norm

Nuclear-norm

Projection on the L2-ball

Following is a typical usage example who solves an optimization problem
composed by the sum of two convex functions. The functions and solver objects
are first instantiated with the desired parameters. The problem is then solved
by a call to the solving function.