mujoco 3.6.0__tar.gz → 3.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. {mujoco-3.6.0/mujoco.egg-info → mujoco-3.7.0}/PKG-INFO +3 -3
  2. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/CMakeLists.txt +3 -3
  3. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/bindings_test.py +23 -0
  4. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/callbacks.cc +1 -2
  5. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/MujocoLinkOptions.cmake +2 -2
  6. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/ShellTests.cmake +0 -1
  7. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/constants.cc +1 -0
  8. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/enum_traits.h +3 -1
  9. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/function_traits.h +56 -1
  10. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/functions.cc +1 -1
  11. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/indexer_xmacro.h +5 -1
  12. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/codegen/generate_structs.py +2 -0
  13. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/enums.py +11 -9
  14. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/functions.py +190 -1
  15. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/structs.py +111 -19
  16. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/structs_test.py +1 -3
  17. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/mjpython/Info.plist +4 -4
  18. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/render.cc +0 -19
  19. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/CMakeLists.txt +1 -1
  20. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/MujocoLinkOptions.cmake +2 -2
  21. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/simulate.cc +8 -8
  22. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/simulate.h +0 -2
  23. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate.cc +26 -41
  24. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/specs.cc +79 -18
  25. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/specs.cc.inc +1056 -856
  26. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/specs_test.py +52 -3
  27. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/structs.cc +33 -1
  28. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/structs_wrappers.cc +12 -1
  29. {mujoco-3.6.0 → mujoco-3.7.0/mujoco.egg-info}/PKG-INFO +3 -3
  30. {mujoco-3.6.0 → mujoco-3.7.0}/pyproject.toml +3 -3
  31. {mujoco-3.6.0 → mujoco-3.7.0}/LICENSE +0 -0
  32. {mujoco-3.6.0 → mujoco-3.7.0}/LICENSES_THIRD_PARTY.md +0 -0
  33. {mujoco-3.6.0 → mujoco-3.7.0}/MANIFEST.in +0 -0
  34. {mujoco-3.6.0 → mujoco-3.7.0}/README.md +0 -0
  35. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/__init__.py +0 -0
  36. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cgl/__init__.py +0 -0
  37. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cgl/cgl.py +0 -0
  38. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/CheckAvxSupport.cmake +0 -0
  39. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/FindOrFetch.cmake +0 -0
  40. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/MujocoDependencies.cmake +0 -0
  41. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/MujocoHarden.cmake +0 -0
  42. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/MujocoMacOS.cmake +0 -0
  43. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/MujocoOptions.cmake +0 -0
  44. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/cmake/TargetAddRpath.cmake +0 -0
  45. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/egl/__init__.py +0 -0
  46. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/egl/egl_ext.py +0 -0
  47. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/enums.cc +0 -0
  48. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/errors.cc +0 -0
  49. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/errors.h +0 -0
  50. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/functions.h +0 -0
  51. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/gl_context.py +0 -0
  52. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/glfw/__init__.py +0 -0
  53. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/indexers.cc +0 -0
  54. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/indexers.h +0 -0
  55. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/__init__.py +0 -0
  56. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/ast_nodes.py +0 -0
  57. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/ast_nodes_test.py +0 -0
  58. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/codegen/formatter.py +0 -0
  59. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/codegen/generate_enums.py +0 -0
  60. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/codegen/generate_functions.py +0 -0
  61. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/enums_test.py +0 -0
  62. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/functions_test.py +0 -0
  63. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/mjxmacro.py +0 -0
  64. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/type_parsing.py +0 -0
  65. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/introspect/type_parsing_test.py +0 -0
  66. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/memory_leak_test.py +0 -0
  67. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/minimize.py +0 -0
  68. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/minimize_test.py +0 -0
  69. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/mjpython/mjpython.icns +0 -0
  70. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/mjpython/mjpython.mm +0 -0
  71. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/mjpython/mjpython.py +0 -0
  72. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/msh2obj.py +0 -0
  73. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/msh2obj_test.py +0 -0
  74. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/osmesa/__init__.py +0 -0
  75. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/private.h +0 -0
  76. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/raw.h +0 -0
  77. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/render_test.py +0 -0
  78. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/renderer.py +0 -0
  79. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/renderer_test.py +0 -0
  80. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rendering/classic/__init__.py +0 -0
  81. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rendering/classic/gl_context.py +0 -0
  82. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rendering/classic/renderer.py +0 -0
  83. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rollout.cc +0 -0
  84. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rollout.py +0 -0
  85. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/rollout_test.py +0 -0
  86. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/serialization.h +0 -0
  87. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/array_safety.h +0 -0
  88. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/CheckAvxSupport.cmake +0 -0
  89. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/FindOrFetch.cmake +0 -0
  90. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/MujocoHarden.cmake +0 -0
  91. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/MujocoMacOS.cmake +0 -0
  92. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/SimulateDependencies.cmake +0 -0
  93. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/cmake/SimulateOptions.cmake +0 -0
  94. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_adapter.cc +0 -0
  95. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_adapter.h +0 -0
  96. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_corevideo.h +0 -0
  97. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_corevideo.mm +0 -0
  98. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_dispatch.cc +0 -0
  99. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/glfw_dispatch.h +0 -0
  100. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/macos_gui.mm +0 -0
  101. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/main.cc +0 -0
  102. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/platform_ui_adapter.cc +0 -0
  103. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/simulate/platform_ui_adapter.h +0 -0
  104. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/specs_wrapper.cc +0 -0
  105. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/specs_wrapper.h +0 -0
  106. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/structs.h +0 -0
  107. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/__init__.py +0 -0
  108. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/__init__.py +0 -0
  109. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/io.py +0 -0
  110. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/model_modifier.py +0 -0
  111. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/optimize.py +0 -0
  112. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/parameter.py +0 -0
  113. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/plotting.py +0 -0
  114. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/residual.py +0 -0
  115. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/signal_modifier.py +0 -0
  116. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/signal_transform.py +0 -0
  117. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/timeseries.py +0 -0
  118. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/_src/trajectory.py +0 -0
  119. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/py.typed +0 -0
  120. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/builder.py +0 -0
  121. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/defaults.py +0 -0
  122. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/__init__.py +0 -0
  123. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/base.py +0 -0
  124. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/covariance.py +0 -0
  125. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/group.py +0 -0
  126. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/insights.py +0 -0
  127. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/optimization_trace.py +0 -0
  128. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/parameter_distribution.py +0 -0
  129. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/parameters.py +0 -0
  130. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/row.py +0 -0
  131. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/signals.py +0 -0
  132. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/sections/video.py +0 -0
  133. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/covariance.html +0 -0
  134. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/group.html +0 -0
  135. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/insights.html +0 -0
  136. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/layout.html +0 -0
  137. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/optimization_trace.html +0 -0
  138. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/parameter_confidence.html +0 -0
  139. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/parameters_table.html +0 -0
  140. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/plot_generic.html +0 -0
  141. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/row.html +0 -0
  142. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/signals.html +0 -0
  143. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/templates/video.html +0 -0
  144. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/report/utils.py +0 -0
  145. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/__init__.py +0 -0
  146. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/conftest.py +0 -0
  147. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_integration.py +0 -0
  148. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_model_modifier.py +0 -0
  149. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_parameter.py +0 -0
  150. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_signal.py +0 -0
  151. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_timeseries.py +0 -0
  152. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/sysid/tests/test_trajectory.py +0 -0
  153. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/MJCF_NoRoot.zip +0 -0
  154. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/MJCF_Root.zip +0 -0
  155. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/abdomen_1_body.msh +0 -0
  156. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/model.urdf +0 -0
  157. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/model.xml +0 -0
  158. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/msh.xml +0 -0
  159. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/simple_usd_preview_surface.usda +0 -0
  160. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/testdata/usd_golden.usda +0 -0
  161. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/threadpool.cc +0 -0
  162. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/threadpool.h +0 -0
  163. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/camera.py +0 -0
  164. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/demo.py +0 -0
  165. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/exporter.py +0 -0
  166. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/exporter_test.py +0 -0
  167. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/lights.py +0 -0
  168. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/objects.py +0 -0
  169. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/shapes.py +0 -0
  170. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/usd/utils.py +0 -0
  171. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/CMakeLists.txt +0 -0
  172. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/array_traits.h +0 -0
  173. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/array_traits_test.cc +0 -0
  174. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/crossplatform.h +0 -0
  175. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/func_traits.h +0 -0
  176. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/func_traits_test.cc +0 -0
  177. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/func_wrap.h +0 -0
  178. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/func_wrap_test.cc +0 -0
  179. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/tuple_tools.h +0 -0
  180. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/util/tuple_tools_test.cc +0 -0
  181. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/viewer.py +0 -0
  182. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco/viewer_test.py +0 -0
  183. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco.egg-info/SOURCES.txt +0 -0
  184. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco.egg-info/dependency_links.txt +0 -0
  185. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco.egg-info/requires.txt +0 -0
  186. {mujoco-3.6.0 → mujoco-3.7.0}/mujoco.egg-info/top_level.txt +0 -0
  187. {mujoco-3.6.0 → mujoco-3.7.0}/setup.cfg +0 -0
  188. {mujoco-3.6.0 → mujoco-3.7.0}/setup.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mujoco
