mujoco 3.4.0__tar.gz → 3.6.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 (190) hide show
  1. {mujoco-3.4.0/mujoco.egg-info → mujoco-3.6.0}/PKG-INFO +16 -5
  2. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/CMakeLists.txt +6 -4
  3. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/__init__.py +15 -3
  4. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/bindings_test.py +204 -2
  5. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoDependencies.cmake +4 -36
  6. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoLinkOptions.cmake +5 -9
  7. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/ShellTests.cmake +1 -0
  8. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/constants.cc +1 -0
  9. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/enum_traits.h +40 -0
  10. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/function_traits.h +228 -74
  11. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/functions.cc +151 -19
  12. mujoco-3.6.0/mujoco/gl_context.py +21 -0
  13. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexer_xmacro.h +4 -5
  14. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexers.cc +1 -1
  15. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/enums.py +59 -19
  16. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/functions.py +512 -79
  17. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/structs.py +391 -148
  18. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/Info.plist +4 -4
  19. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.mm +31 -3
  20. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/msh2obj_test.py +1 -0
  21. mujoco-3.6.0/mujoco/renderer.py +21 -0
  22. mujoco-3.6.0/mujoco/rendering/classic/__init__.py +16 -0
  23. {mujoco-3.4.0/mujoco → mujoco-3.6.0/mujoco/rendering/classic}/renderer.py +32 -33
  24. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/CMakeLists.txt +1 -31
  25. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoLinkOptions.cmake +5 -9
  26. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/main.cc +16 -20
  27. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/simulate.cc +168 -19
  28. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/simulate.h +11 -0
  29. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate.cc +44 -27
  30. mujoco-3.6.0/mujoco/specs.cc.inc +8463 -0
  31. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_test.py +315 -35
  32. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_wrapper.cc +14 -3
  33. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs.cc +62 -125
  34. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs.h +18 -38
  35. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs_wrappers.cc +13 -7
  36. mujoco-3.6.0/mujoco/sysid/__init__.py +57 -0
  37. mujoco-3.6.0/mujoco/sysid/_src/__init__.py +15 -0
  38. mujoco-3.6.0/mujoco/sysid/_src/io.py +81 -0
  39. mujoco-3.6.0/mujoco/sysid/_src/model_modifier.py +598 -0
  40. mujoco-3.6.0/mujoco/sysid/_src/optimize.py +284 -0
  41. mujoco-3.6.0/mujoco/sysid/_src/parameter.py +673 -0
  42. mujoco-3.6.0/mujoco/sysid/_src/plotting.py +114 -0
  43. mujoco-3.6.0/mujoco/sysid/_src/residual.py +449 -0
  44. mujoco-3.6.0/mujoco/sysid/_src/signal_modifier.py +325 -0
  45. mujoco-3.6.0/mujoco/sysid/_src/signal_transform.py +301 -0
  46. mujoco-3.6.0/mujoco/sysid/_src/timeseries.py +794 -0
  47. mujoco-3.6.0/mujoco/sysid/_src/trajectory.py +652 -0
  48. mujoco-3.6.0/mujoco/sysid/py.typed +0 -0
  49. mujoco-3.6.0/mujoco/sysid/report/builder.py +122 -0
  50. mujoco-3.6.0/mujoco/sysid/report/defaults.py +291 -0
  51. mujoco-3.6.0/mujoco/sysid/report/sections/__init__.py +15 -0
  52. mujoco-3.6.0/mujoco/sysid/report/sections/base.py +63 -0
  53. mujoco-3.6.0/mujoco/sysid/report/sections/covariance.py +177 -0
  54. mujoco-3.6.0/mujoco/sysid/report/sections/group.py +59 -0
  55. mujoco-3.6.0/mujoco/sysid/report/sections/insights.py +113 -0
  56. mujoco-3.6.0/mujoco/sysid/report/sections/optimization_trace.py +471 -0
  57. mujoco-3.6.0/mujoco/sysid/report/sections/parameter_distribution.py +428 -0
  58. mujoco-3.6.0/mujoco/sysid/report/sections/parameters.py +240 -0
  59. mujoco-3.6.0/mujoco/sysid/report/sections/row.py +63 -0
  60. mujoco-3.6.0/mujoco/sysid/report/sections/signals.py +231 -0
  61. mujoco-3.6.0/mujoco/sysid/report/sections/video.py +216 -0
  62. mujoco-3.6.0/mujoco/sysid/report/templates/covariance.html +204 -0
  63. mujoco-3.6.0/mujoco/sysid/report/templates/group.html +13 -0
  64. mujoco-3.6.0/mujoco/sysid/report/templates/insights.html +90 -0
  65. mujoco-3.6.0/mujoco/sysid/report/templates/layout.html +699 -0
  66. mujoco-3.6.0/mujoco/sysid/report/templates/optimization_trace.html +20 -0
  67. mujoco-3.6.0/mujoco/sysid/report/templates/parameter_confidence.html +3 -0
  68. mujoco-3.6.0/mujoco/sysid/report/templates/parameters_table.html +147 -0
  69. mujoco-3.6.0/mujoco/sysid/report/templates/plot_generic.html +8 -0
  70. mujoco-3.6.0/mujoco/sysid/report/templates/row.html +13 -0
  71. mujoco-3.6.0/mujoco/sysid/report/templates/signals.html +3 -0
  72. mujoco-3.6.0/mujoco/sysid/report/templates/video.html +11 -0
  73. mujoco-3.6.0/mujoco/sysid/report/utils.py +61 -0
  74. mujoco-3.6.0/mujoco/sysid/tests/__init__.py +15 -0
  75. mujoco-3.6.0/mujoco/sysid/tests/conftest.py +224 -0
  76. mujoco-3.6.0/mujoco/sysid/tests/test_integration.py +235 -0
  77. mujoco-3.6.0/mujoco/sysid/tests/test_model_modifier.py +131 -0
  78. mujoco-3.6.0/mujoco/sysid/tests/test_parameter.py +148 -0
  79. mujoco-3.6.0/mujoco/sysid/tests/test_signal.py +391 -0
  80. mujoco-3.6.0/mujoco/sysid/tests/test_timeseries.py +453 -0
  81. mujoco-3.6.0/mujoco/sysid/tests/test_trajectory.py +204 -0
  82. mujoco-3.6.0/mujoco/testdata/model.urdf +4 -0
  83. {mujoco-3.4.0 → mujoco-3.6.0/mujoco.egg-info}/PKG-INFO +16 -5
  84. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/SOURCES.txt +50 -0
  85. mujoco-3.6.0/mujoco.egg-info/requires.txt +21 -0
  86. {mujoco-3.4.0 → mujoco-3.6.0}/pyproject.toml +19 -5
  87. mujoco-3.4.0/mujoco/specs.cc.inc +0 -8451
  88. mujoco-3.4.0/mujoco.egg-info/requires.txt +0 -9
  89. {mujoco-3.4.0 → mujoco-3.6.0}/LICENSE +0 -0
  90. {mujoco-3.4.0 → mujoco-3.6.0}/LICENSES_THIRD_PARTY.md +0 -0
  91. {mujoco-3.4.0 → mujoco-3.6.0}/MANIFEST.in +0 -0
  92. {mujoco-3.4.0 → mujoco-3.6.0}/README.md +0 -0
  93. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/callbacks.cc +0 -0
  94. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cgl/__init__.py +0 -0
  95. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cgl/cgl.py +0 -0
  96. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/CheckAvxSupport.cmake +0 -0
  97. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/FindOrFetch.cmake +0 -0
  98. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoHarden.cmake +0 -0
  99. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoMacOS.cmake +0 -0
  100. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoOptions.cmake +0 -0
  101. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/TargetAddRpath.cmake +0 -0
  102. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/egl/__init__.py +0 -0
  103. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/egl/egl_ext.py +0 -0
  104. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/enums.cc +0 -0
  105. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/errors.cc +0 -0
  106. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/errors.h +0 -0
  107. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/functions.h +0 -0
  108. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/glfw/__init__.py +0 -0
  109. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexers.h +0 -0
  110. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/__init__.py +0 -0
  111. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/ast_nodes.py +0 -0
  112. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/ast_nodes_test.py +0 -0
  113. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/formatter.py +0 -0
  114. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_enums.py +0 -0
  115. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_functions.py +0 -0
  116. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_structs.py +0 -0
  117. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/enums_test.py +0 -0
  118. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/functions_test.py +0 -0
  119. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/mjxmacro.py +0 -0
  120. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/structs_test.py +0 -0
  121. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/type_parsing.py +0 -0
  122. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/type_parsing_test.py +0 -0
  123. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/memory_leak_test.py +0 -0
  124. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/minimize.py +0 -0
  125. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/minimize_test.py +0 -0
  126. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.icns +0 -0
  127. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.py +0 -0
  128. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/msh2obj.py +0 -0
  129. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/osmesa/__init__.py +0 -0
  130. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/private.h +0 -0
  131. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/raw.h +0 -0
  132. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/render.cc +0 -0
  133. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/render_test.py +0 -0
  134. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/renderer_test.py +0 -0
  135. {mujoco-3.4.0/mujoco → mujoco-3.6.0/mujoco/rendering/classic}/gl_context.py +0 -0
  136. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout.cc +0 -0
  137. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout.py +0 -0
  138. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout_test.py +0 -0
  139. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/serialization.h +0 -0
  140. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/array_safety.h +0 -0
  141. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/CheckAvxSupport.cmake +0 -0
  142. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/FindOrFetch.cmake +0 -0
  143. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoHarden.cmake +0 -0
  144. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoMacOS.cmake +0 -0
  145. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/SimulateDependencies.cmake +0 -0
  146. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/SimulateOptions.cmake +0 -0
  147. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_adapter.cc +0 -0
  148. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_adapter.h +0 -0
  149. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_corevideo.h +0 -0
  150. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_corevideo.mm +0 -0
  151. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_dispatch.cc +0 -0
  152. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_dispatch.h +0 -0
  153. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/macos_gui.mm +0 -0
  154. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/platform_ui_adapter.cc +0 -0
  155. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/platform_ui_adapter.h +0 -0
  156. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs.cc +0 -0
  157. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_wrapper.h +0 -0
  158. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/MJCF_NoRoot.zip +0 -0
  159. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/MJCF_Root.zip +0 -0
  160. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/abdomen_1_body.msh +0 -0
  161. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/model.xml +0 -0
  162. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/msh.xml +0 -0
  163. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/simple_usd_preview_surface.usda +0 -0
  164. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/usd_golden.usda +0 -0
  165. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/threadpool.cc +0 -0
  166. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/threadpool.h +0 -0
  167. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/camera.py +0 -0
  168. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/demo.py +0 -0
  169. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/exporter.py +0 -0
  170. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/exporter_test.py +0 -0
  171. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/lights.py +0 -0
  172. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/objects.py +0 -0
  173. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/shapes.py +0 -0
  174. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/utils.py +0 -0
  175. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/CMakeLists.txt +0 -0
  176. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/array_traits.h +0 -0
  177. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/array_traits_test.cc +0 -0
  178. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/crossplatform.h +0 -0
  179. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_traits.h +0 -0
  180. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_traits_test.cc +0 -0
  181. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_wrap.h +0 -0
  182. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_wrap_test.cc +0 -0
  183. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/tuple_tools.h +0 -0
  184. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/tuple_tools_test.cc +0 -0
  185. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/viewer.py +0 -0
  186. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/viewer_test.py +0 -0
  187. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/dependency_links.txt +0 -0
  188. {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/top_level.txt +0 -0
  189. {mujoco-3.4.0 → mujoco-3.6.0}/setup.cfg +0 -0
  190. {mujoco-3.4.0 → mujoco-3.6.0}/setup.py +0 -0
@@ -1,24 +1,24 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mujoco
3
- Version: 3.4.0
3
+ Version: 3.6.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.4.0
8
+ Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.6.0
9
9
  Project-URL: Repository, https://github.com/google-deepmind/mujoco
10
- Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.4.0/changelog.html
10
+ Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.6.0/changelog.html
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Science/Research
14
14
  Classifier: Natural Language :: English
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Topic :: Scientific/Engineering
21
- Requires-Python: >=3.9
21
+ Requires-Python: >=3.10
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  License-File: LICENSES_THIRD_PARTY.md
@@ -27,6 +27,17 @@ Requires-Dist: etils[epath]
27
27
  Requires-Dist: glfw
28
28
  Requires-Dist: numpy
29
29
  Requires-Dist: pyopengl
30
+ Provides-Extra: sysid
31
+ Requires-Dist: absl-py; extra == "sysid"
32
+ Requires-Dist: colorama; extra == "sysid"
33
+ Requires-Dist: imageio[ffmpeg]; extra == "sysid"
34
+ Requires-Dist: jinja2; extra == "sysid"
35
+ Requires-Dist: matplotlib; extra == "sysid"
36
+ Requires-Dist: plotly; extra == "sysid"
37
+ Requires-Dist: pyyaml; extra == "sysid"
38
+ Requires-Dist: scipy; extra == "sysid"
39
+ Requires-Dist: tabulate; extra == "sysid"
40
+ Requires-Dist: typing_extensions; extra == "sysid"
30
41
  Provides-Extra: usd
31
42
  Requires-Dist: usd-core; extra == "usd"
32
43
  Requires-Dist: pillow; extra == "usd"
@@ -51,6 +51,8 @@ endif()
51
51
 
52
52
  include(MujocoLinkOptions)
53
53
  get_mujoco_extra_link_options(EXTRA_LINK_OPTIONS)
54
+ list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "STACK")
55
+ list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "stack")
54
56
  add_link_options(${EXTRA_LINK_OPTIONS})
