Loading...
Searching...
No Matches
second-order-cone.hpp
Go to the documentation of this file.
1// Copyright (c) 2015-2018, CNRS
2// Authors: Justin Carpentier <jcarpent@laas.fr>
3
4#ifndef __multicontact_api_python_geometry_second_order_cone_hpp__
5#define __multicontact_api_python_geometry_second_order_cone_hpp__
6
7#include <eigenpy/eigenpy.hpp>
8
11
12namespace multicontact_api {
13namespace python {
14
15namespace bp = boost::python;
16
17template <typename SOC>
19 : public boost::python::def_visitor<SOCPythonVisitor<SOC> > {
20 typedef typename SOC::MatrixD MatrixD;
21 typedef typename SOC::VectorD VectorD;
22 typedef typename SOC::Scalar Scalar;
23
24 template <class PyClass>
25 void visit(PyClass &cl) const {
26 cl.def(bp::init<>("Default constructor."))
27 .def(bp::init<MatrixD, VectorD>((bp::arg("Q"), bp::arg("direction"))))
28 .def("__str__", &toString)
29 .def("lhsValue", &SOC::lhsValue, bp::arg("vector"),
30 "Returns the lhs value of the conic inequality.")
31 .def("rhsValue", &SOC::rhsValue, bp::arg("vector"),
32 "Returns the rhs value of the conic inequality.")
33 .def("check", (bool (SOC::*)(const VectorD &) const) & SOC::check,
34 bp::arg("vector"),
35 "Checks if the vector given in argument belongs to the conic "
36 "constraint.")
37 .def("check",
38 (bool (SOC::*)(const VectorD &, const Scalar) const) & SOC::check,
39 bp::args("vector", "factor"),
40 "Checks if the vector given in argument belongs to the conic "
41 "constraint with a given reduction factor.")
42 .add_property("direction", &get_direction, &SOC::setDirection,
43 "Accessor to the direction property.")
44 .add_property("Q", &get_Q, &SOC::setQ, "Accessor to the Q property.")
45 .def("isApprox",
46 (bool (SOC::*)(const SOC &, const Scalar &) const) & SOC::isApprox,
47 bp::args("other", "prec"),
48 "Returns true if *this is approximately equal to other, within "
49 "the precision determined by prec.")
50 .def(bp::self == bp::self)
51 .def(bp::self != bp::self)
52
53 .def("RegularCone", &SOC::RegularCone, bp::args("mu", "direction"),
54 "Creates a regular cone from a given friction coefficient and a "
55 "direction.")
56 .staticmethod("RegularCone");
57 }
58
59 static void expose(const std::string &class_name) {
60 std::string doc = "SOC of dimension " + SOC::dim;
61 doc += " defined by its direction and its quadratic norm.";
62 bp::class_<SOC>(class_name.c_str(), doc.c_str(), bp::no_init)
65
66 // Expose related matrix types
67 ENABLE_SPECIFIC_MATRIX_TYPE(MatrixD);
68 ENABLE_SPECIFIC_MATRIX_TYPE(VectorD);
69 }
70
71 protected:
72 static std::string toString(const SOC &c) {
73 std::ostringstream s;
74 s << c;
75 return s.str();
76 }
77
78 static VectorD get_direction(const SOC &c) { return c.direction(); }
79 static MatrixD get_Q(const SOC &c) { return c.Q(); }
80};
81
82} // namespace python
83} // namespace multicontact_api
84
85#endif // ifnef __multicontact_api_python_geometry_second_order_cone_hpp__
Definition ellipsoid.hpp:12
Definition second-order-cone.hpp:19
static VectorD get_direction(const SOC &c)
Definition second-order-cone.hpp:78
SOC::VectorD VectorD
Definition second-order-cone.hpp:21
static MatrixD get_Q(const SOC &c)
Definition second-order-cone.hpp:79
static std::string toString(const SOC &c)
Definition second-order-cone.hpp:72
SOC::Scalar Scalar
Definition second-order-cone.hpp:22
SOC::MatrixD MatrixD
Definition second-order-cone.hpp:20
static void expose(const std::string &class_name)
Definition second-order-cone.hpp:59
void visit(PyClass &cl) const
Definition second-order-cone.hpp:25