# Julia API Reference

## Solver and main API

`Clarabel.Solver`

— Type`Solver{T <: AbstractFloat}()`

Initializes an empty Clarabel solver that can be filled with problem data using:

`setup!(solver, P, q, A, b, cones, [settings]).`

`Clarabel.setup!`

— Function`setup!(solver, P, q, A, b, cones, [settings])`

Populates a `Solver`

with a cost function defined by `P`

and `q`

, and one or more conic constraints defined by `A`

, `b`

and a description of a conic constraint composed of cones whose types and dimensions are specified by `cones.`

The solver will be configured to solve the following optimization problem:

```
min 1/2 x'Px + q'x
s.t. Ax + s = b, s ∈ K
```

All data matrices must be sparse. The matrix `P`

is assumed to be symmetric and positive semidefinite, and only the upper triangular part is used.

The cone `K`

is a composite cone. To define the cone the user should provide a vector of cone specifications along with the appropriate dimensional information. For example, to generate a cone in the nonnegative orthant followed by a second order cone, use:

```
cones = [Clarabel.NonnegativeConeT(dim_1),
Clarabel.SecondOrderConeT(dim_2)]
```

If the argument 'cones' is constructed incrementally, the should should initialize it as an empty array of the supertype for all allowable cones, e.g.

```
cones = Clarabel.SupportedCone[]
push!(cones,Clarabel.NonnegativeConeT(dim_1))
...
```

The optional argument `settings`

can be used to pass custom solver settings:

```
settings = Clarabel.Settings(verbose = true)
setup!(model, P, q, A, b, cones, settings)
```

To solve the problem, you must make a subsequent call to `solve!`

`Clarabel.solve!`

— Function`solve!(solver)`

Computes the solution to the problem in a `Clarabel.Solver`

previously defined in `setup!`

.

## Supported Cone Types

`Clarabel.SupportedCone`

— Type`SupportedCone`

An abstract type use by the Clarabel API used when passing cone specifications to the solver `setup!`

. The currently supported concrete types are:

`ZeroConeT`

: The zero cone. Used to define equalities.`NonnegativeConeT`

: The nonnegative orthant.`SecondOrderConeT`

: The second order / Lorentz / ice-cream cone.`PSDTriangleConeT`

: The positive semidefinite cone (triangular format).`ExponentialConeT`

: The exponential cone (in R^3)`PowerConeT`

: The power cone with power α (in R^3)

## Solver Status

`Clarabel.SolverStatus`

— Type`SolverStatus`

An Enum of of possible conditions set by `solve!`

.

If no call has been made to `solve!`

, then the `SolverStatus`

is:

`UNSOLVED`

: The algorithm has not started.

Otherwise:

`SOLVED`

: Solver terminated with a solution.`PRIMAL_INFEASIBLE`

: Problem is primal infeasible. Solution returned is a certificate of primal infeasibility.`DUAL_INFEASIBLE`

: Problem is dual infeasible. Solution returned is a certificate of dual infeasibility.`ALMOST_SOLVED`

: Solver terminated with a solution (reduced accuracy).`ALMOST_PRIMAL_INFEASIBLE`

: Problem is primal infeasible. Solution returned is a certificate of primal infeasibility (reduced accuracy).`ALMOST_DUAL_INFEASIBLE`

: Problem is dual infeasible. Solution returned is a certificate of dual infeasibility (reduced accuracy).`MAX_ITERATIONS`

: Iteration limit reached before solution or infeasibility certificate found.`MAX_TIME`

: Time limit reached before solution or infeasibility certificate found.`NUMERICAL_ERROR`

: Solver terminated with a numerical error.`INSUFFICIENT_PROGRESS`

: Solver terminated due to lack of progress.