From 02e819e76a505857cf79cca9ec4183489ceb8341 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Thu, 31 Aug 2023 11:26:30 -0700 Subject: [PATCH] Tighten const qualifiers of `mjData` in Jacobian multiplication functions. PiperOrigin-RevId: 561711229 Change-Id: I66dc1d2fbcfbf8e935b244fe496ada314d53b135 --- doc/includes/references.h | 4 ++-- include/mujoco/mujoco.h | 4 ++-- introspect/functions.py | 4 ++-- src/engine/engine_core_constraint.c | 10 ++++++---- src/engine/engine_core_constraint.h | 13 ++++++------- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/doc/includes/references.h b/doc/includes/references.h index d6223101..e6f81619 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -2268,8 +2268,8 @@ int mj_addContact(const mjModel* m, mjData* d, const mjContact* con); int mj_isPyramidal(const mjModel* m); int mj_isSparse(const mjModel* m); int mj_isDual(const mjModel* m); -void mj_mulJacVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); -void mj_mulJacTVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); +void mj_mulJacVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); +void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); void mj_jac(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, const mjtNum point[3], int body); void mj_jacBody(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int body); diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 19c37f67..c289b78a 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -386,10 +386,10 @@ MJAPI int mj_isSparse(const mjModel* m); MJAPI int mj_isDual(const mjModel* m); // Multiply dense or sparse constraint Jacobian by vector. -MJAPI void mj_mulJacVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); +MJAPI void mj_mulJacVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); // Multiply dense or sparse constraint Jacobian transpose by vector. -MJAPI void mj_mulJacTVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); +MJAPI void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); // Compute 3/6-by-nv end-effector Jacobian of global point attached to given body. MJAPI void mj_jac(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, diff --git a/introspect/functions.py b/introspect/functions.py index a5bbf038..a8db3f87 100644 --- a/introspect/functions.py +++ b/introspect/functions.py @@ -1987,7 +1987,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ FunctionParameterDecl( name='d', type=PointerType( - inner_type=ValueType(name='mjData'), + inner_type=ValueType(name='mjData', is_const=True), ), ), FunctionParameterDecl( @@ -2019,7 +2019,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ FunctionParameterDecl( name='d', type=PointerType( - inner_type=ValueType(name='mjData'), + inner_type=ValueType(name='mjData', is_const=True), ), ), FunctionParameterDecl( diff --git a/src/engine/engine_core_constraint.c b/src/engine/engine_core_constraint.c index 52ebec3b..42b4ebf8 100644 --- a/src/engine/engine_core_constraint.c +++ b/src/engine/engine_core_constraint.c @@ -375,7 +375,7 @@ int mj_mergeChainSimple(const mjModel* m, int* chain, int b1, int b2) { // multiply Jacobian by vector -void mj_mulJacVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec) { +void mj_mulJacVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec) { // exit if no constraints if (!d->nefc) { return; @@ -396,7 +396,8 @@ void mj_mulJacVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec) { // multiply Jacobian by vector, for one island -void mj_mulJacVec_island(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec, int island) { +void mj_mulJacVec_island(const mjModel* m, const mjData* d, + mjtNum* res, const mjtNum* vec, int island) { // no island, call regular function if (island < 0) { mj_mulJacVec(m, d, res, vec); @@ -435,7 +436,7 @@ void mj_mulJacVec_island(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* // multiply JacobianT by vector -void mj_mulJacTVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec) { +void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec) { // exit if no constraints if (!d->nefc) { return; @@ -456,7 +457,8 @@ void mj_mulJacTVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec) // multiply Jacobian transpose by vector, for one island -void mj_mulJacTVec_island(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec, int island) { +void mj_mulJacTVec_island(const mjModel* m, const mjData* d, + mjtNum* res, const mjtNum* vec, int island) { // no island, call regular function if (island < 0) { mj_mulJacTVec(m, d, res, vec); diff --git a/src/engine/engine_core_constraint.h b/src/engine/engine_core_constraint.h index 3104a339..2dcc42fb 100644 --- a/src/engine/engine_core_constraint.h +++ b/src/engine/engine_core_constraint.h @@ -36,19 +36,18 @@ MJAPI int mj_isSparse(const mjModel* m); MJAPI int mj_isDual(const mjModel* m); // multiply Jacobian by vector -MJAPI void mj_mulJacVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); +MJAPI void mj_mulJacVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); // multiply Jacobian by vector, for one island -MJAPI void mj_mulJacVec_island(const mjModel* m, mjData* d, +MJAPI void mj_mulJacVec_island(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec, int island); -// multiply Jacobian transposed by vector, for one island -MJAPI void mj_mulJacTVec_island(const mjModel* m, mjData* d, - mjtNum* res, const mjtNum* vec, int island); - // multiply JacobianT by vector -MJAPI void mj_mulJacTVec(const mjModel* m, mjData* d, mjtNum* res, const mjtNum* vec); +MJAPI void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec); +// multiply JacobianT by vector, for one island +MJAPI void mj_mulJacTVec_island(const mjModel* m, const mjData* d, + mjtNum* res, const mjtNum* vec, int island); //-------------------------- utility functions -----------------------------------------------------