3
- Version: 3.6.0
3
+ Version: 3.7.0
4
4
  Summary: MuJoCo Physics Simulator
5
5
  Author-email: Google DeepMind <mujoco@deepmind.com>
6
6
  License-Expression: Apache-2.0
7
7
  Project-URL: Homepage, https://github.com/google-deepmind/mujoco
8
- Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.6.0
8
+ Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.7.0
9
9
  Project-URL: Repository, https://github.com/google-deepmind/mujoco
10
- Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.6.0/changelog.html
10
+ Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.7.0/changelog.html
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Science/Research
@@ -86,7 +86,7 @@ if(NOT TARGET mujoco)
86
86
  if(MUJOCO_FRAMEWORK)
87
87
  message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
88
88
  set(MUJOCO_LIBRARY
89
- ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.6.0.dylib
89
+ ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.7.0.dylib
90
90
  )
91
91
  target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
92
92
  endif()
@@ -94,7 +94,7 @@ if(NOT TARGET mujoco)
94
94
 
95
95
  if(NOT MUJOCO_FRAMEWORK)
96
96
  find_library(
97
- MUJOCO_LIBRARY mujoco mujoco.3.6.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
97
+ MUJOCO_LIBRARY mujoco mujoco.3.7.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
98
98
  )
99
99
  find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
100
100
  message("MuJoCo is at ${MUJOCO_LIBRARY}")
