Skip to content

Commit

Permalink
Add python binding for QuadraticConstraint (#15313)
Browse files Browse the repository at this point in the history
* Add python binding for QuadraticConstraint
  • Loading branch information
hongkai-dai committed Jul 4, 2021
1 parent 3100784 commit dd7b1b8
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
14 changes: 14 additions & 0 deletions bindings/pydrake/solvers/mathematicalprogram_py.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ using solvers::MathematicalProgramResult;
using solvers::MatrixXDecisionVariable;
using solvers::MatrixXIndeterminate;
using solvers::PositiveSemidefiniteConstraint;
using solvers::QuadraticConstraint;
using solvers::QuadraticCost;
using solvers::RotatedLorentzConeConstraint;
using solvers::SolutionResult;
Expand Down Expand Up @@ -1576,6 +1577,19 @@ for every column of ``prog_var_vals``. )""")
}),
py::arg("lb"), py::arg("ub"), doc.BoundingBoxConstraint.ctor.doc);

py::class_<QuadraticConstraint, Constraint,
std::shared_ptr<QuadraticConstraint>>(
m, "QuadraticConstraint", doc.QuadraticConstraint.doc)
.def(py::init([](const Eigen::Ref<const Eigen::MatrixXd>& Q0,
const Eigen::Ref<const Eigen::VectorXd>& b, double lb,
double ub) {
return std::make_unique<QuadraticConstraint>(Q0, b, lb, ub);
}),
py::arg("Q0"), py::arg("b"), py::arg("lb"), py::arg("ub"),
doc.QuadraticConstraint.ctor.doc)
.def("Q", &QuadraticConstraint::Q, doc.QuadraticConstraint.Q.doc)
.def("b", &QuadraticConstraint::b, doc.QuadraticConstraint.b.doc);

py::class_<PositiveSemidefiniteConstraint, Constraint,
std::shared_ptr<PositiveSemidefiniteConstraint>>(m,
"PositiveSemidefiniteConstraint", doc.PositiveSemidefiniteConstraint.doc)
Expand Down
6 changes: 6 additions & 0 deletions bindings/pydrake/solvers/test/mathematicalprogram_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,12 @@ def test_bounding_box_constraint(self):
np.testing.assert_array_equal(
constraint.upper_bound(), np.array([2., 3.]))

def test_quadratic_constraint(self):
constraint = mp.QuadraticConstraint(
Q0=np.eye(2), b=np.array([1, 2.]), lb=0.5, ub=1.)
np.testing.assert_array_equal(constraint.Q(), np.eye(2))
np.testing.assert_array_equal(constraint.b(), np.array([1, 2.]))

def test_positive_semidefinite_constraint(self):
constraint = mp.PositiveSemidefiniteConstraint(rows=3)
self.assertEqual(constraint.matrix_rows(), 3)
Expand Down

0 comments on commit dd7b1b8

Please sign in to comment.