GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/core/activation-base.hpp
Date: 2025-05-13 10:30:51
Exec Total Coverage
Lines: 0 23 0.0%
Branches: 0 20 0.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 "crocoddyl/core/fwd.hpp"
14
15 namespace crocoddyl {
16
17 class ActivationModelBase {
18 public:
19 virtual ~ActivationModelBase() = default;
20
21 CROCODDYL_BASE_CAST(ActivationModelBase, ActivationModelAbstractTpl)
22 };
23
24 template <typename _Scalar>
25 class ActivationModelAbstractTpl : public ActivationModelBase {
26 public:
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
28
29 typedef _Scalar Scalar;
30 typedef MathBaseTpl<Scalar> MathBase;
31 typedef ActivationDataAbstractTpl<Scalar> ActivationDataAbstract;
32 typedef typename MathBase::VectorXs VectorXs;
33 typedef typename MathBase::MatrixXs MatrixXs;
34
35 explicit ActivationModelAbstractTpl(const std::size_t nr) : nr_(nr) {};
36 virtual ~ActivationModelAbstractTpl() = default;
37
38 virtual void calc(const std::shared_ptr<ActivationDataAbstract>& data,
39 const Eigen::Ref<const VectorXs>& r) = 0;
40 virtual void calcDiff(const std::shared_ptr<ActivationDataAbstract>& data,
41 const Eigen::Ref<const VectorXs>& r) = 0;
42 virtual std::shared_ptr<ActivationDataAbstract> createData() {
43 return std::allocate_shared<ActivationDataAbstract>(
44 Eigen::aligned_allocator<ActivationDataAbstract>(), this);
45 };
46
47 std::size_t get_nr() const { return nr_; };
48
49 /**
50 * @brief Print information on the activation model
51 */
52 friend std::ostream& operator<<(
53 std::ostream& os, const ActivationModelAbstractTpl<Scalar>& model) {
54 model.print(os);
55 return os;
56 }
57
58 /**
59 * @brief Print relevant information of the activation model
60 *
61 * @param[out] os Output stream object
62 */
63 virtual void print(std::ostream& os) const {
64 os << boost::core::demangle(typeid(*this).name());
65 }
66
67 protected:
68 std::size_t nr_;
69 ActivationModelAbstractTpl() : nr_(0) {};
70 };
71
72 template <typename _Scalar>
73 struct ActivationDataAbstractTpl {
74 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
75
76 typedef _Scalar Scalar;
77 typedef MathBaseTpl<Scalar> MathBase;
78 typedef typename MathBase::VectorXs VectorXs;
79 typedef typename MathBase::MatrixXs MatrixXs;
80 typedef typename MathBase::DiagonalMatrixXs DiagonalMatrixXs;
81
82 template <template <typename Scalar> class Activation>
83 explicit ActivationDataAbstractTpl(Activation<Scalar>* const activation)
84 : a_value(Scalar(0.)),
85 Ar(VectorXs::Zero(activation->get_nr())),
86 Arr(DiagonalMatrixXs(activation->get_nr())) {
87 Arr.setZero();
88 }
89 virtual ~ActivationDataAbstractTpl() = default;
90
91 Scalar a_value;
92 VectorXs Ar;
93 DiagonalMatrixXs Arr;
94
95 static MatrixXs getHessianMatrix(
96 const ActivationDataAbstractTpl<Scalar>& data) {
97 return data.Arr.diagonal().asDiagonal();
98 }
99 static void setHessianMatrix(ActivationDataAbstractTpl<Scalar>& data,
100 const MatrixXs& Arr) {
101 data.Arr.diagonal() = Arr.diagonal();
102 }
103 };
104
105 } // namespace crocoddyl
106
107 CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ActivationModelAbstractTpl)
108 CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ActivationDataAbstractTpl)
109
110 #endif // CROCODDYL_CORE_ACTIVATION_BASE_HPP_
111