GCC Code Coverage Report


Directory: ./
File: bindings/python/crocoddyl/multibody/data/contacts.cpp
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 10 10 100.0%
Branches: 54 108 50.0%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, University of Edinburgh, Heriot-Watt University
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
7 ///////////////////////////////////////////////////////////////////////////////
8
9 #include "crocoddyl/multibody/data/contacts.hpp"
10
11 #include "python/crocoddyl/multibody/multibody.hpp"
12
13 namespace crocoddyl {
14 namespace python {
15
16 template <typename Data>
17 struct DataCollectorContactVisitor
18 : public bp::def_visitor<DataCollectorContactVisitor<Data>> {
19 template <class PyClass>
20 40 void visit(PyClass& cl) const {
21
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
40 cl.add_property(
22 "contacts",
23 bp::make_getter(&Data::contacts,
24 40 bp::return_value_policy<bp::return_by_value>()),
25 "contacts data");
26 40 }
27 };
28
29 #define CROCODDYL_DATA_COLLECTOR_CONTACT_PYTHON_BINDINGS(Scalar) \
30 typedef DataCollectorContactTpl<Scalar> Data; \
31 typedef DataCollectorAbstractTpl<Scalar> DataBase; \
32 typedef ContactDataMultipleTpl<Scalar> ContactData; \
33 bp::register_ptr_to_python<std::shared_ptr<Data>>(); \
34 bp::class_<Data, bp::bases<DataBase>>( \
35 "DataCollectorContact", "Contact data collector.\n\n", \
36 bp::init<std::shared_ptr<ContactData>>( \
37 bp::args("self", "contacts"), \
38 "Create contact data collection.\n\n" \
39 ":param contacts: contacts data")) \
40 .def(DataCollectorContactVisitor<Data>()) \
41 .def(CopyableVisitor<Data>());
42
43 #define CROCODDYL_DATA_COLLECTOR_MULTIBODY_CONTACT_PYTHON_BINDINGS(Scalar) \
44 typedef DataCollectorMultibodyInContactTpl<Scalar> Data; \
45 typedef DataCollectorMultibodyTpl<Scalar> DataBase1; \
46 typedef DataCollectorContactTpl<Scalar> DataBase2; \
47 typedef pinocchio::DataTpl<Scalar> PinocchioData; \
48 typedef ContactDataMultipleTpl<Scalar> ContactData; \
49 bp::register_ptr_to_python<std::shared_ptr<Data>>(); \
50 bp::class_<Data, bp::bases<DataBase1, DataBase2>>( \
51 "DataCollectorMultibodyInContact", \
52 "Data collector for multibody systems in contact.\n\n", \
53 bp::init<PinocchioData*, std::shared_ptr<ContactData>>( \
54 bp::args("self", "pinocchio", "contacts"), \
55 "Create multibody data collection.\n\n" \
56 ":param pinocchio: Pinocchio data\n" \
57 ":param contacts: contacts data")[bp::with_custodian_and_ward<1, \
58 2>()]) \
59 .def(CopyableVisitor<Data>());
60
61 #define CROCODDYL_DATA_COLLECTOR_ACTMULTIBODY_CONTACT_PYTHON_BINDINGS(Scalar) \
62 typedef DataCollectorActMultibodyInContactTpl<Scalar> Data; \
63 typedef DataCollectorMultibodyInContactTpl<Scalar> DataBase1; \
64 typedef DataCollectorActuationTpl<Scalar> DataBase2; \
65 typedef pinocchio::DataTpl<Scalar> PinocchioData; \
66 typedef ActuationDataAbstractTpl<Scalar> ActuationData; \
67 typedef ContactDataMultipleTpl<Scalar> ContactData; \
68 bp::register_ptr_to_python<std::shared_ptr<Data>>(); \
69 bp::class_<Data, bp::bases<DataBase1, DataBase2>>( \
70 "DataCollectorActMultibodyInContact", \
71 "Data collector for actuated multibody systems in contact.\n\n", \
72 bp::init<PinocchioData*, std::shared_ptr<ActuationData>, \
73 std::shared_ptr<ContactData>>( \
74 bp::args("self", "pinocchio", "actuation", "contacts"), \
75 "Create multibody data collection.\n\n" \
76 ":param pinocchio: Pinocchio data\n" \
77 ":param actuation: actuation data\n" \
78 ":param contacts: contacts data")[bp::with_custodian_and_ward<1, \
79 2>()]) \
80 .def(CopyableVisitor<Data>());
81
82 #define CROCODDYL_DATA_COLLECTOR_JOINT_ACTMULTIBODY_CONTACT_PYTHON_BINDINGS( \
83 Scalar) \
84 typedef DataCollectorJointActMultibodyInContactTpl<Scalar> Data; \
85 typedef DataCollectorMultibodyInContactTpl<Scalar> DataBase1; \
86 typedef DataCollectorActuationTpl<Scalar> DataBase2; \
87 typedef pinocchio::DataTpl<Scalar> PinocchioData; \
88 typedef ActuationDataAbstractTpl<Scalar> ActuationData; \
89 typedef JointDataAbstractTpl<Scalar> JointData; \
90 typedef ContactDataMultipleTpl<Scalar> ContactData; \
91 bp::register_ptr_to_python<std::shared_ptr<Data>>(); \
92 bp::class_<Data, bp::bases<DataBase1, DataBase2>>( \
93 "DataCollectorJointActMultibodyInContact", \
94 "Data collector for actuated-joint multibody systems in contact.\n\n", \
95 bp::init<PinocchioData*, std::shared_ptr<ActuationData>, \
96 std::shared_ptr<JointData>, std::shared_ptr<ContactData>>( \
97 bp::args("self", "pinocchio", "actuation", "joint", "contacts"), \
98 "Create multibody data collection.\n\n" \
99 ":param pinocchio: Pinocchio data\n" \
100 ":param actuation: actuation data\n" \
101 ":param joint: joint data\n" \
102 ":param contacts: contacts data")[bp::with_custodian_and_ward<1, \
103 2>()]) \
104 .def(CopyableVisitor<Data>());
105
106 10 void exposeDataCollectorContacts() {
107
13/26
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 10 times.
✗ Branch 13 not taken.
✓ Branch 18 taken 10 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 10 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 10 times.
✗ Branch 25 not taken.
✓ Branch 29 taken 10 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 10 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 10 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 10 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 10 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 10 times.
✗ Branch 45 not taken.
20 CROCODDYL_PYTHON_SCALARS(CROCODDYL_DATA_COLLECTOR_CONTACT_PYTHON_BINDINGS)
108
13/26
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 10 times.
✗ Branch 13 not taken.
✓ Branch 18 taken 10 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 10 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 10 times.
✗ Branch 25 not taken.
✓ Branch 29 taken 10 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 10 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 10 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 10 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 10 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 10 times.
✗ Branch 45 not taken.
20 CROCODDYL_PYTHON_SCALARS(
109 CROCODDYL_DATA_COLLECTOR_MULTIBODY_CONTACT_PYTHON_BINDINGS)
110
13/26
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 10 times.
✗ Branch 13 not taken.
✓ Branch 18 taken 10 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 10 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 10 times.
✗ Branch 25 not taken.
✓ Branch 29 taken 10 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 10 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 10 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 10 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 10 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 10 times.
✗ Branch 45 not taken.
20 CROCODDYL_PYTHON_SCALARS(
111 CROCODDYL_DATA_COLLECTOR_ACTMULTIBODY_CONTACT_PYTHON_BINDINGS)
112
13/26
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 10 times.
✗ Branch 13 not taken.
✓ Branch 18 taken 10 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 10 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 10 times.
✗ Branch 25 not taken.
✓ Branch 29 taken 10 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 10 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 10 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 10 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 10 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 10 times.
✗ Branch 45 not taken.
20 CROCODDYL_PYTHON_SCALARS(
113 CROCODDYL_DATA_COLLECTOR_JOINT_ACTMULTIBODY_CONTACT_PYTHON_BINDINGS)
114 10 }
115
116 } // namespace python
117 } // namespace crocoddyl
118