# Changelog¶

This file documents major changes to PICOS. The format is based on Keep a Changelog.

## Unreleased¶

### Added¶

Support for MOSEK 9.

Support for ECOS 2.0.7.

Support for multiple subsystems with

`partial_trace`

.Possibility to use

`picos.sum`

to sum over the elements of a single multidimensional expression.

## 1.2.0 - 2019-01-11¶

### Important¶

`A scalar expression's value`

and`a scalar constraint's dual`

are returned as scalar types as opposed to 1×1 matrices.The dual value returned for rotated second order cone constraints is now a proper member of the dual cone (which equals the primal cone up to a factor of ). Previously, the dual of an equivalent second order cone constraint was returned.

The Python 2/3 compatibility library

`six`

is no longer a dependency.

### Added¶

Support for the ECOS solver.

Experimental support for MOSEK’s new Fusion API.

Full support for exponential cone programming.

A production testing framework featuring around 40 novel optimization test cases that allows quick selection of tests, solvers, and solver options.

A “glyph” system that allows the user to adjust the string representations of future expressions and constraints. For instance,

`picos.latin1()`

disables use of unicode symbols.Support for symmetric variables with all solvers, even if they do not support semidefinite programming.

### Changed¶

Solver implementations each have a source file of their own, and a common interface that makes implementing new solvers easier.

Likewise, constraint implementations each have a source file of their own.

The implementations of CPLEX, Gurobi, MOSEK and SCIP have been rewritten.

Solver selection takes into account how well a problem is supported, distinguishing between native, secondary, experimental and limited support.

Unsupported operations on expressions now produce meaningful exceptions.

`add_constraint`

and`add_list_of_constraints`

always return the constraints passed to them.`add_list_of_constraints`

and`picos.sum`

find a short string representation automatically.

### Removed¶

The old production testing script.

Support for the SDPA solver.

Support for sequential quadratic programming.

The options

`convert_quad_to_socp_if_needed`

,`pass_simple_cons_as_bound`

,`return_constraints`

,`handleBarVars`

,`handleConeVars`

and`smcp_feas`

.Support for GLPK and MOSEK through CVXOPT.

### Fixed¶

Performance issues when exporting variable bounds to CVXOPT.

Hadamard product involving complex matrices.

Adding constant terms to quadratic expression.

Incorrect or redundant expression string representations.

GLPK handling of the default

`maxit`

option.Miscellaneous solver-specific bugs in the solvers that were re-implemented.

## 1.1.3 - 2018-10-05¶

### Added¶

Support for the solvers GLPK and SCIP.

PICOS packages on Anaconda Cloud.

PICOS packages in the Arch Linux User Repository.

### Changed¶

The main repository has moved to GitLab.

Releases of packages and documentation changes are automated and thus more frequent. In particular, post release versions are available.

Test bench execution is automated for greater code stability.

Improved test bench output.

Improved support for the SDPA solver.

`partial_trace`

can handle rectangular subsystems.The documentation was restructured; examples were converted to Python 3.

### Fixed¶

Upper bounding the norm of a complex scalar.

Multiplication with a complex scalar.

A couple of Python 3 specific errors, in particular when deleting constraints.

All documentation examples are reproducible with the current state of PICOS.

## 1.1.2 - 2016-07-04¶

### Added¶

Ability to dynamically add and remove constraints, see the documentation on constraint deletion.

Option

`pass_simple_cons_as_bound`

, see below.

### Changed¶

Improved efficiency when processing large expressions.

Improved support for the SDPA solver.

`add_constraint`

returns a handle to the constraint when the option`return_constraints`

is set.New signature for the function

`partial_transpose`

, which can now transpose arbitrary subsystems from a kronecker product.PICOS no longer turns constraints into variable bounds, unless the new option

`pass_simple_cons_as_bound`

is enabled.

### Fixed¶

Minor bugs with complex expressions.