@@ -193,7 +193,7 @@ findorfetch(
193
193
  GIT_REPO
194
194
  https://github.com/pybind/pybind11
195
195
  GIT_TAG
196
- e86205cb2ba070755d582856430c0f83c0af6694 # v3.0.1
196
+ d0f1a2168f3335426f544171a3463c36edbd5cc3 # v3.0.3
197
197
  TARGETS
198
198
  pybind11::pybind11_headers
199
199
  EXCLUDE_FROM_ALL
@@ -1881,6 +1881,29 @@ Euler integrator, semi-implicit in velocity.
1881
1881
  mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
1882
1882
  np.testing.assert_array_equal(result, [1, 0, 0, 0])
1883
1883
 
1884
+ def test_poly_stiffness(self):
1885
+ xml = r"""
1886
+ <mujoco>
1887
+ <worldbody>
1888
+ <body>
1889
+ <geom type="sphere" size="0.1"/>
1890
+ <joint name="slide" type="slide" stiffness="1 2 3"/>
1891
+ </body>
1892
+ </worldbody>
1893
+ </mujoco>
1894
+ """
1895
+ model = mujoco.MjModel.from_xml_string(xml)
1896
+ data = mujoco.MjData(model)
1897
+ self.assertEqual(model.jnt_stiffness[0], 1)
1898
+ np.testing.assert_array_equal(
1899
+ model.jnt_stiffnesspoly[0], [2, 3])
1900
+
1901
+ x = 0.5
1902
+ data.qpos[0] = x
1903
+ mujoco.mj_forward(model, data)
1904
+ expected = -(1*x + 2*x*abs(x) + 3*x**3)
1905
+ np.testing.assert_allclose(data.qfrc_spring[0], expected)
1906
+
1884
1907
  def _assert_attributes_equal(self, actual_obj, expected_obj, attr_to_compare):
1885
1908
  for name in attr_to_compare:
1886
1909
  actual_value = getattr(actual_obj, name)
@@ -91,8 +91,7 @@ static enable_if_not_const_t<Raw, py::handle> MjWrapperLookup(Raw* ptr) {
91
91
  // TODO(stunya): Figure out a way to do this without invoking py::detail.
92
92
  {
93
93
  py::gil_scoped_acquire gil;
94
- const auto [src, type] =
95
- py::detail::type_caster_base<MjWrapper<Raw>>::src_and_type(wrapper);
94
+ auto* type = py::detail::get_type_info(typeid(MjWrapper<Raw>));
96
95
  if (type) {
97
96
  py::object instance = py::reinterpret_steal<py::object>(
98
97
  py::detail::find_registered_python_instance(wrapper, type));
@@ -43,12 +43,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR)
43
43
  endif()
44
44
  endif()
45
45
 
46
- set(CMAKE_REQUIRED_FLAGS ${EXTRA_LINK_OPTIONS} "-Wl,--gc-sections")
46
+ set(CMAKE_REQUIRED_FLAGS "${EXTRA_LINK_OPTIONS} -Wl,--gc-sections")
47
47
  check_c_source_compiles("int main() {}" SUPPORTS_GC_SECTIONS)
48
48
  if(SUPPORTS_GC_SECTIONS)
49
49
  set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--gc-sections)
50
50
  else()
51
- set(CMAKE_REQUIRED_FLAGS ${EXTRA_LINK_OPTIONS} "-Wl,-dead_strip")
51
+ set(CMAKE_REQUIRED_FLAGS "${EXTRA_LINK_OPTIONS} -Wl,-dead_strip")
52
52
  check_c_source_compiles("int main() {}" SUPPORTS_DEAD_STRIP)
53
53
  if(SUPPORTS_DEAD_STRIP)
54
54
  set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,-dead_strip)
@@ -38,7 +38,6 @@ function(add_mujoco_shell_test TEST_NAME TARGET_BINARY)
38
38
  "CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
39
39
  "TARGET_BINARY=$<TARGET_FILE:${TARGET_BINARY}>"
40
40
  "TEST_TMPDIR=${TEST_TMPDIR}"
41
- "MUJOCO_PLUGIN_DIR=$<TARGET_FILE_DIR:obj_decoder>"
42
41
  )
