Release notes

0.5

  • Added exact 3D power-cone support, including exact cp.power and cp.pnorm atoms and direct cp.PowCone3D constraints.

  • Added exponential-cone support for exact exponential-family atoms and scalar, vector, and matrix cp.ExpCone constraints.

  • Extended blvpy.ConeLayout inspection with the power_3d and p3d exponent tuples, the exponential and exp counts, and their power_3d_slices, p3d_slices, exponential_slices, and exp_slices row selectors.

  • Made SCS and Clarabel direct runtime dependencies for nonlinear cone diagnostics.

  • Added advanced clean-equipment rebate and carbon-tax abatement examples, demonstrating 3D power-cone and exponential-cone lower models, respectively.

0.4

  • Added blvpy.BilevelProblem.polish(), a non-mutating fixed-upper lower re-solve that returns an immutable candidate with residual-based feasibility and an upper-objective comparison.

  • Added examples for the new Polishing feature.

  • Reorganized the examples into a published gallery and a repository-only advanced collection with shared notebook assets.

0.3

  • Added cp.Maximize support at both bilevel levels. Lower maximization objectives are normalized to an equivalent minimization before conic canonicalization, while LowerProblem.objective and solve-time upper objective values remain in their original modeled sense.

  • Made complete and partial best-of run selection choose the lowest upper objective for minimization and the highest for maximization. Defined GapDiagnostics.source_gap as the returned lower objective minus the reference optimum for minimization, and the reference optimum minus the returned lower objective for maximization.

  • Add examples.

0.2

  • Renamed the structural compatibility predicate to BilevelProblem.is_dblp() and standardized DBLP terminology throughout the public API and documentation.

  • Added the Stackelberg port-security application notebook and a shared publication-oriented plotting style for the example gallery.

0.1

First public release of BLVPY.