## 1.1.1 - 2015-08-29¶

### Added¶

Support for the SDPA solver.

Partial trace of an affine expression, see

`partial_trace`

.

### Changed¶

Improved PEP 8 compliance.

### Fixed¶

Compatibility with Python 3.

## 1.0.2 - 2015-01-30¶

### Added¶

Ability to read and write problems in conic benchmark format.

Support for inequalities involving the sum of the largest or smallest elements of an affine expression, see

`sum_k_largest`

and`sum_k_smallest`

.Support for inequalities involving the sum of the largest or smallest eigenvalues of a symmetric matrix, see

`sum_k_largest_lambda`

,`sum_k_smallest_lambda`

,`lambda_max`

and`lambda_min`

.Support for inequalities involving the -norm of an affine expression, see

`norm`

.Support for equalities involving complex coefficients.

New

`variable type`

for antisymmetric matrix variables:`antisym`

.Set expressions that affine expressions can be constrained to be an element of, see

`ball`

,`simplex`

and`truncated_simplex`

.Shorthand functions

`maximize`

and`minimize`

to specify the objective function of a problem and solve it.Hadamard (elementwise) product of affine expression, as an overload of the

`^`

operator, read the tutorial on overloads.Partial transposition of an aAffine Expression, see

`partial_transpose`

and`AffinExp.Tx`

.

### Fixed¶

Scalar product of hermitian matrices.

Conjugate of a complex expression.

## 1.0.1 - 2014-08-27¶

### Added¶

Support for semidefinite programming over the complex domain, see the documentation on complex problems.

Helper function to input (multicommodity) graph flow problems, see the tutorial on flow constraints.

Additional

`coef`

argument to`tracepow`

, to represent constraints of the form .

### Changed¶

Significantly improved slicing performance for

`affine expressions`

.Improved performance of

`retrieve_matrix`

.Improved performance when retrieving primal solution from CPLEX.

The documentation received an overhaul.

## 1.0.0 - 2013-07-19¶

### Added¶

Ability to express rational powers of affine expressions with the

`**`

operator, traces of matrix powers with`picos.tracepow`

, (generalized) p-norms with`picos.norm`

and -th roots of a determinant with`picos.detrootn`

.Ability to specify variable bounds directly rather than by adding constraints, see

`add_variable`

,`set_lower()`

,`set_upper()`

,`set_sparse_lower()`

and`set_sparse_upper()`

.Problem dualization, see

`dualize`

.Option

`solve_via_dual`

which controls passing the dual problem to the solver instead of the primal problem. This can result in a significant speedup for certain problems.Semidefinite programming interface for MOSEK 7.0.

Options

`handleBarVars`

and`handleConeVars`

to customize how SOCPs and SDPs are passed to MOSEK. When these are set to`True`

, PICOS tries to minimize the number of variables of the MOSEK instance.

### Changed¶

If the chosen solver supports this, updated problems will be partially re-solved instead of solved from scratch.

### Removed¶

Option

`onlyChangeObjective`

.

## 0.1.3 - 2013-04-17¶

### Added¶

A

`geomean`

function to construct geometric mean inequalities that will be cast as SOCP constraints.Options

`uboundlimit`

and`lboundlimit`

to tell CPLEX to stop the search as soon as the given threshold is reached for the upper and lower bound, respectively.Option

`boundMonitor`

to inspect the evolution of CPLEX lower and upper bounds.Ability to use the weak inequality operators as an alias for the strong ones.

### Fixed¶

Access to dual values of fixed variables with CPLEX.

Evaluation of constant affine expressions with a zero coefficient.

Number of constraints not being updated in

`remove_constraint`

.

## 0.1.2 - 2013-01-10¶

### Fixed¶

Writing SDPA files. The lower triangular part of the constraint matrix was written instead of the upper triangular part.

A wrongly raised

`IndexError`

from`remove_constraint`

.