43
42
  if(WIN32)
44
43
  # Define the directory containing the mujoco DLL library so that it can be added to the PATH.
@@ -70,6 +70,7 @@ PYBIND11_MODULE(_constants, pymodule) {
70
70
  X(mjNSENS);
71
71
  X(mjNSOLVER);
72
72
  X(mjNISLAND);
73
+ X(mjNPOLY);
73
74
 
74
75
  // from mjvisualize.h
75
76
  X(mjNGROUP);
@@ -246,6 +246,7 @@ struct mjtDyn {
246
246
  std::make_pair("mjDYN_FILTER", ::mjtDyn::mjDYN_FILTER),
247
247
  std::make_pair("mjDYN_FILTEREXACT", ::mjtDyn::mjDYN_FILTEREXACT),
248
248
  std::make_pair("mjDYN_MUSCLE", ::mjtDyn::mjDYN_MUSCLE),
249
+ std::make_pair("mjDYN_DCMOTOR", ::mjtDyn::mjDYN_DCMOTOR),
249
250
  std::make_pair("mjDYN_USER", ::mjtDyn::mjDYN_USER)};
250
251
  };
251
252
 
@@ -256,6 +257,7 @@ struct mjtGain {
256
257
  std::make_pair("mjGAIN_FIXED", ::mjtGain::mjGAIN_FIXED),
257
258
  std::make_pair("mjGAIN_AFFINE", ::mjtGain::mjGAIN_AFFINE),
258
259
  std::make_pair("mjGAIN_MUSCLE", ::mjtGain::mjGAIN_MUSCLE),
260
+ std::make_pair("mjGAIN_DCMOTOR", ::mjtGain::mjGAIN_DCMOTOR),
259
261
  std::make_pair("mjGAIN_USER", ::mjtGain::mjGAIN_USER)};
260
262
  };
261
263
 
@@ -266,6 +268,7 @@ struct mjtBias {
266
268
  std::make_pair("mjBIAS_NONE", ::mjtBias::mjBIAS_NONE),
267
269
  std::make_pair("mjBIAS_AFFINE", ::mjtBias::mjBIAS_AFFINE),
268
270
  std::make_pair("mjBIAS_MUSCLE", ::mjtBias::mjBIAS_MUSCLE),
271
+ std::make_pair("mjBIAS_DCMOTOR", ::mjtBias::mjBIAS_DCMOTOR),
269
272
  std::make_pair("mjBIAS_USER", ::mjtBias::mjBIAS_USER)};
270
273
  };
271
274
 
@@ -539,7 +542,6 @@ struct mjtWarning {
539
542
  std::make_pair("mjWARN_INERTIA", ::mjtWarning::mjWARN_INERTIA),
540
543
  std::make_pair("mjWARN_CONTACTFULL", ::mjtWarning::mjWARN_CONTACTFULL),
541
544
  std::make_pair("mjWARN_CNSTRFULL", ::mjtWarning::mjWARN_CNSTRFULL),
542
- std::make_pair("mjWARN_VGEOMFULL", ::mjtWarning::mjWARN_VGEOMFULL),
543
545
  std::make_pair("mjWARN_BADQPOS", ::mjtWarning::mjWARN_BADQPOS),
544
546
  std::make_pair("mjWARN_BADQVEL", ::mjtWarning::mjWARN_BADQVEL),
545
547
  std::make_pair("mjWARN_BADQACC", ::mjtWarning::mjWARN_BADQACC),
@@ -198,6 +198,17 @@ struct mj_parse {
198
198
  }
199
199
  };
200
200
 