55
57
 
56
58
  include(MujocoMacOS)
@@ -84,7 +86,7 @@ if(NOT TARGET mujoco)
84
86
  if(MUJOCO_FRAMEWORK)
85
87
  message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
86
88
  set(MUJOCO_LIBRARY
87
- ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.4.0.dylib
89
+ ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.6.0.dylib
88
90
  )
89
91
  target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
90
92
  endif()
@@ -92,7 +94,7 @@ if(NOT TARGET mujoco)
92
94
 
93
95
  if(NOT MUJOCO_FRAMEWORK)
94
96
  find_library(
95
- MUJOCO_LIBRARY mujoco mujoco.3.4.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
97
+ MUJOCO_LIBRARY mujoco mujoco.3.6.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
96
98
  )
97
99
  find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
98
100
  message("MuJoCo is at ${MUJOCO_LIBRARY}")
@@ -140,7 +142,7 @@ findorfetch(
140
142
  GIT_REPO
141
143
  https://github.com/abseil/abseil-cpp
142
144
  GIT_TAG
143
- d38452e1ee03523a208362186fd42248ff2609f6 # LTS 20250814.1
145
+ 255c84dadd029fd8ad25c5efb5933e47beaa00c7 # LTS 20250814.1
144
146
  TARGETS
145
147
  ${MUJOCO_PYTHON_ABSL_TARGETS}
146
148
  EXCLUDE_FROM_ALL
@@ -173,7 +175,7 @@ findorfetch(
173
175
  GIT_REPO
174
176
  https://gitlab.com/libeigen/eigen
175
177
  GIT_TAG
176
- 49623d0c4e1af3c680845191948d10f6d3e92f8a
178
+ 75bcd155c40cb48e647c87c3f29052360255bc9e
177
179
  TARGETS
178
180
  Eigen3::Eigen
179
181
  EXCLUDE_FROM_ALL
@@ -56,11 +56,23 @@ from mujoco._constants import *
56
56
  from mujoco._enums import *
57
57
  from mujoco._errors import *
58
58
  from mujoco._functions import *
59
- from mujoco._render import *
60
59
  from mujoco._specs import *
61
60
  from mujoco._structs import *
62
- from mujoco.gl_context import *
63
- from mujoco.renderer import Renderer
61
+
62
+ try:
63
+ from mujoco._render import * # pytype: disable=import-error
64
+ except ImportError:
65
+ pass
66
+
67
+ try:
68
+ from mujoco.rendering.classic.renderer import Renderer # pytype: disable=import-error
69
+ except ImportError:
70
+ pass
71
+
72
+ try:
73
+ from mujoco.rendering.classic.gl_context import * # pytype: disable=import-error
74
+ except ImportError:
75
+ pass
64
76
 
65
77
  MjStruct: TypeAlias = Union[
66
78
  _specs.MjsBody,
@@ -495,6 +495,15 @@ class MuJoCoBindingsTest(parameterized.TestCase):
495
495
  mujoco.mj_forward(self.model, data_copy)
496
496
  self.assertEqual(data_copy.ncon, 4)
497
497
 
498
+ # Test copying into existing data.
499
+ data_copy.qpos[1] = 1.234
500
+ data_copy.geom_xpos[2] = 5.678
501
+ self.assertFalse(np.array_equal(self.data.qpos, data_copy.qpos))
502
+ self.assertFalse(np.array_equal(self.data.geom_xpos, data_copy.geom_xpos))
503
+ mujoco.mj_copyData(self.data, self.model, data_copy)
504
+ np.testing.assert_array_equal(self.data.qpos, data_copy.qpos)
505
+ np.testing.assert_array_equal(self.data.geom_xpos, data_copy.geom_xpos)
506
+
498
507
  def test_mjdata_can_read_warning_array(self):
499
508
  warnings = self.data.warning
500
509
  self.assertLen(warnings, mujoco.mjtWarning.mjNWARNING)
@@ -1279,8 +1288,9 @@ Euler integrator, semi-implicit in velocity.
1279
1288
  geomid = np.zeros(1, np.int32)
1280
1289
  mujoco.mj_forward(self.model, self.data)
1281
1290
  mujoco.mj_ray(
1282
- self.model, self.data, [0, 0, 0], [0, 0, 1], None, 0, 0, geomid
1291
+ self.model, self.data, [0, 0, 0], [0, 0, 1], None, 0, 0, geomid, None
1283
1292
  )
1293
+ # Check the normal argument is optional
1284
1294
  mujoco.mj_ray(
1285
1295
  self.model,
1286
1296
  self.data,
@@ -1292,6 +1302,7 @@ Euler integrator, semi-implicit in velocity.
1292
1302
  geomid,
1293
1303
  )
1294
1304
  # Check that named arguments work
1305
+ normal = np.zeros(3, np.float64)
1295
1306
  mujoco.mj_ray(
1296
1307
  m=self.model,
1297
1308
  d=self.data,
@@ -1301,7 +1312,33 @@ Euler integrator, semi-implicit in velocity.
1301
1312
  flg_static=0,
1302
1313
  bodyexclude=0,
1303
1314
  geomid=geomid,
1315
+ normal=normal,
1316
+ )
1317
+
1318
+ def test_mju_ray_geom(self):
1319
+ # Test mju_rayGeom with a plane at origin
1320
+ pos = np.zeros(3)
1321
+ mat = np.eye(3).flatten()
1322
+ size = np.array([10.0, 10.0, 1.0])
1323
+ pnt = np.array([5.0, 5.0, 5.0])
1324
+ # Normalize direction for Euclidean distance
1325
+ vec = np.array([-1.0, -1.0, -1.0])
1326
+ vec = vec / np.linalg.norm(vec)
1327
+ normal = np.zeros(3)
1328
+
1329
+ # Call with normal argument
1330
+ dist = mujoco.mju_rayGeom(
1331
+ pos, mat, size, pnt, vec, mujoco.mjtGeom.mjGEOM_PLANE, normal
1332
+ )
1333
+ expected_dist = np.sqrt(3 * 5 * 5)
1334
+ np.testing.assert_allclose(dist, expected_dist)
1335
+ np.testing.assert_allclose(normal, [0, 0, 1])
1336
+
1337
+ # Call without normal argument (should still work)
1338
+ dist2 = mujoco.mju_rayGeom(
1339
+ pos, mat, size, pnt, vec, mujoco.mjtGeom.mjGEOM_PLANE
1304
1340
  )
1341
+ np.testing.assert_allclose(dist2, expected_dist)
1305
1342
 
1306
1343
  def test_mj_multi_ray(self):
1307
1344
  nray = 3
@@ -1324,6 +1361,7 @@ Euler integrator, semi-implicit in velocity.
1324
1361
  bodyexclude=-1,
1325
1362
  geomid=geomid,
1326
1363
  dist=dist,
1364
+ normal=None,
1327
1365
  nray=nray,
1328
1366
  cutoff=mujoco.mjMAXVAL,
1329
1367
  )
@@ -1331,7 +1369,9 @@ Euler integrator, semi-implicit in velocity.
1331
1369
  for i in range(0, 3):
1332
1370
  self.assertEqual(
1333
1371
  dist[i],
1334
- mujoco.mj_ray(self.model, self.data, pnt, vec[i], None, 1, -1, geom1),
1372
+ mujoco.mj_ray(
1373
+ self.model, self.data, pnt, vec[i], None, 1, -1, geom1, None
1374
+ ),
1335
1375
  )
1336
1376
  self.assertEqual(geomid[i], geom1)
1337
1377
  self.assertEqual(geomid[i], geom_ex[i])
@@ -1679,6 +1719,168 @@ Euler integrator, semi-implicit in velocity.
1679
1719
  self.assertIn(model_path, dependencies)
1680
1720
  self.assertIn(msh_path, dependencies)
1681
1721
 
1722
+ def test_mj_read_ctrl_and_init_ctrl_delay(self):
1723
+ xml = r"""
1724
+ <mujoco>
1725
+ <worldbody>
1726
+ <body>
1727
+ <geom type="sphere" size="0.1"/>
1728
+ <joint name="hinge" type="hinge"/>
1729
+ </body>
1730
+ </worldbody>
1731
+ <actuator>
1732
+ <position name="actuator" joint="hinge" delay="0.01" nsample="4"/>
1733
+ </actuator>
1734
+ </mujoco>
1735
+ """
1736
+ model = mujoco.MjModel.from_xml_string(xml)
1737
+ data = mujoco.MjData(model)
1738
+ mujoco.mj_forward(model, data)
1739
+
1740
+ # Initialize the delay buffer with known values
1741
+ # actuator_history[i, 0] = nsample, actuator_history[i, 1] = interp
1742
+ nhistory = model.actuator_history[0, 0]
1743
+ self.assertEqual(nhistory, 4)
1744
+ times = np.array([0.0, 0.01, 0.02, 0.03])
1745
+ values = np.array([1.0, 2.0, 3.0, 4.0])
1746
+ mujoco.mj_initCtrlHistory(model, data, 0, times, values)
1747
+
1748
+ # Read back a value using zero-order hold
1749
+ # mj_readCtrl auto-subtracts delay: lookup_time = read_time - delay
1750
+ # delay = 0.01, so:
1751
+ # read_time=0.02 -> lookup at 0.01 -> value 2.0
1752
+ # read_time=0.03 -> lookup at 0.02 -> value 3.0
1753
+ result = mujoco.mj_readCtrl(model, data, 0, 0.02, interp=0)
1754
+ self.assertEqual(result, 2.0) # ZOH returns value at t=0.01
1755
+
1756
+ # Test with times=None (uses existing timestamps)
1757
+ new_values = np.array([5.0, 6.0, 7.0, 8.0])
1758
+ mujoco.mj_initCtrlHistory(model, data, 0, None, new_values)
1759
+ # read_time=0.02 -> lookup at 0.01 -> value 6.0
1760
+ result = mujoco.mj_readCtrl(model, data, 0, 0.02, interp=0)
1761
+ self.assertEqual(result, 6.0)
1762
+
1763
+ # Test dimension validation errors
1764
+ with self.assertRaises(TypeError):
1765
+ # wrong times
1766
+ mujoco.mj_initCtrlHistory(model, data, 0, np.zeros(3), values)
1767
+ with self.assertRaises(TypeError):
1768
+ # wrong values
1769
+ mujoco.mj_initCtrlHistory(model, data, 0, times, np.zeros(5))
1770
+
1771
+ def test_mj_read_sensor_and_init_sensor_delay(self):
1772
+ xml = r"""
1773
+ <mujoco>
1774
+ <worldbody>
1775
+ <body>
1776
+ <geom type="sphere" size="0.1"/>
1777
+ <joint name="hinge" type="hinge"/>
1778
+ <site name="site"/>
1779
+ </body>
1780
+ </worldbody>
1781
+ <sensor>
1782
+ <accelerometer name="accel" site="site" delay="0.01" nsample="3"/>
1783
+ </sensor>
1784
+ </mujoco>
1785
+ """
1786
+ model = mujoco.MjModel.from_xml_string(xml)
1787
+ data = mujoco.MjData(model)
1788
+ mujoco.mj_forward(model, data)
1789
+
1790
+ # Initialize the delay buffer with known values
1791
+ # sensor_history[i, 0] = nsample, sensor_history[i, 1] = interp
1792
+ nhistory = model.sensor_history[0, 0]
1793
+ dim = model.sensor_dim[0]
1794
+ self.assertEqual(nhistory, 3)
1795
+ self.assertEqual(dim, 3) # accelerometer has dim=3
1796
+ times = np.array([0.0, 0.01, 0.02])
1797
+ values = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float64)
1798
+ mujoco.mj_initSensorHistory(model, data, 0, times, values, phase=0.0)
1799
+
1800
+ # Read back a value using zero-order hold
1801
+ # mj_readSensor auto-subtracts delay: lookup_time = read_time - delay
1802
+ # delay = 0.01, so:
1803
+ # read_time=0.02 -> lookup at 0.01 -> value [4, 5, 6]
1804
+ result = np.zeros(dim)
1805
+ mujoco.mj_readSensor(model, data, 0, 0.02, result, interp=0)
1806
+ # ZOH returns value at t=0.01
1807
+ np.testing.assert_array_equal(result, [4, 5, 6])
1808
+
1809
+ # Test with times=None (uses existing timestamps)
1810
+ new_values = np.array([
1811
+ [10, 11, 12], [13, 14, 15], [16, 17, 18]], dtype=np.float64)
1812
+ mujoco.mj_initSensorHistory(model, data, 0, None, new_values, phase=0.0)
1813
+ # read_time=0.02 -> lookup at 0.01 -> value [13, 14, 15]
1814
+ mujoco.mj_readSensor(model, data, 0, 0.02, result, interp=0)
1815
+ np.testing.assert_array_equal(result, [13, 14, 15])
1816
+
1817
+ # Test dimension validation errors
1818
+ with self.assertRaises(TypeError):
1819
+ # wrong result size
1820
+ mujoco.mj_readSensor(model, data, 0, 0.02, np.zeros(2), interp=0)
1821
+ with self.assertRaises(TypeError):
1822
+ # wrong times size
1823
+ mujoco.mj_initSensorHistory(model, data, 0, np.zeros(2), values, 0.0)
1824
+ with self.assertRaises(TypeError):
1825
+ # wrong values rows
1826
+ mujoco.mj_initSensorHistory(model, data, 0, times, np.zeros((4, 3)), 0.0)
1827
+ with self.assertRaises(TypeError):
1828
+ # wrong values cols
1829
+ mujoco.mj_initSensorHistory(model, data, 0, times, np.zeros((3, 2)), 0.0)
1830
+
1831
+ def test_init_sensor_history_pedagogical(self):
1832
+ # A framequat sensor reports body orientation as a unit quaternion.
1833
+ # Quaternions are never zero: the identity quaternion is [1, 0, 0, 0].
1834
+ # This test demonstrates why mj_initSensorHistory is needed: after
1835
+ # mj_makeData, the history buffer is filled with zeros, which is invalid.
1836
+ xml = r"""
1837
+ <mujoco>
1838
+ <worldbody>
1839
+ <body name="body">
1840
+ <freejoint/>
1841
+ <geom type="sphere" size="0.1"/>
1842
+ </body>
1843
+ </worldbody>
1844
+ <sensor>
1845
+ <framequat name="quat" objtype="body" objname="body" delay="0.01" nsample="5"/>
1846
+ </sensor>
1847
+ </mujoco>
1848
+ """
1849
+ model = mujoco.MjModel.from_xml_string(xml)
1850
+ data = mujoco.MjData(model)
1851
+ dim = model.sensor_dim[0]
1852
+ nsample = model.sensor_history[0, 0]
1853
+ delay = model.sensor_delay[0]
1854
+ self.assertEqual(dim, 4)
1855
+ self.assertEqual(nsample, 5)
1856
+ self.assertEqual(delay, 0.01)
1857
+
1858
+ # After mj_makeData, reading from the delay buffer gives all zeros.
1859
+ # For a quaternion sensor, this is invalid data.
1860
+ result = np.zeros(dim)
1861
+ mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
1862
+ np.testing.assert_array_equal(result, [0, 0, 0, 0])
1863
+
1864
+ # To get valid sensor values, we temporarily set delay to 0 so that
1865
+ # mj_forward populates sensordata directly (without using the delay
1866
+ # buffer), then restore the original delay value.
1867
+ saved_delay = model.sensor_delay.copy()
1868
+ model.sensor_delay[:] = 0
1869
+ mujoco.mj_forward(model, data)
1870
+ model.sensor_delay[:] = saved_delay
1871
+
1872
+ # Now sensordata contains the valid identity quaternion.
1873
+ np.testing.assert_array_equal(data.sensordata, [1, 0, 0, 0])
1874
+
1875
+ # Use mj_initSensorHistory to fill the buffer with valid quaternion values.
1876
+ # Passing None for times keeps the existing timestamps in the buffer.
1877
+ values = np.tile(data.sensordata, (nsample, 1))
1878
+ mujoco.mj_initSensorHistory(model, data, 0, None, values, phase=0.0)
1879
+
1880
+ # Now reading from the delay buffer gives the valid identity quaternion.
1881
+ mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
1882
+ np.testing.assert_array_equal(result, [1, 0, 0, 0])
1883
+
1682
1884
  def _assert_attributes_equal(self, actual_obj, expected_obj, attr_to_compare):
1683
1885
  for name in attr_to_compare:
1684
1886
  actual_value = getattr(actual_obj, name)
@@ -39,12 +39,12 @@ set(MUJOCO_DEP_VERSION_qhull
39
39
  CACHE STRING "Version of `qhull` to be fetched."
40
40
  )
41
41
  set(MUJOCO_DEP_VERSION_Eigen3
42
- 49623d0c4e1af3c680845191948d10f6d3e92f8a
42
+ 75bcd155c40cb48e647c87c3f29052360255bc9e
43
43
  CACHE STRING "Version of `Eigen3` to be fetched."
44
44
  )
45
45
 
46
46
  set(MUJOCO_DEP_VERSION_abseil
47
- d38452e1ee03523a208362186fd42248ff2609f6 # LTS 20250814.1
47
+ 255c84dadd029fd8ad25c5efb5933e47beaa00c7 # LTS 20250814.1
48
48
  CACHE STRING "Version of `abseil` to be fetched."
49
49
  )
50
50
 
@@ -54,15 +54,10 @@ set(MUJOCO_DEP_VERSION_gtest
54
54
  )
55
55
 
56
56
  set(MUJOCO_DEP_VERSION_benchmark
57
- 5f7d66929fb66869d96dfcbacf0d8a586b33766d
57
+ 5c55f5d4f45a1b09c5d98aa63a671993ebd42c69
58
58
  CACHE STRING "Version of `benchmark` to be fetched."
59
59
  )
60
60
 
61
- set(MUJOCO_DEP_VERSION_TriangleMeshDistance
62
- 2cb643de1436e1ba8e2be49b07ec5491ac604457
63
- CACHE STRING "Version of `TriangleMeshDistance` to be fetched."
64
- )
65
-
66
61
  mark_as_advanced(MUJOCO_DEP_VERSION_lodepng)
67
62
  mark_as_advanced(MUJOCO_DEP_VERSION_MarchingCubeCpp)
68
63
  mark_as_advanced(MUJOCO_DEP_VERSION_tinyxml2)
@@ -73,7 +68,6 @@ mark_as_advanced(MUJOCO_DEP_VERSION_Eigen3)
73
68
  mark_as_advanced(MUJOCO_DEP_VERSION_abseil)
74
69
  mark_as_advanced(MUJOCO_DEP_VERSION_gtest)
75
70
  mark_as_advanced(MUJOCO_DEP_VERSION_benchmark)
76
- mark_as_advanced(MUJOCO_DEP_VERSION_TriangleMeshDistance)
77
71
 
78
72
  include(FetchContent)
79
73
  include(FindOrFetch)
@@ -202,30 +196,6 @@ if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
202
196
  unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
203
197
  endif()
204
198
 
205
- if(NOT TARGET trianglemeshdistance)
206
- FetchContent_Declare(
207
- trianglemeshdistance
208
- GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/TriangleMeshDistance.git
209
- GIT_TAG ${MUJOCO_DEP_VERSION_TriangleMeshDistance}
210
- )
211
-
212
- FetchContent_GetProperties(trianglemeshdistance)
213
- if(NOT trianglemeshdistance_POPULATED)
214
- FetchContent_Populate(trianglemeshdistance)
215
- # Patch the source code to silence a warning/error related to a loop variable creating a copy.
216
- # Since this is a header only library this fix is less intrusive than disabling the warning for
217
- # any target including the header.
218
- set(TMD_HEADER ${trianglemeshdistance_SOURCE_DIR}/TriangleMeshDistance/include/tmd/TriangleMeshDistance.h)
219
- file(READ ${TMD_HEADER} TMD_CONTENT)
220
- string(REPLACE
221
- "for (const auto edge_count : edges_count) {"
222
- "for (const auto& edge_count : edges_count) {"
223
- TMD_CONTENT "${TMD_CONTENT}")
224
- file(WRITE ${TMD_HEADER} "${TMD_CONTENT}")
225
- include_directories(${trianglemeshdistance_SOURCE_DIR})
226
- endif()
227
- endif()
228
-
229
199
  set(ENABLE_DOUBLE_PRECISION ON)
230
200
  set(CCD_HIDE_ALL_SYMBOLS ON)
231
201
 
@@ -339,9 +309,7 @@ if(MUJOCO_BUILD_TESTS)
339
309
  "sed"
340
310
  "-i"
341
311
  "-e"
342
- "s/-std=c++11/-std=c++14/g"
343
- "-e"
344
- "s/HAVE_CXX_FLAG_STD_CXX11/HAVE_CXX_FLAG_STD_CXX14/g"
312
+ "s/-Wformat=2/-Wformat/g"
345
313
  "${CMAKE_BINARY_DIR}/_deps/benchmark-src/CMakeLists.txt"
346
314
  )
