GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/tsid/bindings/python/solvers/solver-HQP-eiquadprog.hpp Lines: 21 29 72.4 %
Date: 2024-02-02 08:47:34 Branches: 19 48 39.6 %

Line Branch Exec Source
1
//
2
// Copyright (c) 2018 CNRS
3
//
4
// This file is part of tsid
5
// tsid is free software: you can redistribute it
6
// and/or modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation, either version
8
// 3 of the License, or (at your option) any later version.
9
// tsid is distributed in the hope that it will be
10
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
// General Lesser Public License for more details. You should have
13
// received a copy of the GNU Lesser General Public License along with
14
// tsid If not, see
15
// <http://www.gnu.org/licenses/>.
16
//
17
18
#ifndef __tsid_python_solver_quadprog_hpp__
19
#define __tsid_python_solver_quadprog_hpp__
20
21
#include "tsid/bindings/python/fwd.hpp"
22
23
#include "tsid/solvers/solver-HQP-eiquadprog.hpp"
24
#include "tsid/solvers/solver-HQP-eiquadprog-fast.hpp"
25
#include "tsid/solvers/solver-HQP-output.hpp"
26
#include "tsid/solvers/fwd.hpp"
27
#include "tsid/bindings/python/utils/container.hpp"
28
29
namespace tsid {
30
namespace python {
31
namespace bp = boost::python;
32
33
template <typename Solver>
34
struct SolverHQuadProgPythonVisitor
35
    : public boost::python::def_visitor<SolverHQuadProgPythonVisitor<Solver> > {
36
  template <class PyClass>
37
38
28
  void visit(PyClass &cl) const {
39
28
    cl.def(bp::init<const std::string &>((bp::arg("name")),
40
                                         "Default Constructor with name"))
41
42

28
        .def("resize", &SolverHQuadProgPythonVisitor::resize,
43
             bp::args("n", "neq", "nin"))
44

56
        .add_property("ObjVal", &Solver::getObjectiveValue, "return obj value")
45
56
        .def("solve", &SolverHQuadProgPythonVisitor::solve, bp::args("HQPData"))
46

56
        .def("solve", &SolverHQuadProgPythonVisitor::solver_helper,
47
             bp::args("HQPData for Python"))
48

56
        .add_property("qpData", &Solver::getQPData, "return QP Data object")
49
56
        .def("retrieveQPData", &Solver::retrieveQPData, bp::args("HQPData"))
50


56
        .def("retrieveQPData", &SolverHQuadProgPythonVisitor::retrieveQPData,
51
             bp::args("HQPData for Python"));
52
28
  }
53
54
4
  static void resize(Solver &self, unsigned int n, unsigned int neq,
55
                     unsigned int nin) {
56
4
    self.resize(n, neq, nin);
57
  }
58
  static solvers::HQPOutput solve(Solver &self,
59
                                  const solvers::HQPData &problemData) {
60
    solvers::HQPOutput output;
61
    output = self.solve(problemData);
62
    return output;
63
  }
64
1100
  static solvers::HQPOutput solver_helper(Solver &self, HQPDatas &HQPDatas) {
65
2200
    solvers::HQPOutput output;
66
2200
    solvers::HQPData &data = HQPDatas.get();
67
68

2200
    output = self.solve(data);
69
70
2200
    return output;
71
  }
72
73
  static solvers::QPDataQuadProg retrieveQPData(Solver &self,
74
                                                HQPDatas &HQPDatas) {
75
    solvers::HQPData data = HQPDatas.get();
76
    self.retrieveQPData(data);
77
    return self.getQPData();
78
  }
79
80
28
  static void expose(const std::string &class_name) {
81
28
    std::string doc = "Solver EiQuadProg info.";
82

28
    bp::class_<Solver>(class_name.c_str(), doc.c_str(), bp::no_init)
83
        .def(SolverHQuadProgPythonVisitor<Solver>());
84
28
  }
85
};
86
}  // namespace python
87
}  // namespace tsid
88
89
#endif  // ifndef __tsid_python_solver_quadprog_hpp__