201
+ struct mj_encode {
202
+ static constexpr char name[] = "mj_encode";
203
+ static constexpr char doc[] = "Encode spec/model to a file using a registered encoder. Returns the number of bytes written on success, -1 on failure.";
204
+ using type = int (const mjSpec *, const mjModel *, const char *, const char *, const mjVFS *, char *, int);
205
+ static constexpr auto param_names = std::make_tuple("s", "m", "filename", "content_type", "vfs", "error", "error_sz");
206
+
207
+ MUJOCO_ALWAYS_INLINE static type& GetFunc() {
208
+ return ::mj_encode;
209
+ }
210
+ };
211
+
201
212
  struct mj_compile {
202
213
  static constexpr char name[] = "mj_compile";
203
214
  static constexpr char doc[] = "Compile spec to model.";
@@ -1642,7 +1653,7 @@ struct mj_objectAcceleration {
1642
1653
  struct mj_geomDistance {
1643
1654
  static constexpr char name[] = "mj_geomDistance";
1644
1655
  static constexpr char doc[] = "Return smallest signed distance between two geoms and optionally segment from geom1 to geom2.";
1645
- using type = mjtNum (const mjModel *, const mjData *, int, int, mjtNum, mjtNum (*)[6]);
1656
+ using type = mjtNum (const mjModel *, mjData *, int, int, mjtNum, mjtNum (*)[6]);
1646
1657
  static constexpr auto param_names = std::make_tuple("m", "d", "geom1", "geom2", "distmax", "fromto");
1647
1658
 
1648
1659
  MUJOCO_ALWAYS_INLINE static type& GetFunc() {
@@ -4048,6 +4059,39 @@ struct mjp_findDecoder {
4048
4059
  }
4049
4060
  };
4050
4061
 
4062
+ struct mjp_registerEncoder {
4063
+ static constexpr char name[] = "mjp_registerEncoder";
4064
+ static constexpr char doc[] = "Globally register an encoder. This function is thread-safe. If an identical mjpEncoder is already registered, this function does nothing. If a non-identical mjpEncoder with the same name is already registered, an mju_error is raised.";
4065
+ using type = void (const mjpEncoder *);
4066
+ static constexpr auto param_names = std::make_tuple("encoder");
4067
+
4068
+ MUJOCO_ALWAYS_INLINE static type& GetFunc() {
4069
+ return ::mjp_registerEncoder;
4070
+ }
4071
+ };
4072
+
4073
+ struct mjp_defaultEncoder {
4074
+ static constexpr char name[] = "mjp_defaultEncoder";
4075
+ static constexpr char doc[] = "Set default resource encoder definition.";
4076
+ using type = void (mjpEncoder *);
4077
+ static constexpr auto param_names = std::make_tuple("encoder");
4078
+
4079
+ MUJOCO_ALWAYS_INLINE static type& GetFunc() {
4080
+ return ::mjp_defaultEncoder;
4081
+ }
4082
+ };
4083
+
4084
+ struct mjp_findEncoder {
4085
+ static constexpr char name[] = "mjp_findEncoder";
4086
+ static constexpr char doc[] = "Return the encoder that matches against the content type or filename extension. If no match, return NULL.";
4087
+ using type = const mjpEncoder * (const char *, const char *);
4088
+ static constexpr auto param_names = std::make_tuple("filename", "content_type");
4089
+
4090
+ MUJOCO_ALWAYS_INLINE static type& GetFunc() {
4091
+ return ::mjp_findEncoder;
4092
+ }
4093
+ };
4094
+
4051
4095
  struct mju_openResource {
4052
4096
  static constexpr char name[] = "mju_openResource";
4053
4097
  static constexpr char doc[] = "Open a resource; if the name doesn't have a prefix matching a registered resource provider, then the OS filesystem is used.";
@@ -4565,6 +4609,17 @@ struct mjs_setToAdhesion {
4565
4609
  }
4566
4610
  };
4567
4611
 
4612
+ struct mjs_setToDCMotor {
4613
+ static constexpr char name[] = "mjs_setToDCMotor";
4614
+ static constexpr char doc[] = "Set actuator to DC motor; return error if any.";
4615
+ using type = const char * (mjsActuator *, double (*)[2], double, double (*)[3], double (*)[3], double (*)[2], double (*)[3], double (*)[6], double (*)[6], double (*)[5], int);
4616
+ static constexpr auto param_names = std::make_tuple("actuator", "motorconst", "resistance", "nominal", "saturation", "inductance", "cogging", "controller", "thermal", "lugre", "input_mode");
4617
+
4618
+ MUJOCO_ALWAYS_INLINE static type& GetFunc() {
4619
+ return *reinterpret_cast<type*>(&::mjs_setToDCMotor);
4620
+ }
4621
+ };
4622
+
4568
4623
  struct mjs_addMesh {
4569
4624
  static constexpr char name[] = "mjs_addMesh";
4570
4625
  static constexpr char doc[] = "Add mesh.";
@@ -663,7 +663,7 @@ PYBIND11_MODULE(_functions, pymodule) {
663
663
  Def<traits::mj_contactForce>(pymodule);
664
664
  Def<traits::mj_geomDistance>(
665
665
  pymodule,
666
- [](const raw::MjModel* m, const raw::MjData* d,
666
+ [](const raw::MjModel* m, raw::MjData* d,
667
667
  int geom1, int geom2, mjtNum distmax,
668
668
  std::optional<Eigen::Ref<EigenArrayXX>> fromto) {
669
669
  if (fromto.has_value() && fromto->size() != 6) {
@@ -15,7 +15,7 @@
15
15
  #ifndef MUJOCO_PYTHON_INDEXER_XMACRO_H_
16
16
  #define MUJOCO_PYTHON_INDEXER_XMACRO_H_
17
17
 
18
- #include <mujoco/mjxmacro.h>
18
+ #include <mujoco/mjxmacro.h> // IWYU pragma: keep
19
19
 
20
20
  #define MJMODEL_ACTUATOR \
21
21
  X( int, actuator_, trntype, nu, 1 ) \
@@ -132,6 +132,7 @@
132
132
  X( mjtNum, jnt_, pos, njnt, 3 ) \
133
133
  X( mjtNum, jnt_, axis, njnt, 3 ) \
134
134
  X( mjtNum, jnt_, stiffness, njnt, 1 ) \
135
+ X( mjtNum, jnt_, stiffnesspoly, njnt, mjNPOLY ) \
135
136
  X( mjtNum, jnt_, range, njnt, 2 ) \
136
137
  X( mjtNum, jnt_, margin, njnt, 1 ) \
137
138
  X( mjtNum, jnt_, user, njnt, MJ_M(nuser_jnt) ) \
@@ -145,6 +146,7 @@
145
146
  X( mjtNum, dof_, frictionloss, nv, 1 ) \
146
147
  X( mjtNum, dof_, armature, nv, 1 ) \
147
148
  X( mjtNum, dof_, damping, nv, 1 ) \
149
+ X( mjtNum, dof_, dampingpoly, nv, mjNPOLY ) \
148
150
  X( mjtNum, dof_, invweight0, nv, 1 ) \
149
151
  X( mjtNum, dof_, M0, nv, 1 )
150
152
 
@@ -253,7 +255,9 @@
253
255
  X( mjtNum, tendon, _range, ntendon, 2 ) \
254
256
  X( mjtNum, tendon, _margin, ntendon, 1 ) \
255
257
  X( mjtNum, tendon, _stiffness, ntendon, 1 ) \
258
+ X( mjtNum, tendon, _stiffnesspoly, ntendon, mjNPOLY ) \
256
259
  X( mjtNum, tendon, _damping, ntendon, 1 ) \
260
+ X( mjtNum, tendon, _dampingpoly, ntendon, mjNPOLY ) \
257
261
  X( mjtNum, tendon, _frictionloss, ntendon, 1 ) \
258
262
  X( mjtNum, tendon, _lengthspring, ntendon, 1 ) \
259
263
  X( mjtNum, tendon, _length0, ntendon, 1 ) \
@@ -41,6 +41,8 @@ _ANONYMOUS_KEY_PATTERN = re.compile(r'\d+:\d+(?=\))')
41
41
  _EXCLUDED = (
42
42
  'mjpDecoder',
43
43
  'mjpDecoder_',
44
+ 'mjpEncoder',
45
+ 'mjpEncoder_',
44
46
  'mjpPlugin',
45
47
  'mjpPlugin_',
46
48
  'mjpResourceProvider',
@@ -263,7 +263,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
263
263
  ('mjDYN_FILTER', 2),
264
264
  ('mjDYN_FILTEREXACT', 3),
265
265
  ('mjDYN_MUSCLE', 4),
266
- ('mjDYN_USER', 5),
266
+ ('mjDYN_DCMOTOR', 5),
267
+ ('mjDYN_USER', 6),
267
268
  ]),
268
269
  )),
269
270
  ('mjtGain',
@@ -274,7 +275,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
274
275
  ('mjGAIN_FIXED', 0),
275
276
  ('mjGAIN_AFFINE', 1),
276
277
  ('mjGAIN_MUSCLE', 2),
277
- ('mjGAIN_USER', 3),
278
+ ('mjGAIN_DCMOTOR', 3),
279
+ ('mjGAIN_USER', 4),
278
280
  ]),
279
281
  )),
280
282
  ('mjtBias',
@@ -285,7 +287,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
285
287
  ('mjBIAS_NONE', 0),
286
288
  ('mjBIAS_AFFINE', 1),
287
289
  ('mjBIAS_MUSCLE', 2),
288
- ('mjBIAS_USER', 3),
290
+ ('mjBIAS_DCMOTOR', 3),
291
+ ('mjBIAS_USER', 4),
289
292
  ]),
290
293
  )),
