GCC Code Coverage Report


Directory: ./
File: bindings/python/crocoddyl/multibody/contact-base.hpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 4 27 14.8%
Branches: 2 54 3.7%

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 BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_
11 #define BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_
12
13 #include "crocoddyl/multibody/contact-base.hpp"
14 #include "python/crocoddyl/multibody/multibody.hpp"
15
16 namespace crocoddyl {
17 namespace python {
18
19 template <typename Scalar>
20 class ContactModelAbstractTpl_wrap
21 : public ContactModelAbstractTpl<Scalar>,
22 public bp::wrapper<ContactModelAbstractTpl<Scalar>> {
23 public:
24 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
25 CROCODDYL_DERIVED_CAST(ContactModelBase, ContactModelAbstractTpl_wrap)
26
27 typedef typename crocoddyl::ContactModelAbstractTpl<Scalar> ContactModel;
28 typedef typename crocoddyl::ContactDataAbstractTpl<Scalar> ContactData;
29 typedef typename ContactModel::VectorXs VectorXs;
30 typedef typename ContactModel::StateMultibody State;
31 using ContactModel::nc_;
32 using ContactModel::nu_;
33 using ContactModel::state_;
34 using ContactModel::type_;
35
36 2 ContactModelAbstractTpl_wrap(std::shared_ptr<State> state,
37 const pinocchio::ReferenceFrame type,
38 std::size_t nc, std::size_t nu)
39
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 : ContactModel(state, type, nc, nu) {}
40 9 ContactModelAbstractTpl_wrap(std::shared_ptr<State> state,
41 const pinocchio::ReferenceFrame type,
42 std::size_t nc)
43
1/2
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
18 : ContactModel(state, type, nc) {}
44
45 void calc(const std::shared_ptr<ContactData>& data,
46 const Eigen::Ref<const VectorXs>& x) override {
47 assert_pretty(static_cast<std::size_t>(x.size()) == state_->get_nx(),
48 "x has wrong dimension");
49 return bp::call<void>(this->get_override("calc").ptr(), data, (VectorXs)x);
50 }
51
52 void calcDiff(const std::shared_ptr<ContactData>& data,
53 const Eigen::Ref<const VectorXs>& x) override {
54 assert_pretty(static_cast<std::size_t>(x.size()) == state_->get_nx(),
55 "x has wrong dimension");
56 return bp::call<void>(this->get_override("calcDiff").ptr(), data,
57 (VectorXs)x);
58 }
59
60 void updateForce(const std::shared_ptr<ContactData>& data,
61 const VectorXs& force) override {
62 assert_pretty(static_cast<std::size_t>(force.size()) == nc_,
63 "force has wrong dimension");
64 return bp::call<void>(this->get_override("updateForce").ptr(), data, force);
65 }
66
67 std::shared_ptr<ContactData> createData(
68 pinocchio::DataTpl<Scalar>* const data) override {
69 enableMultithreading() = false;
70 if (boost::python::override createData = this->get_override("createData")) {
71 return bp::call<std::shared_ptr<ContactData>>(createData.ptr(),
72 boost::ref(data));
73 }
74 return ContactModel::createData(data);
75 }
76
77 std::shared_ptr<ContactData> default_createData(
78 pinocchio::DataTpl<Scalar>* const data) {
79 return this->ContactModel::createData(data);
80 }
81
82 template <typename NewScalar>
83 ContactModelAbstractTpl_wrap<NewScalar> cast() const {
84 typedef ContactModelAbstractTpl_wrap<NewScalar> ReturnType;
85 typedef StateMultibodyTpl<NewScalar> StateType;
86 ReturnType ret(
87 std::make_shared<StateType>(state_->template cast<NewScalar>()), type_,
88 nc_, nu_);
89 return ret;
90 }
91 };
92
93 } // namespace python
94 } // namespace crocoddyl
95
96 #endif // BINDINGS_PYTHON_CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_
97