Revision HistoryΒΆ
- Version 1.12.2 (2017-07-28)
- Changed: Symbolic expression parsing improved.
- Fixed: Chompack-based chordal extension works.
- Fixed: get_item works for cases of moment substitutions.
- Version 1.12.1 (2017-03-16)
- Changed: Removed automated detection of simple moment substitutions.
- Changed: Better handling of monomial substitutions.
- Version 1.12.0 (2016-11-28)
- New: Pass the optional momentsubstitutions= parameter to the get_relaxation method to substitute out specific moments.
- Changed: Warning message is displayed if the equality constraints are linearly dependent.
- Changed: CVXPY support improved, solver parameters passed on correctly. SCS can directly be requested as a solver.
- Fixed: Chordal graph extension works with blank objective functions and commuting variables.
- Fixed: Parallel computations produce weird deadlocks less frequently.
- Version 1.11.1 (2016-08-07)
- Fixed: Major bug in generating localizing matrices with the correct monomials.
- Fixed:
fast_substitute
is able to handle some more extreme forms of commuting monomials.
- Version 1.11.0 (2016-06-23)
- New: Experimental new parallel computation of the moment matrix and the constraints.
- New: CVXPY conversion with
convert_to_cvxpy
. CVXPY is now also a valid solver. - New: The method
get_dual
returns the block in the dual solution corresponding to the requested constraint. - Changed: Deprecated optional parameter
bounds
was removed. - Fixed: Moments are correctly returned even if equalities are removed.
- Fixed: Constants in PICOS conversion are added correctly irrespective of where they are in the matrices.
- Fixed: PICOS conversion handles feasibility problems correctly.
- Fixed: The optional parameter
removeequalities=True
handles equalities of SDP variables correctly.
- Version 1.10.3 (2016-02-26)
- Fixed: Problem with unexpanded moment equality constraints resolved.
- Version 1.10.2 (2016-02-03)
- New: Very efficient substitutions of moment equalities if one side of the equality is the moment of a monomial, and the other side is a constant.
- Version 1.10.1 (2016-01-29)
- Fixed: The moment equalities are removed correctly if asked.
Version 1.10 (2015-12-08)
- New: The function
generate_operators
returns a list of operators from thesympy.physics.quantum
submodule. This is the old behaviour ofgenerate_variables
.- New: The
SdpRelaxation
class is now subscriptable. You can retrieve the value of polynomials in the solved relaxation in such way. Internally, it callsget_xmat_value
withself
.- New: The convenience method
solve()
was added to the classSdpRelaxation
.- New: The convenience method
write_to_file()
was added to the classSdpRelaxation
.- New: The convenience method
save_monomial_index()
was added to the classSdpRelaxation
.- New: The convenience method
find_solution_ranks()
was added to the classSdpRelaxation
. It replaces the previous stand-alonefind_rank_loop()
function.- New: The conversion routines
convert_to_picos
andconvert_to_mosek
are also part of the classsdpRelaxation
.- New: The new method
extract_dual_value()
was added to the classSdpRelaxation
to calculate the inner product of the coefficient matrix of an SDP variable with the dual solution.- New: The class
RdmHierarchy
was added to generate SDPs of the reduced density matrix method. Initial support for 1D spinless, translational invariant systems is included.- New: Better support for the steering hierarchy in a new class
SteeringHierarchy
.- Changed: The function
generate_variables
now returns a list ofsympy.Symbol
variables if commutative variables are requested, and the default is commutative.- Changed: Many unnecessary user-facing functions were removed.
- Changed: The SOS decomposition is now requested with
get_sos_decomposition
from the classSdpRelaxation
, and it returns a list of the SOS polynomials.- Changed: The optional parameter
bounds
forget_relaxation
is deprececated, use the optional parametersmomentinequalities
andmomentequalities
instead.- Changed: Removed
convert_to_picos_extra_moment_matrix
and added optional parameterduplicate_moment_matrix
toconvert_to_picos
to achieve the same effect.- Changed: The chordal extension is now requested as an optional parameter
chordal_extension=True
passed to theget_relaxation
method, and not by specifying it as a hierarchy type in the constructor.- Changed: The Moroder hierarchy is now a class.
- Changed: Small improvements in speed in the substitution routines; unit tests for the substitution routines.
- Changed: The
read_sdpa_out
routine takes an optional argument for a relaxation, and adds the solution to this object if requested.- Changed: Instead of an examples folder, all examples were migrated to the documentation.
- Changed: The symbolic variables which are not to be relaxed are now supplied to the constructor with the optional parameter
parameters
.- Changed: Redundant positive-semidefinite constraint type removed.
- Fixed: PICOS and MOSEK conversion works for complex matrices too (issue #10).
- Fixed: The moment symmetries are correctly calculated for both Hermitian and non-Hermitian variables (issue #9)
Version 1.9 (2015-08-28)
- New: Defining the constraints now also allows using for the symbols
<
,<=
,>=
,>
. Additionally, the functionEq
from SymPy can be used to defined equalities.- New: The function
solve_sdp
also acceptssolver="cvxopt"
to use CVXOPT for solving a relaxation (requires PICOS and CVXOPT).- New:
convert_to_human_readable
function returns the objective function and the moment matrix as a string and a matrix of strings to give a symbolic representation of the problem.- New:
get_next_neighbors
function retrieves the forward neighbors at a given distance of a site or set of sites in a lattice.- New: Much faster substitutions if the right-hand side of the substitution never contains variables that are not in the left-hand side.
- New: Non-unique variables are considered only once in each variable set.
- New: When using
solve_sdp
to solve the relaxation, the solution, its status, and the time it takes to solve are now part of the classSdpRelaxation
.- New: The class
Probability
provides an intuitive way to define quantum probabilities and Bell inequalities.- New: The function
solve_sdp
autodetects available solvers and complains if there is none.- New: The optional parameter
solverparameters
to the functionsolve_sdp
can contain a dictionary of options, with a different set for each of the target solvers.- New: Regression testing framework added.
- Changed: The functions
find_rank_loop
,sos_decomposition
, andget_xmat_value
are no longer required anx_mat
ory_mat
parameter to pass the primal or dual solution. These values are extracted from the solved relaxation. The respective parameters became optional.- Changed: Constant term in objective function is added to the primal and dual values when using the
solve_sdp
function.- Changed: The primal and dual values of the Mosek solution change their signs when using the
solve_sdp
function.- Changed: The verbosity parameter also controls the console output of every solver.
- Changed: Faacets relaxations got their own class
FaacetsRelaxation
.- Fixed: Localizing matrices are built correctly when substitution rules contain polynomials and when the identity operator is not part of the monomial sets.
- Fixed: The function
get_xmat_value
also works in Pypy.
Version 1.8 (2015-05-25)
- New: Complex moment matrices are embedded to as real matrices in the SDPA export and the
solve_sdp
function.- New: Localizing monomials can be fine-tuned by supplying them to
get_relaxation
through the optional parameterlocalizing_monomials
.- New:
solve_sdp
can also solve a problem with Mosek.- New: The function
get_xmat_value
returns the matching value for a monomial from a solution matrix, given the relaxation and the solution.- Changed:
solve_sdp
no longer accepts parameterssolutionmatrix
andsolverexecutable
. All parameters are now passed via the solverparameters dictionary.- Changed: Legacy Picos code removed. Requirement is now Picos >=1.0.2.
- Fixed: Determining degree of polynomial also works when coefficient is complex.
Version 1.7 (2015-03-23)
- New: the function
find_rank_loop
aids the detection of a rank loop.- New: the function
write_to_human_readable
writes the relaxation in a human-readable format.- New: the function
read_sdpa_out
is now exposed to the user, primarily to help in detecting rank loops.- New: the function
save_monomial_index
allows saving the monomial index of a relaxation.- New: support for obtaining the SOS decomposition from a dual solution through the function
sos_decomposition
.- New: optional parameter
psd=[matrix1, matrix2, ..., matrixn]
can be passed toget_relaxation
andprocess_constraints
which contain symbolic matrices that should be positive semidefinite.- New: solution matrices can be returned by
solve_sdp
by passing the optional parametersolutionmatrix=True
. It does not work for diagonal blocks.- New: basic interface for Faacets via the function
get_faacets_relaxation
.- New: PPT constraint can be imposed directly in the Moroder hierarchy by passing the extra parameter
ppt=True
to the constructor.- New: Passing the optional parameter
extramomentmatrices=...
toget_relaxation
allows defining new moment matrices either freely or based on the first one. Basic relations of the elements between the moment matrices can be imposed as strings passed throughinequalites=...
.- Changed: Nieto-Silleras hierarchy is no longer supported through an option. Now constraints have to be manually defined.
- Changed: Monomials are not saved automatically with
verbose=2
.- Fixed: wider range of substitutions supported, including a polynomial on the right-hands side of the substitution.
- Fixed: constraints for fermionic and bosonic systems and Pauli operators.
Version 1.6 (2014-12-22)
- Syntax for passing parameters changed. Only the level of the relaxation is compulsory for obtaining a relaxation.
- Extra parameter for bounds on the variables was added. Syntax is identical to the inequalities. The difference is that the inequalities in the bounds will not be relaxed by localizing matrices.
- Support for chordal graph extension in the commutative case (doi:10.1137/050623802). Pass
hierarchy="npa_chordal"
to the constructor.- It is possible to pass variables which will not be relaxed. Pass
nonrelaxed=[variables]
to the constructor.- It is possible to change the constraints once the moment matrix is generated. Refer to the new function
process_constraints
.- Extra parameter
nsextraobjvars=[]
was added for passing additional variables to the Nieto-Silleras hierarchy. This is important because the top-left elements of the blocks of moment matrices in the relaxation are not one: they add up to one. Hence specifying the last element of a measurement becomes possible with this option. The number of elements in this must match the number of behaviours.- PICOS conversion routines were separated and reworked to ensure sparsity.
- Moved documentation to Sphinx.
- SciPy dependency made optional.
Version 1.5 (2014-11-27)
- Support for Moroder hierarchy (doi:10.1103/PhysRevLett.111.030501).
- Further symmetries are discovered when all variables are Hermitian.
- Normalization can be turned off.
Version 1.4 (2014-11-18)
- Pypy support restored with limitations.
- Direct export to and optimization by MOSEK.
- Added helper function to add constraints on Pauli operators.
- Handling of complex coefficients improved.
- Added PICOS compatibility layer, enabling solving a problem by a larger range of solvers.
- Bug fixes: Python 3 compatibility restored.
Version 1.3 (2014-11-03)
- Much smaller SDPs are generated when using the helper functions for quantum correlations by not considering the last projector in the measurements and thus removing the sum-to-identity constraint; positive semidefinite condition is not influenced by this.
- Helper functions for fermionic systems and projective measurements are simplified.
- Support for the Nieto-Silleras (doi:10.1088/1367-2630/16/1/013035) hierarchy for level 1+ relaxations.
Version 1.2.4 (2014-06-13)
- Bug fixes: mixed commutative and noncommutative variable monomials are handled correctly in substitutions, constant integer objective functions are accepted.
Version 1.2.3 (2014-06-04)
- CHSH inequality added as an example.
- Allows supplying extra monomials to a given level of relaxation.
- Added functions to make it easier to work with Bell inequalities.
- Bug fixes: constant separation works correctly for integers, max-cut example fixed.
Version 1.2.2 (2014-05-27)
- Much faster SDPA writer for problems with many blocks.
- Removal of equalities does not happen by default.
Version 1.2.1 (2014-05-22)
- Size of localizing matrices adjusts to individual inequalities.
- Internal structure for storing monomials reorganized.
- Checks for maximum order in the constraints added.
- Fermionic constraints corrected.
Version 1.2 (2014-05-16)
- Fast replace was updated and made default.
- Numpy and SciPy are now dependencies.
- Replaced internal data structures by SciPy sparse matrices.
- Pypy is no longer supported.
- Equality constraints are removed by a QR decomposition and basis transformation.
- Functions added to support calling SDPA from Python.
- Helper functions added to help phrasing physics problems.
- More commutative examples added for comparison to Gloptipoly.
- Internal module structure reorganized.
Version 1.1 (2014-05-12)
- Commutative variables also work.
- Major rework of how the moment matrix is generated.
Version 1.0 (2014-04-29)
- Initial release.