GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/core/integ-action-base.hxx
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 38 68 55.9%
Branches: 23 150 15.3%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2021-2025, LAAS-CNRS, University of Edinburgh,
5 // University of Oxford, University of Trento,
6 // Heriot-Watt University
7 // Copyright note valid unless otherwise stated in individual files.
8 // All rights reserved.
9 ///////////////////////////////////////////////////////////////////////////////
10
11 #include <boost/core/demangle.hpp>
12 #include <iostream>
13 #include <typeinfo>
14
15 #include "crocoddyl/core/controls/poly-zero.hpp"
16 #include "crocoddyl/core/integ-action-base.hpp"
17
18 namespace crocoddyl {
19
20 template <typename Scalar>
21 713 IntegratedActionModelAbstractTpl<Scalar>::IntegratedActionModelAbstractTpl(
22 std::shared_ptr<DifferentialActionModelAbstract> model,
23 std::shared_ptr<ControlParametrizationModelAbstract> control,
24 const Scalar time_step, const bool with_cost_residual)
25 : Base(model->get_state(), control->get_nu(), model->get_nr(),
26 2852 model->get_ng(), model->get_nh()),
27 713 differential_(model),
28 713 control_(control),
29 713 time_step_(time_step),
30
1/2
✓ Branch 12 taken 713 times.
✗ Branch 13 not taken.
713 with_cost_residual_(with_cost_residual) {
31
3/6
✓ Branch 2 taken 713 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 713 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 713 times.
713 if (control->get_nw() != model->get_nu()) {
32 throw_pretty("Invalid argument: "
33 << "control.nw (" + std::to_string(control->get_nw()) +
34 ") is not equal to model.nu (" +
35 std::to_string(model->get_nu()) + ")");
36 }
37
1/2
✓ Branch 1 taken 713 times.
✗ Branch 2 not taken.
713 init();
38 713 }
39
40 template <typename Scalar>
41 378 IntegratedActionModelAbstractTpl<Scalar>::IntegratedActionModelAbstractTpl(
42 std::shared_ptr<DifferentialActionModelAbstract> model,
43 const Scalar time_step, const bool with_cost_residual)
44 : Base(model->get_state(), model->get_nu(), model->get_nr(),
45 1512 model->get_ng(), model->get_nh()),
46 378 differential_(model),
47
1/2
✓ Branch 1 taken 378 times.
✗ Branch 2 not taken.
378 control_(
48
3/6
✓ Branch 2 taken 378 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 378 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 378 times.
✗ Branch 9 not taken.
378 new ControlParametrizationModelPolyZeroTpl<Scalar>(model->get_nu())),
49 378 time_step_(time_step),
50
1/2
✓ Branch 12 taken 378 times.
✗ Branch 13 not taken.
378 with_cost_residual_(with_cost_residual) {
51
1/2
✓ Branch 1 taken 378 times.
✗ Branch 2 not taken.
378 init();
52 378 }
53
54 template <typename Scalar>
55 1091 void IntegratedActionModelAbstractTpl<Scalar>::init() {
56 1091 time_step2_ = time_step_ * time_step_;
57
2/4
✓ Branch 1 taken 1091 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1091 times.
✗ Branch 5 not taken.
1091 VectorXs u_lb(nu_), u_ub(nu_);
58
7/14
✓ Branch 2 taken 1091 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1091 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1091 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1091 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1091 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1091 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1091 times.
✗ Branch 23 not taken.
1091 control_->convertBounds(differential_->get_u_lb(), differential_->get_u_ub(),
59 u_lb, u_ub);
60
1/2
✓ Branch 1 taken 1091 times.
✗ Branch 2 not taken.
1091 Base::set_u_lb(u_lb);
61
1/2
✓ Branch 1 taken 1091 times.
✗ Branch 2 not taken.
1091 Base::set_u_ub(u_ub);
62
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1091 times.
1091 if (time_step_ < Scalar(0.)) {
63 time_step_ = Scalar(1e-3);
64 time_step2_ = time_step_ * time_step_;
65 std::cerr << "Warning: dt should be positive, set to 1e-3" << std::endl;
66 }
67 1091 }
68
69 template <typename Scalar>
70 std::shared_ptr<ActionDataAbstractTpl<Scalar> >
71 IntegratedActionModelAbstractTpl<Scalar>::createData() {
72 if (control_->get_nu() > differential_->get_nu())
73 std::cerr << "Warning: It is useless to use an Euler integrator with a "
74 "control parametrization larger than PolyZero"
75 << std::endl;
76 return std::allocate_shared<Data>(Eigen::aligned_allocator<Data>(), this);
77 }
78
79 template <typename Scalar>
80 118652 std::size_t IntegratedActionModelAbstractTpl<Scalar>::get_ng() const {
81 118652 return differential_->get_ng();
82 }
83
84 template <typename Scalar>
85 156296 std::size_t IntegratedActionModelAbstractTpl<Scalar>::get_nh() const {
86 156296 return differential_->get_nh();
87 }
88
89 template <typename Scalar>
90 235922 std::size_t IntegratedActionModelAbstractTpl<Scalar>::get_ng_T() const {
91 235922 return differential_->get_ng_T();
92 }
93
94 template <typename Scalar>
95 198086 std::size_t IntegratedActionModelAbstractTpl<Scalar>::get_nh_T() const {
96 198086 return differential_->get_nh_T();
97 }
98
99 template <typename Scalar>
100 const typename MathBaseTpl<Scalar>::VectorXs&
101 IntegratedActionModelAbstractTpl<Scalar>::get_g_lb() const {
102 return differential_->get_g_lb();
103 }
104
105 template <typename Scalar>
106 const typename MathBaseTpl<Scalar>::VectorXs&
107 IntegratedActionModelAbstractTpl<Scalar>::get_g_ub() const {
108 return differential_->get_g_ub();
109 }
110
111 template <typename Scalar>
112 const std::shared_ptr<DifferentialActionModelAbstractTpl<Scalar> >&
113 104672 IntegratedActionModelAbstractTpl<Scalar>::get_differential() const {
114 104672 return differential_;
115 }
116
117 template <typename Scalar>
118 const std::shared_ptr<ControlParametrizationModelAbstractTpl<Scalar> >&
119 270142 IntegratedActionModelAbstractTpl<Scalar>::get_control() const {
120 270142 return control_;
121 }
122
123 template <typename Scalar>
124 const Scalar IntegratedActionModelAbstractTpl<Scalar>::get_dt() const {
125 return time_step_;
126 }
127
128 template <typename Scalar>
129 void IntegratedActionModelAbstractTpl<Scalar>::set_dt(const Scalar dt) {
130 if (dt < 0.) {
131 throw_pretty("Invalid argument: " << "dt has positive value");
132 }
133 time_step_ = dt;
134 time_step2_ = dt * dt;
135 }
136
137 template <typename Scalar>
138 void IntegratedActionModelAbstractTpl<Scalar>::set_differential(
139 std::shared_ptr<DifferentialActionModelAbstract> model) {
140 if (control_->get_nw() != model->get_nu()) {
141 throw_pretty("Invalid argument: "
142 << "control.nw (" + std::to_string(control_->get_nw()) +
143 ") is not equal to model.nu (" +
144 std::to_string(model->get_nu()) + ")");
145 }
146
147 nr_ = model->get_nr();
148 state_ = model->get_state();
149 differential_ = model;
150
151 VectorXs p_lb(nu_), p_ub(nu_);
152 control_->convertBounds(differential_->get_u_lb(), differential_->get_u_ub(),
153 p_lb, p_ub);
154 Base::set_u_lb(p_lb);
155 Base::set_u_ub(p_ub);
156 }
157
158 } // namespace crocoddyl
159