347
315
  endif()
@@ -23,16 +23,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR)
23
23
  set(EXTRA_LINK_OPTIONS)
24
24
 
25
25
  if(WIN32)
26
- set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,/STACK:16777216)
27
26
  set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld-link")
28
- check_c_source_compiles("int main() {}" SUPPORTS_LLD)
29
- if(SUPPORTS_LLD)
30
- set(EXTRA_LINK_OPTIONS
31
- ${EXTRA_LINK_OPTIONS}
32
- -fuse-ld=lld-link
33
- -Wl,/OPT:REF
34
- -Wl,/OPT:ICF
35
- )
27
+ check_c_source_compiles("int main() {}" SUPPORTS_LLD_LINK)
28
+ if(SUPPORTS_LLD_LINK)
29
+ set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -fuse-ld=lld-link -Wl,/STACK:16777216 -Wl,/OPT:REF -Wl,/OPT:ICF)
30
+ else()
31
+ set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--stack,16777216)
36
32
  endif()
37
33
  else()
38
34
  set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld")
@@ -38,6 +38,7 @@ 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>"
41
42
  )
42
43
  if(WIN32)
43
44
  # Define the directory containing the mujoco DLL library so that it can be added to the PATH.
@@ -59,6 +59,7 @@ PYBIND11_MODULE(_constants, pymodule) {
59
59
  X(mjMAXCONPAIR);
60
60
  X(mjMAXTREEDEPTH);
61
61
  X(mjMAXFLEXNODES);
62
+ X(mjMINAWAKE);
62
63
  X(mjNEQDATA);
63
64
  X(mjNDYN);
64
65
  X(mjNGAIN);
@@ -98,6 +98,14 @@ struct mjtGeom {
98
98
  std::make_pair("mjGEOM_NONE", ::mjtGeom::mjGEOM_NONE)};
99
99
  };
