# Changelog¶

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

## Unreleased¶

### Added¶

- Support for ECOS 2.0.7.

## 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`

.