Added
- SigDomain and PolyDomain classes.
- sage_cones.py, which handles the ordinary and conditional SAGE cases.
- Support for automatic elimination of trivial AGE cones from SAGE relaxations. This can be disabled
by calling ``sageopt.coniclifts.presolve_trivial_age_cones(False)``.
- An explicit requirement that ``Constraint.variables()`` returns both all variables in its scope,
and that all returned Variables be "proper".
- For PrimalSageCone: added the option to allow AGE vectors to sum <= c, or == c. The default is <= c.
The default setting can be changed by calling ``sageopt.coniclifts.sum_age_force_equality(True)``.
Changed
- ``conditional_sage_data`` is ``infer_domain``. These functions have an additional argument for checking
feasibility of the inferred system (defaults to True).
- The signature of ``sig_relaxation`` and ``sig_constrained_relaxation``. Hierarchy parameters are now specified
by keyword arguments, and the argument ``X`` comes before the argument ``form``.
- Conditional SAGE constraints now assume that the "conditioning" is feasible.
- The ``var_name_to_locs`` dict from ``coniclifts.compilers.compile_constrained_system``.
It now has a slightly different definition, and a different name.
- Fields in the Problem class. ``Problem.user_cons`` is now ``Problem.constraints``.
``Problem.user_obj`` is now ``Problem.objective_expr``.
``Problem.user_variable_map`` is now ``Problem.variable_map``.
- How ElementwiseConstraint objects report their variables. They now always include user-defined variables,
and if ``con.variables()`` is called after epigraph substitution, then the list will also contain the epigraph
variables.
- Fixed a bug in ``conditional_sage_data`` (now, ``infer_domain``). Equality constraints were being
incorrectly compiled. The bug only meant that SAGE relaxations solved in the past were unnecessarily weak.
Removed
- ``log_domain_converter``. It wasn't being used.
- conditional_sage_cone.py, sage_cone.py.
- sig_primal, sig_dual, poly_primal, poly_dual (and the four constrained variations thereof)
as top-level imports within sageopt. These functions are still accessible from sageopt.relaxations.