100
100
 
101
+ struct mjtProjection {
102
+ static constexpr char name[] = "mjtProjection";
103
+ using type = ::mjtProjection;
104
+ static constexpr auto values = std::array{
105
+ std::make_pair("mjPROJ_PERSPECTIVE", ::mjtProjection::mjPROJ_PERSPECTIVE),
106
+ std::make_pair("mjPROJ_ORTHOGRAPHIC", ::mjtProjection::mjPROJ_ORTHOGRAPHIC)};
107
+ };
108
+
101
109
  struct mjtCamLight {
102
110
  static constexpr char name[] = "mjtCamLight";
103
111
  using type = ::mjtCamLight;
@@ -199,6 +207,8 @@ struct mjtEq {
199
207
  std::make_pair("mjEQ_JOINT", ::mjtEq::mjEQ_JOINT),
200
208
  std::make_pair("mjEQ_TENDON", ::mjtEq::mjEQ_TENDON),
201
209
  std::make_pair("mjEQ_FLEX", ::mjtEq::mjEQ_FLEX),
210
+ std::make_pair("mjEQ_FLEXVERT", ::mjtEq::mjEQ_FLEXVERT),
211
+ std::make_pair("mjEQ_FLEXSTRAIN", ::mjtEq::mjEQ_FLEXSTRAIN),
202
212
  std::make_pair("mjEQ_DISTANCE", ::mjtEq::mjEQ_DISTANCE)};
203
213
  };