291
294
  ('mjtObj',
@@ -575,12 +578,11 @@ ENUMS: Mapping[str, EnumDecl] = dict([
575
578
  ('mjWARN_INERTIA', 0),
576
579
  ('mjWARN_CONTACTFULL', 1),
577
580
  ('mjWARN_CNSTRFULL', 2),
578
- ('mjWARN_VGEOMFULL', 3),
579
- ('mjWARN_BADQPOS', 4),
580
- ('mjWARN_BADQVEL', 5),
581
- ('mjWARN_BADQACC', 6),
582
- ('mjWARN_BADCTRL', 7),
583
- ('mjNWARNING', 8),
581
+ ('mjWARN_BADQPOS', 3),
582
+ ('mjWARN_BADQVEL', 4),
583
+ ('mjWARN_BADQACC', 5),
584
+ ('mjWARN_BADCTRL', 6),
585
+ ('mjNWARNING', 7),
584
586
  ]),
585
587
  )),
586
588
  ('mjtTimer',
@@ -387,6 +387,57 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
387
387
  ),
388
388
  doc='Parse spec from a file.',
389
389
  )),
390
+ ('mj_encode',
391
+ FunctionDecl(
392
+ name='mj_encode',
393
+ return_type=ValueType(name='int'),
394
+ parameters=(
395
+ FunctionParameterDecl(
396
+ name='s',
397
+ type=PointerType(
398
+ inner_type=ValueType(name='mjSpec', is_const=True),
399
+ ),
400
+ ),
401
+ FunctionParameterDecl(
402
+ name='m',
403
+ type=PointerType(
404
+ inner_type=ValueType(name='mjModel', is_const=True),
405
+ ),
406
+ nullable=True,
407
+ ),
408
+ FunctionParameterDecl(
409
+ name='filename',
410
+ type=PointerType(
411
+ inner_type=ValueType(name='char', is_const=True),
412
+ ),
413
+ ),
414
+ FunctionParameterDecl(
415
+ name='content_type',
416
+ type=PointerType(
417
+ inner_type=ValueType(name='char', is_const=True),
418
+ ),
419
+ ),
420
+ FunctionParameterDecl(
421
+ name='vfs',
422
+ type=PointerType(
423
+ inner_type=ValueType(name='mjVFS', is_const=True),
424
+ ),
425
+ nullable=True,
426
+ ),
427
+ FunctionParameterDecl(
428
+ name='error',
429
+ type=PointerType(
430
+ inner_type=ValueType(name='char'),
431
+ ),
432
+ nullable=True,
433
+ ),
434
+ FunctionParameterDecl(
435
+ name='error_sz',
436
+ type=ValueType(name='int'),
437
+ ),
438
+ ),
439
+ doc='Encode spec/model to a file using a registered encoder. Returns the number of bytes written on success, -1 on failure.', # pylint: disable=line-too-long
440
+ )),
390
441
  ('mj_compile',
391
442
  FunctionDecl(
392
443
  name='mj_compile',
@@ -3626,7 +3677,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
3626
3677
  FunctionParameterDecl(
3627
3678
  name='d',
3628
3679
  type=PointerType(
3629
- inner_type=ValueType(name='mjData', is_const=True),
3680
+ inner_type=ValueType(name='mjData'),
3630
3681
  ),
3631
3682
  ),
3632
3683
  FunctionParameterDecl(
@@ -9600,6 +9651,56 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
9600
9651
  ),
9601
9652
  doc='Return the resource provider with the prefix that matches against the resource name. If no match, return NULL.', # pylint: disable=line-too-long
9602
9653
  )),
