GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/core/activation-base.hpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 17 24 70.8%
Branches: 7 20 35.0%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, LAAS-CNRS, University of Edinburgh,
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #ifndef CROCODDYL_CORE_ACTIVATION_BASE_HPP_
11 #define CROCODDYL_CORE_ACTIVATION_BASE_HPP_
12
13 #include <boost/core/demangle.hpp>
14 #include <memory>
15 #include <stdexcept>
16
17 #include "crocoddyl/core/fwd.hpp"
18 #include "crocoddyl/core/mathbase.hpp"
19
20 namespace crocoddyl {
21
22 class ActivationModelBase {
23 public:
24 15800 virtual ~ActivationModelBase() = default;
25
26
2/4
✗ Branch 1 not taken.
✓ Branch 2 taken 36 times.
✓ Branch 5 taken 36 times.
✗ Branch 6 not taken.
144 CROCODDYL_BASE_CAST(ActivationModelBase, ActivationModelAbstractTpl)
27 };
28
29 template <typename _Scalar>
30 class ActivationModelAbstractTpl : public ActivationModelBase {
31 public:
32 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
33
34 typedef _Scalar Scalar;
35 typedef MathBaseTpl<Scalar> MathBase;
36 typedef ActivationDataAbstractTpl<Scalar> ActivationDataAbstract;
37 typedef typename MathBase::VectorXs VectorXs;
38 typedef typename MathBase::MatrixXs MatrixXs;
39
40 7844 explicit ActivationModelAbstractTpl(const std::size_t nr) : nr_(nr) {};
41 15800 virtual ~ActivationModelAbstractTpl() = default;
42
43 virtual void calc(const std::shared_ptr<ActivationDataAbstract>& data,
44 const Eigen::Ref<const VectorXs>& r) = 0;
45 virtual void calcDiff(const std::shared_ptr<ActivationDataAbstract>& data,
46 const Eigen::Ref<const VectorXs>& r) = 0;
47 virtual std::shared_ptr<ActivationDataAbstract> createData() {
48 return std::allocate_shared<ActivationDataAbstract>(
49 Eigen::aligned_allocator<ActivationDataAbstract>(), this);
50 };
51
52 1205763 std::size_t get_nr() const { return nr_; };
53
54 /**
55 * @brief Print information on the activation model
56 */
57 333 friend std::ostream& operator<<(
58 std::ostream& os, const ActivationModelAbstractTpl<Scalar>& model) {
59 333 model.print(os);
60 333 return os;
61 }
62
63 /**
64 * @brief Print relevant information of the activation model
65 *
66 * @param[out] os Output stream object
67 */
68 virtual void print(std::ostream& os) const {
69 os << boost::core::demangle(typeid(*this).name());
70 }
71
72 protected:
73 std::size_t nr_;
74 ActivationModelAbstractTpl() : nr_(0) {};
75 };
76
77 template <typename _Scalar>
78 struct ActivationDataAbstractTpl {
79 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
80
81 typedef _Scalar Scalar;
82 typedef MathBaseTpl<Scalar> MathBase;
83 typedef typename MathBase::VectorXs VectorXs;
84 typedef typename MathBase::MatrixXs MatrixXs;
85 typedef typename MathBase::DiagonalMatrixXs DiagonalMatrixXs;
86
87 template <template <typename Scalar> class Activation>
88 476536 explicit ActivationDataAbstractTpl(Activation<Scalar>* const activation)
89 476536 : a_value(Scalar(0.)),
90
1/2
✓ Branch 2 taken 476534 times.
✗ Branch 3 not taken.
476536 Ar(VectorXs::Zero(activation->get_nr())),
91
2/4
✓ Branch 2 taken 476534 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 476534 times.
✗ Branch 6 not taken.
953072 Arr(DiagonalMatrixXs(activation->get_nr())) {
92
1/2
✓ Branch 1 taken 476534 times.
✗ Branch 2 not taken.
476536 Arr.setZero();
93 476536 }
94 951200 virtual ~ActivationDataAbstractTpl() = default;
95
96 Scalar a_value;
97 VectorXs Ar;
98 DiagonalMatrixXs Arr;
99
100 13 static MatrixXs getHessianMatrix(
101 const ActivationDataAbstractTpl<Scalar>& data) {
102
1/2
✓ Branch 3 taken 13 times.
✗ Branch 4 not taken.
26 return data.Arr.diagonal().asDiagonal();
103 }
104 static void setHessianMatrix(ActivationDataAbstractTpl<Scalar>& data,
105 const MatrixXs& Arr) {
106 data.Arr.diagonal() = Arr.diagonal();
107 }
108 };
109
110 } // namespace crocoddyl
111
112 CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ActivationModelAbstractTpl)
113 CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ActivationDataAbstractTpl)
114
115 #endif // CROCODDYL_CORE_ACTIVATION_BASE_HPP_
116