204
214
 
@@ -384,6 +394,31 @@ struct mjtConDataField {
384
394
  std::make_pair("mjNCONDATA", ::mjtConDataField::mjNCONDATA)};
385
395
  };
386
396
 
397
+ struct mjtRayDataField {
398
+ static constexpr char name[] = "mjtRayDataField";
399
+ using type = ::mjtRayDataField;
400
+ static constexpr auto values = std::array{
401
+ std::make_pair("mjRAYDATA_DIST", ::mjtRayDataField::mjRAYDATA_DIST),
402
+ std::make_pair("mjRAYDATA_DIR", ::mjtRayDataField::mjRAYDATA_DIR),
403
+ std::make_pair("mjRAYDATA_ORIGIN", ::mjtRayDataField::mjRAYDATA_ORIGIN),
404
+ std::make_pair("mjRAYDATA_POINT", ::mjtRayDataField::mjRAYDATA_POINT),
405
+ std::make_pair("mjRAYDATA_NORMAL", ::mjtRayDataField::mjRAYDATA_NORMAL),
406
+ std::make_pair("mjRAYDATA_DEPTH", ::mjtRayDataField::mjRAYDATA_DEPTH),
407
+ std::make_pair("mjNRAYDATA", ::mjtRayDataField::mjNRAYDATA)};
408
+ };
409
+
410
+ struct mjtCamOutBit {
411
+ static constexpr char name[] = "mjtCamOutBit";
412
+ using type = ::mjtCamOutBit;
413
+ static constexpr auto values = std::array{
414
+ std::make_pair("mjCAMOUT_RGB", ::mjtCamOutBit::mjCAMOUT_RGB),
415
+ std::make_pair("mjCAMOUT_DEPTH", ::mjtCamOutBit::mjCAMOUT_DEPTH),
416
+ std::make_pair("mjCAMOUT_DIST", ::mjtCamOutBit::mjCAMOUT_DIST),
417
+ std::make_pair("mjCAMOUT_NORMAL", ::mjtCamOutBit::mjCAMOUT_NORMAL),
418
+ std::make_pair("mjCAMOUT_SEG", ::mjtCamOutBit::mjCAMOUT_SEG),
419
+ std::make_pair("mjNCAMOUT", ::mjtCamOutBit::mjNCAMOUT)};
420
+ };
421
+
387
422
  struct mjtSameFrame {
388
423
  static constexpr char name[] = "mjtSameFrame";
389
424
  using type = ::mjtSameFrame;
@@ -455,6 +490,7 @@ struct mjtState {
455
490
  std::make_pair("mjSTATE_QPOS", ::mjtState::mjSTATE_QPOS),
456
491
  std::make_pair("mjSTATE_QVEL", ::mjtState::mjSTATE_QVEL),
457
492
  std::make_pair("mjSTATE_ACT", ::mjtState::mjSTATE_ACT),
493
+ std::make_pair("mjSTATE_HISTORY", ::mjtState::mjSTATE_HISTORY),
458
494
  std::make_pair("mjSTATE_WARMSTART", ::mjtState::mjSTATE_WARMSTART),
459
495
  std::make_pair("mjSTATE_CTRL", ::mjtState::mjSTATE_CTRL),
460
496
  std::make_pair("mjSTATE_QFRC_APPLIED", ::mjtState::mjSTATE_QFRC_APPLIED),
@@ -762,6 +798,7 @@ struct mjtRndFlag {
762
798
  std::make_pair("mjRND_SKYBOX", ::mjtRndFlag::mjRND_SKYBOX),
763
799
  std::make_pair("mjRND_FOG", ::mjtRndFlag::mjRND_FOG),
764
800
  std::make_pair("mjRND_HAZE", ::mjtRndFlag::mjRND_HAZE),
801
+ std::make_pair("mjRND_DEPTH", ::mjtRndFlag::mjRND_DEPTH),
765
802
  std::make_pair("mjRND_SEGMENT", ::mjtRndFlag::mjRND_SEGMENT),
766
803
  std::make_pair("mjRND_IDCOLOR", ::mjtRndFlag::mjRND_IDCOLOR),
767
804
  std::make_pair("mjRND_CULL_FACE", ::mjtRndFlag::mjRND_CULL_FACE),
@@ -900,6 +937,7 @@ static constexpr auto kAllEnums = std::make_tuple(
900
937
  mjtEnableBit{},
901
938
  mjtJoint{},
902
939
  mjtGeom{},
940
+ mjtProjection{},
903
941
  mjtCamLight{},
904
942
  mjtLightType{},
905
943
  mjtTexture{},
@@ -920,6 +958,8 @@ static constexpr auto kAllEnums = std::make_tuple(
920
958
  mjtStage{},
921
959
  mjtDataType{},
922
960
  mjtConDataField{},
961
+ mjtRayDataField{},
962
+ mjtCamOutBit{},
923
963
  mjtSameFrame{},
924
964
  mjtSleepPolicy{},
925
965
  mjtLRMode{},