v0.1.0, 22.06.2012 -- Initial release. 

v0.1.1, 08.12.2012
     * Picos now interfaces GUROBI !
     * You can specify an initial solution to *warm-start* mixed integer optimizers.
     * Minor bugs with quadratic expressions corrected
     * It's possible to return a reference to a constraint added
       with add_constraint()

v0.1.2, 10.01.13
     bug-fix release, correcting:
     * The write_to_file() function for sparse SDPA files.
       The function was writing the
       coefficients of the lower triangular part
       of the constraint matrices
       instead of the upper triangle.
     * An IndexError occuring with the function
       remove_constraint()

v0.1.3, 17.04.13
     * geomean() function implemented, to handle inequalities involving
       geometric mean and reformulate them as a set of SOCP constraints.
     * Some options ['uboundlimit','lboundlimit'] were added to tell
       CPLEX to stop the computation as soon as a given value for the
       upper bound (or lower bound) is reached.
     * The time used by the solver is now stored in the dictionary
       returned bz solve().
     * It is possible to get the evolution of the lower and upper bounds
       over time, by using the option 'boundMonitor'.
     * The weak inequalities operator can now be used.
     * Minor bugs corrected (access to the duals of fixed variables with CPLEX,
       evaluation of constant affine expressions with a zero coefficient appearing
       in the dict of linear terms, number of constraints is now updated in remove_constraint() )
       
v1.0.0, 19.07.13
     * Semidefinite Programming Interface for MOSEK 7.0 !!!
     * New options ``handleBarVars`` and ``handleConeVars`` to customize how SOCP and SDPs are passed to MOSEK
       (When these options are set to ``True`` , PICOS tries to minimize the number of variables of the
       MOSEK instance).
     * The function dualize() returns the Lagrangian dual of a Problem.
     * The option ``solve_via_dual`` allows the user to pass the dual
       of a problem to a solver, instead of the primal problem itself. This can yield important speed-up for
       certain problems.
     * In addition to the geometric mean function picos.geomean(), it is now possible
       to pass rational powers of affine expressions (through an overload of the ``**`` operator), trace of
       matrix powers with picos.tracepow(), (generalized) p-norms
       with picos.norm(), and nth root of a determinant with
       picos.detrootn(). These functions automatically reformulate the entered inequalities
       as a set of equivalent SOCP or SDP constraints.
     * It is now possible to specify variable bounds directly (rather than adding constraints of the type ``x >= 0`` ).
       This can be done with the Keywords ``lower`` and ``upper`` of the function add_variable() ,
       or by the methods set_lower(), set_upper(), set_sparse_lower(), and set_sparse_upper() of the class Variable.
     * It is now more efficient to update a Problem and resolve it. This is done thanks to the attribute ``passed``
       of the classes Constraint and Variable ,
       that stores which solvers are already aware of a constraint / variable. There is also an
       attribute ``obj_passed`` of the class Problem that lists the solver instances
       where the objective function has already been passed. The option ``onlyChangeObjective`` has been
       deprecated.
       
v1.0.1.dev, 18.05.14
     * Complex Semidefinite Programming.
     * Flow constraints in graphs
     * Improved implementation of *expression slicing* (__getitem__)
     
v 1.0.1, 27.08.14:
     Release fixing the missing functionnalities of the previous *.dev* version:
     * Improved support for complex SDP (access to dual information and correction of a few
       bugs, in particular sum of complex affine expression now work correctly)
     * Flow constraints in graphs, including multicommodity flows.
     * Additional ``coef`` argument in the function tracepow(), in order to represent
       constraints of the form trace(M X^p) >= t.
     * Improved implementation of retrieve_matrix(), which was taking a very long time to
       process large parameters.
     * Improved implementation of the retrieval of optimal primal variables with CPLEX.
       With the previous versions there was an important overhead at the end of the
       solving process to get the optimal values, this is now working much faster. 
     * Nicer documentation.
     
v 1.0.2, 30.01.15:
    Major release with following new functionalities:
     * Support (read and write) for ``.cbf`` problem files (`conic benchmark format <http://cblib.zib.de/>`_ ), which should be the standard for (mixed integer) conic optimization problems, cf. :func:`write_to_file <picos.Problem.write_to_file>` and :func:`import_cbf <picos.tools.import_cbf>` . 
     * Improved support for complex SDP (more efficient implementation of :func:`to_real() <picos.Problem.to_real>` , corrected bug in the implementation of the scalar product for Hermitian matrices and the conjugate of a complex expression, support for equality constraints involving complex coefficients)
     * Support for inequalities involving the sum of k largest elements of an affine expression, or the k largest eigenvalues of a symmetric matrix expression, cf. the functions :func:`sum_k_largest() <picos.tools.sum_k_largest>` , :func:`sum_k_smallest() <picos.tools.sum_k_smallest>` , :func:`sum_k_largest_lambda() <picos.tools.sum_k_largest_lambda>`, :func:`sum_k_smallest_lambda() <picos.tools.sum_k_smallest_lambda>`, :func:`lambda_max() <picos.tools.lambda_max>` and :func:`lambda_min() <picos.tools.lambda_min>` .
     * Support for inequalities involving the :math:`L_{p,q}-` norm of an affine expresison, cf. :func:`norm() <picos.tools.norm>` .
     * New ``vtype`` for antisymmetric matrix variables ( :attr:`vtype <picos.Variable.vtype>` ``= antisym``).
     * Constraints can be specified as membership in a :class:`Set <picos.Set>` . Sets can be created by the functions :func:`ball() <picos.tools.ball>` , :func:`simplex() <picos.tools.simplex>`, and :func:`truncated_simplex() <picos.tools.truncated_simplex>` .
     * New functions :func:`maximize <picos.Problem.maximize>` and :func:`maximize <picos.Problem.minimize>` to specify the objective function of a problem and solve it. 

    And many thanks to `Petter Wittek <http://peterwittek.com/>`_ for the following improvements, who were motivated by the use of PICOS in the package `ncpol2sdpa <http://peterwittek.github.io/ncpol2sdpa/>`_ for optimization over noncommutative polynomials:
     * More efficient implementation of the writer to the sparse - SDPA file format (:func:`write_to_file <picos.Problem.write_to_file>`)
     * Hadamard (elementwise) product of affine expression is implemented, as an overload of the ``^`` operator,   cf. an example :ref:`here <overloads>` .
     * Partial transposition of an Affine Expression, cf. :func:`partial_transpose() <picos.tools.partial_transpose>` or the :attr:`Tx <picos.AffinExp.Tx>` attribute.
     
v 1.1.0, 15.04.15:
    * PICOS is now compatible with **python 3+** (and remains compatible with python 2.6+). Many thanks to `Sergio Callegari <http://www.unibo.it/faculty/sergio.callegari>`_ for this compatibility layer ! If you plan to work with PICOS and python3, think to install the most recent version of your solver (Mosek, Cplex, Gurobi, or Cvxopt). SCIP is not supported in python3+ at this point (but remains supported with python 2.x).
    
    * PICOS is now available on `github <http://github.com/gsagnol/picos>`_.