Skip to content

Commit 033c5e1

Browse files
authored
[py solvers] Fix signatures to use Python types (not C++) (#22452)
1 parent dfb98b3 commit 033c5e1

File tree

5 files changed

+60
-41
lines changed

5 files changed

+60
-41
lines changed

bindings/pydrake/solvers/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ drake_pybind_library(
6060
"solvers_py_csdp.cc",
6161
"solvers_py_evaluators.cc",
6262
"solvers_py_gurobi.cc",
63+
"solvers_py_ids.cc",
6364
"solvers_py_ipopt.cc",
6465
"solvers_py_mathematicalprogram.cc",
6566
"solvers_py_mixed_integer_optimization_util.cc",

bindings/pydrake/solvers/solvers_py.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ top-level documentation for :py:mod:`pydrake.math`.
2020
// The order of these calls matters. Some modules rely on prior definitions.
2121
internal::DefineSolversEvaluators(m);
2222
internal::DefineProgramAttribute(m);
23+
internal::DefineSolversIds(m);
2324
internal::DefineSolversOptions(m);
2425
internal::DefineSolversMathematicalProgram(m);
2526
internal::DefineSolversAugmentedLagrangian(m);

bindings/pydrake/solvers/solvers_py.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ void DefineSolversEvaluators(py::module m);
3333
/* Defines the GUROBI bindings. See solvers_py_gurobi.cc. */
3434
void DefineSolversGurobi(py::module m);
3535

36+
/* Defines bindings per solvers_py_ids.cc */
37+
void DefineSolversIds(py::module m);
38+
3639
/* Defines the IPOPT bindings. See solvers_py_ipopt.cc. */
3740
void DefineSolversIpopt(py::module m);
3841

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include "drake/bindings/pydrake/documentation_pybind.h"
2+
#include "drake/bindings/pydrake/solvers/solvers_py.h"
3+
#include "drake/solvers/solver_id.h"
4+
#include "drake/solvers/solver_type.h"
5+
6+
namespace drake {
7+
namespace pydrake {
8+
namespace internal {
9+
10+
using solvers::SolverId;
11+
using solvers::SolverType;
12+
13+
void DefineSolversIds(py::module m) {
14+
constexpr auto& doc = pydrake_doc.drake.solvers;
15+
py::class_<SolverId>(m, "SolverId", doc.SolverId.doc)
16+
.def(py::init<std::string>(), py::arg("name"), doc.SolverId.ctor.doc)
17+
.def("name", &SolverId::name, doc.SolverId.name.doc)
18+
.def("__hash__",
19+
[](const SolverId& self) { return std::hash<SolverId>{}(self); })
20+
.def(
21+
"__eq__",
22+
[](const SolverId& self, const SolverId& other) {
23+
return self == other;
24+
},
25+
py::is_operator())
26+
.def(
27+
"__ne__",
28+
[](const SolverId& self, const SolverId& other) {
29+
return self != other;
30+
},
31+
py::is_operator());
32+
33+
py::enum_<SolverType> solver_type(m, "SolverType", doc.SolverType.doc);
34+
solver_type // BR
35+
.value("kClp", SolverType::kClp, doc.SolverType.kClp.doc)
36+
.value("kCsdp", SolverType::kCsdp, doc.SolverType.kCsdp.doc)
37+
.value("kEqualityConstrainedQP", SolverType::kEqualityConstrainedQP,
38+
doc.SolverType.kEqualityConstrainedQP.doc)
39+
.value("kGurobi", SolverType::kGurobi, doc.SolverType.kGurobi.doc)
40+
.value("kIpopt", SolverType::kIpopt, doc.SolverType.kIpopt.doc)
41+
.value("kLinearSystem", SolverType::kLinearSystem,
42+
doc.SolverType.kLinearSystem.doc)
43+
.value("kMobyLCP", SolverType::kMobyLCP, doc.SolverType.kMobyLCP.doc)
44+
.value("kMosek", SolverType::kMosek, doc.SolverType.kMosek.doc)
45+
.value("kNlopt", SolverType::kNlopt, doc.SolverType.kNlopt.doc)
46+
.value("kOsqp", SolverType::kOsqp, doc.SolverType.kOsqp.doc)
47+
.value("kScs", SolverType::kScs, doc.SolverType.kScs.doc)
48+
.value("kSnopt", SolverType::kSnopt, doc.SolverType.kSnopt.doc)
49+
.value("kUnrevisedLemke", SolverType::kUnrevisedLemke,
50+
doc.SolverType.kUnrevisedLemke.doc);
51+
}
52+
53+
} // namespace internal
54+
} // namespace pydrake
55+
} // namespace drake

bindings/pydrake/solvers/solvers_py_mathematicalprogram.cc

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -336,46 +336,6 @@ void BindSolverInterface(py::module m) {
336336
[](const SolverInterface& self) { return self.solver_id().name(); });
337337
}
338338

339-
void BindSolverIdAndType(py::module m) {
340-
constexpr auto& doc = pydrake_doc.drake.solvers;
341-
py::class_<SolverId>(m, "SolverId", doc.SolverId.doc)
342-
.def(py::init<std::string>(), py::arg("name"), doc.SolverId.ctor.doc)
343-
.def("name", &SolverId::name, doc.SolverId.name.doc)
344-
.def("__hash__",
345-
[](const SolverId& self) { return std::hash<SolverId>{}(self); })
346-
.def(
347-
"__eq__",
348-
[](const SolverId& self, const SolverId& other) {
349-
return self == other;
350-
},
351-
py::is_operator())
352-
.def(
353-
"__ne__",
354-
[](const SolverId& self, const SolverId& other) {
355-
return self != other;
356-
},
357-
py::is_operator());
358-
359-
py::enum_<SolverType> solver_type(m, "SolverType", doc.SolverType.doc);
360-
solver_type // BR
361-
.value("kClp", SolverType::kClp, doc.SolverType.kClp.doc)
362-
.value("kCsdp", SolverType::kCsdp, doc.SolverType.kCsdp.doc)
363-
.value("kEqualityConstrainedQP", SolverType::kEqualityConstrainedQP,
364-
doc.SolverType.kEqualityConstrainedQP.doc)
365-
.value("kGurobi", SolverType::kGurobi, doc.SolverType.kGurobi.doc)
366-
.value("kIpopt", SolverType::kIpopt, doc.SolverType.kIpopt.doc)
367-
.value("kLinearSystem", SolverType::kLinearSystem,
368-
doc.SolverType.kLinearSystem.doc)
369-
.value("kMobyLCP", SolverType::kMobyLCP, doc.SolverType.kMobyLCP.doc)
370-
.value("kMosek", SolverType::kMosek, doc.SolverType.kMosek.doc)
371-
.value("kNlopt", SolverType::kNlopt, doc.SolverType.kNlopt.doc)
372-
.value("kOsqp", SolverType::kOsqp, doc.SolverType.kOsqp.doc)
373-
.value("kScs", SolverType::kScs, doc.SolverType.kScs.doc)
374-
.value("kSnopt", SolverType::kSnopt, doc.SolverType.kSnopt.doc)
375-
.value("kUnrevisedLemke", SolverType::kUnrevisedLemke,
376-
doc.SolverType.kUnrevisedLemke.doc);
377-
}
378-
379339
void BindMathematicalProgramResult(py::module m) {
380340
constexpr auto& doc = pydrake_doc.drake.solvers;
381341
py::class_<MathematicalProgramResult>(
@@ -1727,7 +1687,6 @@ namespace internal {
17271687
void DefineSolversMathematicalProgram(py::module m) {
17281688
// This list must remain in topological dependency order.
17291689
BindPyFunctionConstraint(m);
1730-
BindSolverIdAndType(m);
17311690
BindMathematicalProgram(m);
17321691
BindSolutionResult(m);
17331692
BindMathematicalProgramResult(m);

0 commit comments

Comments
 (0)