# Release notes ## 1.0 ### 1.0.1 - Renamed solution statuses to use `converged` instead of `converge`. Callers comparing `BiconvexProblem.status` strings should update accordingly. ### 1.0.0 - Changed the `BiconvexProblem` constructor to accept `x_var` and `y_var` as separate arguments. The constructor materializes the two iterables, verifies that every member is a problem variable, and rejects overlapping groups. The groups may still be empty or non-exhaustive. Replace a grouped call such as `BiconvexProblem(objective, ([x], [y]), constraints)` with `BiconvexProblem(objective, [x], [y], constraints)`. - Unified direct and slack-penalized solves under `BiconvexProblem.solve()`. The default `mode="direct"` preserves the direct algorithm, while `mode="penalty"` selects the slack-penalized algorithm and permits an infeasible starting point. Omitting the penalty-only `nu` and `slack_tol` options, or explicitly passing `None`, gives effective defaults of `1` and `1e-6`, respectively. `nu` must be finite and strictly positive; `nu=0` is now rejected. A non-`None` value for either penalty-only option is also rejected in direct mode. The `method` keyword is available for CVXPY and passes through to each subproblem solve; replace the former DBCP selector `method="penalty"` with `mode="penalty"`. The old `slack_tolerance` keyword is rejected with this error: `'slack_tolerance' was removed; use 'slack_tol'.` Penalty results whose total slack exceeds `slack_tol` now use the statuses `converge_with_slack` and `converge_inaccurate_with_slack`, replacing `converge_infeasible` and `converge_inaccurate_infeasible`. Equality with `slack_tol` is accepted. `BiconvexRelaxProblem` has been removed from the public API. Constructing the migration stub raises this error: `'BiconvexRelaxProblem' was removed; use 'BiconvexProblem' and call solve(mode='penalty', ...).` Repeated calls keep the current variable values, so callers can explicitly retry either mode or switch modes on the same object. - Added penalty-formulation inspection to `BiconvexProblem`. The existing `x_prob` and `y_prob` properties continue to expose the direct fixed subproblems. The new `penalty_prob`, `penalty_x_prob`, `penalty_y_prob`, and `slack_vars` properties lazily construct and then return stable penalty problem and slack-variable objects. - Replaced the public `gap_tolerance` solve argument with `abs_tol` and the keyword-only `rel_tol`. Both default to $10^{-6}$, and DBCP stops when $$ |u-v| \leq \epsilon_{\mathrm{abs}} + \epsilon_{\mathrm{rel}}\max\{|u|,|v|\}. $$ The legacy `gap_tolerance` keyword is rejected with guidance to use the new arguments. Setting `rel_tol=0` yields an absolute-only stopping criterion. ## 0.2 The prototype series provided `BiconvexProblem` for direct alternating solves, `BiconvexRelaxProblem` for slack-relaxed solves, and `convolve` for biconvex convolution expressions.