diff --git a/python/mujoco/specs.cc b/python/mujoco/specs.cc index 783a87b2..872761c7 100644 --- a/python/mujoco/specs.cc +++ b/python/mujoco/specs.cc @@ -18,7 +18,7 @@ #include #include #include // IWYU pragma: keep -#include // IWYU pragma: keep +#include // IWYU pragma: keep #include #include @@ -298,202 +298,201 @@ PYBIND11_MODULE(_specs, m) { mjs_detachBody(self.ptr, &body); }); mjSpec.def_property_readonly( - "actuators", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_ACTUATOR); - while (el) { - list.append(mjs_asActuator(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "actuators", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_ACTUATOR); + while (el) { + list.append(mjs_asActuator(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "sensors", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_SENSOR); - while (el) { - list.append(mjs_asSensor(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "sensors", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_SENSOR); + while (el) { + list.append(mjs_asSensor(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "flexes", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_FLEX); - while (el) { - list.append(mjs_asFlex(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "flexes", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_FLEX); + while (el) { + list.append(mjs_asFlex(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "pairs", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_PAIR); - while (el) { - list.append(mjs_asPair(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "pairs", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_PAIR); + while (el) { + list.append(mjs_asPair(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "equality", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_EQUALITY); - while (el) { - list.append(mjs_asEquality(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "equality", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_EQUALITY); + while (el) { + list.append(mjs_asEquality(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "excludes", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_EXCLUDE); - while (el) { - list.append(mjs_asExclude(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "excludes", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_EXCLUDE); + while (el) { + list.append(mjs_asExclude(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "tendons", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TENDON); - while (el) { - list.append(mjs_asTendon(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "tendons", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TENDON); + while (el) { + list.append(mjs_asTendon(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "numeric", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_NUMERIC); - while (el) { - list.append(mjs_asNumeric(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "numeric", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_NUMERIC); + while (el) { + list.append(mjs_asNumeric(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "text", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TEXT); - while (el) { - list.append(mjs_asText(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "text", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TEXT); + while (el) { + list.append(mjs_asText(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "tuple", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TUPLE); - while (el) { - list.append(mjs_asTuple(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "tuple", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TUPLE); + while (el) { + list.append(mjs_asTuple(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "key", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_KEY); - while (el) { - list.append(mjs_asKey(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "key", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_KEY); + while (el) { + list.append(mjs_asKey(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "mesh", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_MESH); - while (el) { - list.append(mjs_asMesh(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "mesh", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_MESH); + while (el) { + list.append(mjs_asMesh(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "hfield", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_HFIELD); - while (el) { - list.append(mjs_asHField(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "hfield", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_HFIELD); + while (el) { + list.append(mjs_asHField(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "skin", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_SKIN); - while (el) { - list.append(mjs_asSkin(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "skin", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_SKIN); + while (el) { + list.append(mjs_asSkin(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "texture", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TEXTURE); - while (el) { - list.append(mjs_asTexture(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "texture", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_TEXTURE); + while (el) { + list.append(mjs_asTexture(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); mjSpec.def_property_readonly( - "material", - [](MjSpec& self) -> py::list { - py::list list; - raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_MATERIAL); - while (el) { - list.append(mjs_asMaterial(el)); - el = mjs_nextElement(self.ptr, el); - } - return list; - }, - py::return_value_policy::reference_internal); + "material", + [](MjSpec& self) -> py::list { + py::list list; + raw::MjsElement* el = mjs_firstElement(self.ptr, mjOBJ_MATERIAL); + while (el) { + list.append(mjs_asMaterial(el)); + el = mjs_nextElement(self.ptr, el); + } + return list; + }, + py::return_value_policy::reference_internal); // ============================= MJSBODY ===================================== mjsBody.def_property_readonly( - "id", [](raw::MjsBody& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsBody& self) -> int { return mjs_getId(self.element); }); mjsBody.def("delete", [](raw::MjsBody& self) { mjs_delete(self.element); }); mjsBody.def( "add_body", @@ -666,8 +665,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSFRAME ==================================== mjsFrame.def_property_readonly( - "id", [](raw::MjsFrame& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsFrame& self) -> int { return mjs_getId(self.element); }); mjsFrame.def("delete", [](raw::MjsFrame& self) { mjs_delete(self.element); }); mjsFrame.def("set_frame", [](raw::MjsFrame& self, raw::MjsFrame& frame) { mjs_setFrame(self.element, &frame); @@ -679,8 +677,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSGEOM ===================================== mjsGeom.def_property_readonly( - "id", [](raw::MjsGeom& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsGeom& self) -> int { return mjs_getId(self.element); }); mjsGeom.def("delete", [](raw::MjsGeom& self) { mjs_delete(self.element); }); mjsGeom.def("set_frame", [](raw::MjsGeom& self, raw::MjsFrame& frame) { mjs_setFrame(self.element, &frame); @@ -697,8 +694,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSJOINT ==================================== mjsJoint.def_property_readonly( - "id", [](raw::MjsJoint& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsJoint& self) -> int { return mjs_getId(self.element); }); mjsJoint.def("delete", [](raw::MjsJoint& self) { mjs_delete(self.element); }); mjsJoint.def("set_frame", [](raw::MjsJoint& self, raw::MjsFrame& frame) { mjs_setFrame(self.element, &frame); @@ -715,8 +711,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSSITE ===================================== mjsSite.def_property_readonly( - "id", [](raw::MjsSite& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsSite& self) -> int { return mjs_getId(self.element); }); mjsSite.def("delete", [](raw::MjsSite& self) { mjs_delete(self.element); }); mjsSite.def("set_frame", [](raw::MjsSite& self, raw::MjsFrame& frame) { mjs_setFrame(self.element, &frame); @@ -732,9 +727,9 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSCAMERA =================================== - mjsCamera.def_property_readonly( - "id", [](raw::MjsCamera& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsCamera.def_property_readonly("id", [](raw::MjsCamera& self) -> int { + return mjs_getId(self.element); + }); mjsCamera.def("delete", [](raw::MjsCamera& self) { mjs_delete(self.element); }); mjsCamera.def("set_frame", [](raw::MjsCamera& self, raw::MjsFrame& frame) { @@ -752,8 +747,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSLIGHT ==================================== mjsLight.def_property_readonly( - "id", [](raw::MjsLight& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsLight& self) -> int { return mjs_getId(self.element); }); mjsLight.def("delete", [](raw::MjsLight& self) { mjs_delete(self.element); }); mjsLight.def("set_frame", [](raw::MjsLight& self, raw::MjsFrame& frame) { mjs_setFrame(self.element, &frame); @@ -769,10 +763,9 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSMATERIAL ================================= - mjsMaterial.def_property_readonly( - "id", - [](raw::MjsMaterial& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsMaterial.def_property_readonly("id", [](raw::MjsMaterial& self) -> int { + return mjs_getId(self.element); + }); mjsMaterial.def("delete", [](raw::MjsMaterial& self) { mjs_delete(self.element); }); mjsMaterial.def("set_default", @@ -788,8 +781,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSMESH ===================================== mjsMesh.def_property_readonly( - "id", [](raw::MjsMesh& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsMesh& self) -> int { return mjs_getId(self.element); }); mjsMesh.def("delete", [](raw::MjsMesh& self) { mjs_delete(self.element); }); mjsMesh.def("set_default", [](raw::MjsMesh& self, raw::MjsDefault& def) { mjs_setDefault(self.element, &def); @@ -803,8 +795,7 @@ PYBIND11_MODULE(_specs, m) { // ============================= MJSPAIR ===================================== mjsPair.def_property_readonly( - "id", [](raw::MjsPair& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsPair& self) -> int { return mjs_getId(self.element); }); mjsPair.def("delete", [](raw::MjsPair& self) { mjs_delete(self.element); }); mjsPair.def("set_default", [](raw::MjsPair& self, raw::MjsDefault& def) { mjs_setDefault(self.element, &def); @@ -817,10 +808,9 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSEQUAL ==================================== - mjsEquality.def_property_readonly( - "id", - [](raw::MjsEquality& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsEquality.def_property_readonly("id", [](raw::MjsEquality& self) -> int { + return mjs_getId(self.element); + }); mjsEquality.def("delete", [](raw::MjsEquality& self) { mjs_delete(self.element); }); mjsEquality.def("set_default", @@ -835,10 +825,9 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSACTUATOR ================================= - mjsActuator.def_property_readonly( - "id", - [](raw::MjsActuator& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsActuator.def_property_readonly("id", [](raw::MjsActuator& self) -> int { + return mjs_getId(self.element); + }); mjsActuator.def("delete", [](raw::MjsActuator& self) { mjs_delete(self.element); }); mjsActuator.def("set_default", @@ -853,9 +842,9 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSTENDON =================================== - mjsTendon.def_property_readonly( - "id", [](raw::MjsTendon& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsTendon.def_property_readonly("id", [](raw::MjsTendon& self) -> int { + return mjs_getId(self.element); + }); mjsTendon.def("delete", [](raw::MjsTendon& self) { mjs_delete(self.element); }); mjsTendon.def("set_default", [](raw::MjsTendon& self, raw::MjsDefault& def) { @@ -893,22 +882,21 @@ PYBIND11_MODULE(_specs, m) { py::return_value_policy::reference_internal); // ============================= MJSSENSOR =================================== - mjsSensor.def_property_readonly( - "id", [](raw::MjsSensor& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsSensor.def_property_readonly("id", [](raw::MjsSensor& self) -> int { + return mjs_getId(self.element); + }); mjsSensor.def("delete", [](raw::MjsSensor& self) { mjs_delete(self.element); }); // ============================= MJSFLEX ===================================== mjsFlex.def_property_readonly( - "id", [](raw::MjsFlex& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + "id", [](raw::MjsFlex& self) -> int { return mjs_getId(self.element); }); mjsFlex.def("delete", [](raw::MjsFlex& self) { mjs_delete(self.element); }); // ============================= MJSHFIELD =================================== - mjsHField.def_property_readonly( - "id", [](raw::MjsHField& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsHField.def_property_readonly("id", [](raw::MjsHField& self) -> int { + return mjs_getId(self.element); + }); mjsHField.def("delete", [](raw::MjsHField& self) { mjs_delete(self.element); }); @@ -919,46 +907,43 @@ PYBIND11_MODULE(_specs, m) { mjsSkin.def("delete", [](raw::MjsSkin& self) { mjs_delete(self.element); }); // ============================= MJSTEXTURE ================================== - mjsTexture.def_property_readonly( - "id", - [](raw::MjsTexture& self) -> int { return mjs_getId(self.element); }, - py::return_value_policy::reference_internal); + mjsTexture.def_property_readonly("id", [](raw::MjsTexture& self) -> int { + return mjs_getId(self.element); + }); mjsTexture.def("delete", [](raw::MjsTexture& self) { mjs_delete(self.element); }); // ============================= MJSKEY ====================================== - mjsKey.def("id", - [](raw::MjsKey& self) -> int { return mjs_getId(self.element); }); + mjsKey.def_property_readonly( + "id", [](raw::MjsKey& self) -> int { return mjs_getId(self.element); }); mjsKey.def("delete", [](raw::MjsKey& self) { mjs_delete(self.element); }); // ============================= MJSTEXT ===================================== - mjsText.def("id", [](raw::MjsText& self) -> int { - return mjs_getId(self.element); - }); + mjsText.def_property_readonly( + "id", [](raw::MjsText& self) -> int { return mjs_getId(self.element); }); mjsText.def("delete", [](raw::MjsText& self) { mjs_delete(self.element); }); // ============================= MJSNUMERIC ================================== - mjsNumeric.def("id", [](raw::MjsNumeric& self) -> int { + mjsNumeric.def_property_readonly("id", [](raw::MjsNumeric& self) -> int { return mjs_getId(self.element); }); mjsNumeric.def("delete", [](raw::MjsNumeric& self) { mjs_delete(self.element); }); // ============================= MJSEXCLUDE ================================== - mjsExclude.def("id", [](raw::MjsExclude& self) -> int { + mjsExclude.def_property_readonly("id", [](raw::MjsExclude& self) -> int { return mjs_getId(self.element); }); mjsExclude.def("delete", [](raw::MjsExclude& self) { mjs_delete(self.element); }); // ============================= MJSTUPLE ==================================== - mjsTuple.def("id", [](raw::MjsTuple& self) -> int { - return mjs_getId(self.element); - }); + mjsTuple.def_property_readonly( + "id", [](raw::MjsTuple& self) -> int { return mjs_getId(self.element); }); mjsTuple.def("delete", [](raw::MjsTuple& self) { mjs_delete(self.element); }); // ============================= MJSPLUGIN =================================== - mjsPlugin.def("id", [](raw::MjsPlugin& self) -> int { + mjsPlugin.def_property_readonly("id", [](raw::MjsPlugin& self) -> int { return mjs_getId(self.instance); }); mjsPlugin.def("delete",