9654
+ ('mjp_registerEncoder',
9655
+ FunctionDecl(
9656
+ name='mjp_registerEncoder',
9657
+ return_type=ValueType(name='void'),
9658
+ parameters=(
9659
+ FunctionParameterDecl(
9660
+ name='encoder',
9661
+ type=PointerType(
9662
+ inner_type=ValueType(name='mjpEncoder', is_const=True),
9663
+ ),
9664
+ ),
9665
+ ),
9666
+ doc='Globally register an encoder. This function is thread-safe. If an identical mjpEncoder is already registered, this function does nothing. If a non-identical mjpEncoder with the same name is already registered, an mju_error is raised.', # pylint: disable=line-too-long
9667
+ )),
9668
+ ('mjp_defaultEncoder',
9669
+ FunctionDecl(
9670
+ name='mjp_defaultEncoder',
9671
+ return_type=ValueType(name='void'),
9672
+ parameters=(
9673
+ FunctionParameterDecl(
9674
+ name='encoder',
9675
+ type=PointerType(
9676
+ inner_type=ValueType(name='mjpEncoder'),
9677
+ ),
9678
+ ),
9679
+ ),
9680
+ doc='Set default resource encoder definition.',
9681
+ )),
9682
+ ('mjp_findEncoder',
9683
+ FunctionDecl(
9684
+ name='mjp_findEncoder',
9685
+ return_type=PointerType(
9686
+ inner_type=ValueType(name='mjpEncoder', is_const=True),
9687
+ ),
9688
+ parameters=(
9689
+ FunctionParameterDecl(
9690
+ name='filename',
9691
+ type=PointerType(
9692
+ inner_type=ValueType(name='char', is_const=True),
9693
+ ),
9694
+ ),
9695
+ FunctionParameterDecl(
9696
+ name='content_type',
9697
+ type=PointerType(
9698
+ inner_type=ValueType(name='char', is_const=True),
9699
+ ),
9700
+ ),
9701
+ ),
9702
+ doc='Return the encoder that matches against the content type or filename extension. If no match, return NULL.', # pylint: disable=line-too-long
9703
+ )),
9603
9704
  ('mju_openResource',
9604
9705
  FunctionDecl(
9605
9706
  name='mju_openResource',
@@ -10685,6 +10786,94 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
10685
10786
  ),
10686
10787
  doc='Set actuator to active adhesion; return error if any.',
10687
10788
  )),
10789
+ ('mjs_setToDCMotor',
10790
+ FunctionDecl(
10791
+ name='mjs_setToDCMotor',
10792
+ return_type=PointerType(
10793
+ inner_type=ValueType(name='char', is_const=True),
10794
+ ),
10795
+ parameters=(
10796
+ FunctionParameterDecl(
10797
+ name='actuator',
10798
+ type=PointerType(
10799
+ inner_type=ValueType(name='mjsActuator'),
10800
+ ),
10801
+ ),
10802
+ FunctionParameterDecl(
10803
+ name='motorconst',
10804
+ type=ArrayType(
10805
+ inner_type=ValueType(name='double'),
10806
+ extents=(2,),
10807
+ ),
10808
+ nullable=True,
10809
+ ),
10810
+ FunctionParameterDecl(
10811
+ name='resistance',
10812
+ type=ValueType(name='double'),
10813
+ ),
10814
+ FunctionParameterDecl(
10815
+ name='nominal',
10816
+ type=ArrayType(
10817
+ inner_type=ValueType(name='double'),
10818
+ extents=(3,),
10819
+ ),
10820
+ nullable=True,
10821
+ ),
10822
+ FunctionParameterDecl(
10823
+ name='saturation',
10824
+ type=ArrayType(
10825
+ inner_type=ValueType(name='double'),
10826
+ extents=(3,),
10827
+ ),
10828
+ nullable=True,
10829
+ ),
10830
+ FunctionParameterDecl(
10831
+ name='inductance',
10832
+ type=ArrayType(
10833
+ inner_type=ValueType(name='double'),
10834
+ extents=(2,),
10835
+ ),
10836
+ nullable=True,
10837
+ ),
10838
+ FunctionParameterDecl(
10839
+ name='cogging',
10840
+ type=ArrayType(
10841
+ inner_type=ValueType(name='double'),
10842
+ extents=(3,),
10843
+ ),
10844
+ nullable=True,
10845
+ ),
10846
+ FunctionParameterDecl(
10847
+ name='controller',
10848
+ type=ArrayType(
10849
+ inner_type=ValueType(name='double'),
10850
+ extents=(6,),
10851
+ ),
10852
+ nullable=True,
10853
+ ),
10854
+ FunctionParameterDecl(
10855
+ name='thermal',
10856
+ type=ArrayType(
10857
+ inner_type=ValueType(name='double'),
10858
+ extents=(6,),
10859
+ ),
10860
+ nullable=True,
10861
+ ),
10862
+ FunctionParameterDecl(
10863
+ name='lugre',
10864
+ type=ArrayType(
10865
+ inner_type=ValueType(name='double'),
10866
+ extents=(5,),
10867
+ ),
10868
+ nullable=True,
10869
+ ),
10870
+ FunctionParameterDecl(
10871
+ name='input_mode',
10872
+ type=ValueType(name='int'),
10873
+ ),
10874
+ ),
10875
+ doc='Set actuator to DC motor; return error if any.',
10876
+ )),
10688
10877
  ('mjs_addMesh',
10689
10878
  FunctionDecl(
10690
10879
  name='mjs_addMesh',