mujoco 3.6.0__tar.gz → 3.8.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.
- {mujoco-3.6.0/mujoco.egg-info → mujoco-3.8.0}/PKG-INFO +4 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/CMakeLists.txt +3 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/bindings_test.py +31 -4
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/callbacks.cc +1 -2
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/MujocoLinkOptions.cmake +2 -2
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/MujocoOptions.cmake +5 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/ShellTests.cmake +0 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/constants.cc +1 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/enum_traits.h +4 -2
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/function_traits.h +89 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/functions.cc +2 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/indexer_xmacro.h +5 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_structs.py +2 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/enums.py +15 -13
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/enums_test.py +2 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/functions.py +262 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/structs.py +154 -20
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/structs_test.py +1 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/mjpython/Info.plist +4 -4
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/render.cc +0 -19
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/CMakeLists.txt +1 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoLinkOptions.cmake +2 -2
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/SimulateOptions.cmake +5 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/simulate.cc +10 -10
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/simulate.h +0 -2
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate.cc +26 -41
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/specs.cc +79 -18
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/specs.cc.inc +952 -735
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/specs_test.py +52 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/structs.cc +33 -1
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/structs_wrappers.cc +12 -1
- {mujoco-3.6.0 → mujoco-3.8.0/mujoco.egg-info}/PKG-INFO +4 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/pyproject.toml +4 -3
- {mujoco-3.6.0 → mujoco-3.8.0}/LICENSE +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/LICENSES_THIRD_PARTY.md +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/MANIFEST.in +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/README.md +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cgl/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cgl/cgl.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/MujocoDependencies.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/cmake/TargetAddRpath.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/egl/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/egl/egl_ext.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/enums.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/errors.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/errors.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/functions.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/gl_context.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/glfw/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/indexers.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/indexers.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/ast_nodes.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/ast_nodes_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/codegen/formatter.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_enums.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_functions.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/functions_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/mjxmacro.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/type_parsing.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/introspect/type_parsing_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/memory_leak_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/minimize.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/minimize_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.icns +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.mm +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/msh2obj.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/msh2obj_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/osmesa/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/private.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/raw.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/render_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/renderer.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/renderer_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rendering/classic/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rendering/classic/gl_context.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rendering/classic/renderer.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rollout.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rollout.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/rollout_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/serialization.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/array_safety.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/cmake/SimulateDependencies.cmake +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_adapter.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_adapter.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_corevideo.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_corevideo.mm +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_dispatch.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/glfw_dispatch.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/macos_gui.mm +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/main.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/platform_ui_adapter.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/simulate/platform_ui_adapter.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/specs_wrapper.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/specs_wrapper.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/structs.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/io.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/model_modifier.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/optimize.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/parameter.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/plotting.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/residual.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/signal_modifier.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/signal_transform.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/timeseries.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/_src/trajectory.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/py.typed +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/builder.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/defaults.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/base.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/covariance.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/group.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/insights.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/optimization_trace.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/parameter_distribution.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/parameters.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/row.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/signals.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/video.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/covariance.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/group.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/insights.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/layout.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/optimization_trace.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/parameter_confidence.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/parameters_table.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/plot_generic.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/row.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/signals.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/video.html +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/report/utils.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/__init__.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/conftest.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_integration.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_model_modifier.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_parameter.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_signal.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_timeseries.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_trajectory.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/MJCF_NoRoot.zip +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/MJCF_Root.zip +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/abdomen_1_body.msh +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/model.urdf +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/model.xml +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/msh.xml +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/simple_usd_preview_surface.usda +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/testdata/usd_golden.usda +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/threadpool.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/threadpool.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/camera.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/demo.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/exporter.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/exporter_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/lights.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/objects.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/shapes.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/usd/utils.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/CMakeLists.txt +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/array_traits.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/array_traits_test.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/crossplatform.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/func_traits.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/func_traits_test.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/func_wrap.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/func_wrap_test.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/tuple_tools.h +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/util/tuple_tools_test.cc +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/viewer.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco/viewer_test.py +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco.egg-info/SOURCES.txt +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco.egg-info/dependency_links.txt +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco.egg-info/requires.txt +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/mujoco.egg-info/top_level.txt +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/setup.cfg +0 -0
- {mujoco-3.6.0 → mujoco-3.8.0}/setup.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mujoco
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.8.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.
|
|
8
|
+
Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.8.0
|
|
9
9
|
Project-URL: Repository, https://github.com/google-deepmind/mujoco
|
|
10
|
-
Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.
|
|
10
|
+
Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.8.0/changelog.html
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
21
|
Classifier: Topic :: Scientific/Engineering
|
|
21
22
|
Requires-Python: >=3.10
|
|
22
23
|
Description-Content-Type: text/markdown
|
|
@@ -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.
|
|
89
|
+
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.8.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.
|
|
97
|
+
MUJOCO_LIBRARY mujoco mujoco.3.8.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
|
-
|
|
196
|
+
c7fb32eea8c92bebeea9f0735041a72aa20c75f5 # v3.0.4
|
|
197
197
|
TARGETS
|
|
198
198
|
pybind11::pybind11_headers
|
|
199
199
|
EXCLUDE_FROM_ALL
|
|
@@ -966,7 +966,7 @@ Euler integrator, semi-implicit in velocity.
|
|
|
966
966
|
self.assertEqual(mujoco.mjtEnableBit.mjENBL_OVERRIDE, 1 << 0)
|
|
967
967
|
self.assertEqual(mujoco.mjtEnableBit.mjENBL_ENERGY, 1 << 1)
|
|
968
968
|
self.assertEqual(mujoco.mjtEnableBit.mjENBL_FWDINV, 1 << 2)
|
|
969
|
-
self.assertEqual(mujoco.mjtEnableBit.mjNENABLE,
|
|
969
|
+
self.assertEqual(mujoco.mjtEnableBit.mjNENABLE, 5)
|
|
970
970
|
self.assertEqual(mujoco.mjtGeom.mjGEOM_PLANE, 0)
|
|
971
971
|
self.assertEqual(mujoco.mjtGeom.mjGEOM_HFIELD, 1)
|
|
972
972
|
self.assertEqual(mujoco.mjtGeom.mjGEOM_SPHERE, 2)
|
|
@@ -1216,13 +1216,15 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1216
1216
|
mujoco.set_mjcb_control(lambda m, d: None)
|
|
1217
1217
|
mujoco.mj_step(model_instances[-1], data_instances[-1])
|
|
1218
1218
|
mujoco.set_mjcb_control(None)
|
|
1219
|
+
# Reference counting changed in Python 3.14.
|
|
1220
|
+
expected_refcount = 2 if sys.version_info < (3, 14) else 1
|
|
1219
1221
|
while data_instances:
|
|
1220
1222
|
d = data_instances.pop()
|
|
1221
|
-
self.assertEqual(sys.getrefcount(d),
|
|
1223
|
+
self.assertEqual(sys.getrefcount(d), expected_refcount)
|
|
1222
1224
|
del d
|
|
1223
1225
|
while model_instances:
|
|
1224
1226
|
m = model_instances.pop()
|
|
1225
|
-
self.assertEqual(sys.getrefcount(m),
|
|
1227
|
+
self.assertEqual(sys.getrefcount(m), expected_refcount)
|
|
1226
1228
|
|
|
1227
1229
|
# This test is disabled on PyPy as it uses sys.getrefcount
|
|
1228
1230
|
# However PyPy is not officially supported by MuJoCo
|
|
@@ -1236,7 +1238,9 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1236
1238
|
# passed to getrefcount.
|
|
1237
1239
|
self.assertEqual(sys.getrefcount(data.model), 3)
|
|
1238
1240
|
del data
|
|
1239
|
-
|
|
1241
|
+
# Reference counting changed in Python 3.14.
|
|
1242
|
+
expected_refcount = 2 if sys.version_info < (3, 14) else 1
|
|
1243
|
+
self.assertEqual(sys.getrefcount(model), expected_refcount)
|
|
1240
1244
|
|
|
1241
1245
|
def test_can_initialize_mjv_structs(self):
|
|
1242
1246
|
self.assertIsInstance(mujoco.MjvScene(), mujoco.MjvScene)
|
|
@@ -1881,6 +1885,29 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1881
1885
|
mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
|
|
1882
1886
|
np.testing.assert_array_equal(result, [1, 0, 0, 0])
|
|
1883
1887
|
|
|
1888
|
+
def test_poly_stiffness(self):
|
|
1889
|
+
xml = r"""
|
|
1890
|
+
<mujoco>
|
|
1891
|
+
<worldbody>
|
|
1892
|
+
<body>
|
|
1893
|
+
<geom type="sphere" size="0.1"/>
|
|
1894
|
+
<joint name="slide" type="slide" stiffness="1 2 3"/>
|
|
1895
|
+
</body>
|
|
1896
|
+
</worldbody>
|
|
1897
|
+
</mujoco>
|
|
1898
|
+
"""
|
|
1899
|
+
model = mujoco.MjModel.from_xml_string(xml)
|
|
1900
|
+
data = mujoco.MjData(model)
|
|
1901
|
+
self.assertEqual(model.jnt_stiffness[0], 1)
|
|
1902
|
+
np.testing.assert_array_equal(
|
|
1903
|
+
model.jnt_stiffnesspoly[0], [2, 3])
|
|
1904
|
+
|
|
1905
|
+
x = 0.5
|
|
1906
|
+
data.qpos[0] = x
|
|
1907
|
+
mujoco.mj_forward(model, data)
|
|
1908
|
+
expected = -(1*x + 2*x*abs(x) + 3*x**3)
|
|
1909
|
+
np.testing.assert_allclose(data.qfrc_spring[0], expected)
|
|
1910
|
+
|
|
1884
1911
|
def _assert_attributes_equal(self, actual_obj, expected_obj, attr_to_compare):
|
|
1885
1912
|
for name in attr_to_compare:
|
|
1886
1913
|
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
|
-
|
|
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}
|
|
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}
|
|
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)
|
|
@@ -18,7 +18,11 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
18
18
|
set(CMAKE_CXX_STANDARD 20)
|
|
19
19
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
20
20
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
21
|
-
|
|
21
|
+
if(EMSCRIPTEN)
|
|
22
|
+
set(CMAKE_C_EXTENSIONS ON)
|
|
23
|
+
else()
|
|
24
|
+
set(CMAKE_C_EXTENSIONS OFF)
|
|
25
|
+
endif()
|
|
22
26
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # For LLVM tooling
|
|
23
27
|
|
|
24
28
|
if(NOT CMAKE_CONFIGURATION_TYPES)
|
|
@@ -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.
|
|
@@ -46,6 +46,7 @@ struct mjtDisableBit {
|
|
|
46
46
|
std::make_pair("mjDSBL_AUTORESET", ::mjtDisableBit::mjDSBL_AUTORESET),
|
|
47
47
|
std::make_pair("mjDSBL_NATIVECCD", ::mjtDisableBit::mjDSBL_NATIVECCD),
|
|
48
48
|
std::make_pair("mjDSBL_ISLAND", ::mjtDisableBit::mjDSBL_ISLAND),
|
|
49
|
+
std::make_pair("mjDSBL_MULTICCD", ::mjtDisableBit::mjDSBL_MULTICCD),
|
|
49
50
|
std::make_pair("mjNDISABLE", ::mjtDisableBit::mjNDISABLE)};
|
|
50
51
|
};
|
|
51
52
|
|
|
@@ -57,7 +58,6 @@ struct mjtEnableBit {
|
|
|
57
58
|
std::make_pair("mjENBL_ENERGY", ::mjtEnableBit::mjENBL_ENERGY),
|
|
58
59
|
std::make_pair("mjENBL_FWDINV", ::mjtEnableBit::mjENBL_FWDINV),
|
|
59
60
|
std::make_pair("mjENBL_INVDISCRETE", ::mjtEnableBit::mjENBL_INVDISCRETE),
|
|
60
|
-
std::make_pair("mjENBL_MULTICCD", ::mjtEnableBit::mjENBL_MULTICCD),
|
|
61
61
|
std::make_pair("mjENBL_SLEEP", ::mjtEnableBit::mjENBL_SLEEP),
|
|
62
62
|
std::make_pair("mjNENABLE", ::mjtEnableBit::mjNENABLE)};
|
|
63
63
|
};
|
|
@@ -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),
|
|
@@ -88,6 +88,28 @@ struct mj_deleteFileVFS {
|
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
+
struct mj_containsBufferVFS {
|
|
92
|
+
static constexpr char name[] = "mj_containsBufferVFS";
|
|
93
|
+
static constexpr char doc[] = "Check if buffer exists in VFS; return 1: exists, 0: not found.";
|
|
94
|
+
using type = int (mjVFS *, const char *);
|
|
95
|
+
static constexpr auto param_names = std::make_tuple("vfs", "name");
|
|
96
|
+
|
|
97
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
98
|
+
return ::mj_containsBufferVFS;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
struct mj_containsFileVFS {
|
|
103
|
+
static constexpr char name[] = "mj_containsFileVFS";
|
|
104
|
+
static constexpr char doc[] = "Check if file exists in VFS; return 1: exists, 0: not found.";
|
|
105
|
+
using type = int (mjVFS *, const char *, const char *);
|
|
106
|
+
static constexpr auto param_names = std::make_tuple("vfs", "directory", "filename");
|
|
107
|
+
|
|
108
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
109
|
+
return ::mj_containsFileVFS;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
91
113
|
struct mj_deleteVFS {
|
|
92
114
|
static constexpr char name[] = "mj_deleteVFS";
|
|
93
115
|
static constexpr char doc[] = "Delete all files from VFS and deallocates VFS internal memory.";
|
|
@@ -198,6 +220,17 @@ struct mj_parse {
|
|
|
198
220
|
}
|
|
199
221
|
};
|
|
200
222
|
|
|
223
|
+
struct mj_encode {
|
|
224
|
+
static constexpr char name[] = "mj_encode";
|
|
225
|
+
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.";
|
|
226
|
+
using type = int (const mjSpec *, const mjModel *, const char *, const char *, const mjVFS *, char *, int);
|
|
227
|
+
static constexpr auto param_names = std::make_tuple("s", "m", "filename", "content_type", "vfs", "error", "error_sz");
|
|
228
|
+
|
|
229
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
230
|
+
return ::mj_encode;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
201
234
|
struct mj_compile {
|
|
202
235
|
static constexpr char name[] = "mj_compile";
|
|
203
236
|
static constexpr char doc[] = "Compile spec to model.";
|
|
@@ -1199,6 +1232,17 @@ struct mj_rnePostConstraint {
|
|
|
1199
1232
|
}
|
|
1200
1233
|
};
|
|
1201
1234
|
|
|
1235
|
+
struct mj_maxContact {
|
|
1236
|
+
static constexpr char name[] = "mj_maxContact";
|
|
1237
|
+
static constexpr char doc[] = "Return the maximum number of contacts that can be generated between two geoms. If has_margin is -1, then the margin is pulled from the model, otherwise if has_margin > 0 indicates that the geoms have a positive margin.";
|
|
1238
|
+
using type = int (const mjModel *, int, int, int);
|
|
1239
|
+
static constexpr auto param_names = std::make_tuple("m", "g1", "g2", "has_margin");
|
|
1240
|
+
|
|
1241
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
1242
|
+
return ::mj_maxContact;
|
|
1243
|
+
}
|
|
1244
|
+
};
|
|
1245
|
+
|
|
1202
1246
|
struct mj_collision {
|
|
1203
1247
|
static constexpr char name[] = "mj_collision";
|
|
1204
1248
|
static constexpr char doc[] = "Run collision detection.";
|
|
@@ -1642,7 +1686,7 @@ struct mj_objectAcceleration {
|
|
|
1642
1686
|
struct mj_geomDistance {
|
|
1643
1687
|
static constexpr char name[] = "mj_geomDistance";
|
|
1644
1688
|
static constexpr char doc[] = "Return smallest signed distance between two geoms and optionally segment from geom1 to geom2.";
|
|
1645
|
-
using type = mjtNum (const mjModel *,
|
|
1689
|
+
using type = mjtNum (const mjModel *, mjData *, int, int, mjtNum, mjtNum (*)[6]);
|
|
1646
1690
|
static constexpr auto param_names = std::make_tuple("m", "d", "geom1", "geom2", "distmax", "fromto");
|
|
1647
1691
|
|
|
1648
1692
|
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
@@ -4048,6 +4092,39 @@ struct mjp_findDecoder {
|
|
|
4048
4092
|
}
|
|
4049
4093
|
};
|
|
4050
4094
|
|
|
4095
|
+
struct mjp_registerEncoder {
|
|
4096
|
+
static constexpr char name[] = "mjp_registerEncoder";
|
|
4097
|
+
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.";
|
|
4098
|
+
using type = void (const mjpEncoder *);
|
|
4099
|
+
static constexpr auto param_names = std::make_tuple("encoder");
|
|
4100
|
+
|
|
4101
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
4102
|
+
return ::mjp_registerEncoder;
|
|
4103
|
+
}
|
|
4104
|
+
};
|
|
4105
|
+
|
|
4106
|
+
struct mjp_defaultEncoder {
|
|
4107
|
+
static constexpr char name[] = "mjp_defaultEncoder";
|
|
4108
|
+
static constexpr char doc[] = "Set default resource encoder definition.";
|
|
4109
|
+
using type = void (mjpEncoder *);
|
|
4110
|
+
static constexpr auto param_names = std::make_tuple("encoder");
|
|
4111
|
+
|
|
4112
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
4113
|
+
return ::mjp_defaultEncoder;
|
|
4114
|
+
}
|
|
4115
|
+
};
|
|
4116
|
+
|
|
4117
|
+
struct mjp_findEncoder {
|
|
4118
|
+
static constexpr char name[] = "mjp_findEncoder";
|
|
4119
|
+
static constexpr char doc[] = "Return the encoder that matches against the content type or filename extension. If no match, return NULL.";
|
|
4120
|
+
using type = const mjpEncoder * (const char *, const char *);
|
|
4121
|
+
static constexpr auto param_names = std::make_tuple("filename", "content_type");
|
|
4122
|
+
|
|
4123
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
4124
|
+
return ::mjp_findEncoder;
|
|
4125
|
+
}
|
|
4126
|
+
};
|
|
4127
|
+
|
|
4051
4128
|
struct mju_openResource {
|
|
4052
4129
|
static constexpr char name[] = "mju_openResource";
|
|
4053
4130
|
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 +4642,17 @@ struct mjs_setToAdhesion {
|
|
|
4565
4642
|
}
|
|
4566
4643
|
};
|
|
4567
4644
|
|
|
4645
|
+
struct mjs_setToDCMotor {
|
|
4646
|
+
static constexpr char name[] = "mjs_setToDCMotor";
|
|
4647
|
+
static constexpr char doc[] = "Set actuator to DC motor; return error if any.";
|
|
4648
|
+
using type = const char * (mjsActuator *, double (*)[2], double, double (*)[3], double (*)[3], double (*)[2], double (*)[3], double (*)[6], double (*)[6], double (*)[5], int);
|
|
4649
|
+
static constexpr auto param_names = std::make_tuple("actuator", "motorconst", "resistance", "nominal", "saturation", "inductance", "cogging", "controller", "thermal", "lugre", "input_mode");
|
|
4650
|
+
|
|
4651
|
+
MUJOCO_ALWAYS_INLINE static type& GetFunc() {
|
|
4652
|
+
return *reinterpret_cast<type*>(&::mjs_setToDCMotor);
|
|
4653
|
+
}
|
|
4654
|
+
};
|
|
4655
|
+
|
|
4568
4656
|
struct mjs_addMesh {
|
|
4569
4657
|
static constexpr char name[] = "mjs_addMesh";
|
|
4570
4658
|
static constexpr char doc[] = "Add mesh.";
|
|
@@ -304,6 +304,7 @@ PYBIND11_MODULE(_functions, pymodule) {
|
|
|
304
304
|
m, d, flg_acc, result.data());
|
|
305
305
|
});
|
|
306
306
|
Def<traits::mj_rnePostConstraint>(pymodule);
|
|
307
|
+
Def<traits::mj_maxContact>(pymodule);
|
|
307
308
|
Def<traits::mj_collision>(pymodule);
|
|
308
309
|
Def<traits::mj_makeConstraint>(pymodule);
|
|
309
310
|
Def<traits::mj_island>(pymodule);
|
|
@@ -663,7 +664,7 @@ PYBIND11_MODULE(_functions, pymodule) {
|
|
|
663
664
|
Def<traits::mj_contactForce>(pymodule);
|
|
664
665
|
Def<traits::mj_geomDistance>(
|
|
665
666
|
pymodule,
|
|
666
|
-
[](const raw::MjModel* m,
|
|
667
|
+
[](const raw::MjModel* m, raw::MjData* d,
|
|
667
668
|
int geom1, int geom2, mjtNum distmax,
|
|
668
669
|
std::optional<Eigen::Ref<EigenArrayXX>> fromto) {
|
|
669
670
|
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 ) \
|
|
@@ -46,7 +46,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
|
|
46
46
|
('mjDSBL_AUTORESET', 65536),
|
|
47
47
|
('mjDSBL_NATIVECCD', 131072),
|
|
48
48
|
('mjDSBL_ISLAND', 262144),
|
|
49
|
-
('
|
|
49
|
+
('mjDSBL_MULTICCD', 524288),
|
|
50
|
+
('mjNDISABLE', 20),
|
|
50
51
|
]),
|
|
51
52
|
)),
|
|
52
53
|
('mjtEnableBit',
|
|
@@ -58,9 +59,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
|
|
58
59
|
('mjENBL_ENERGY', 2),
|
|
59
60
|
('mjENBL_FWDINV', 4),
|
|
60
61
|
('mjENBL_INVDISCRETE', 8),
|
|
61
|
-
('
|
|
62
|
-
('
|
|
63
|
-
('mjNENABLE', 6),
|
|
62
|
+
('mjENBL_SLEEP', 16),
|
|
63
|
+
('mjNENABLE', 5),
|
|
64
64
|
]),
|
|
65
65
|
)),
|
|
66
66
|
('mjtJoint',
|
|
@@ -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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
579
|
-
('
|
|
580
|
-
('
|
|
581
|
-
('
|
|
582
|
-
('
|
|
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',
|
|
@@ -42,9 +42,8 @@ class EnumsTest(absltest.TestCase):
|
|
|
42
42
|
('mjENBL_ENERGY', 1<<1),
|
|
43
43
|
('mjENBL_FWDINV', 1<<2),
|
|
44
44
|
('mjENBL_INVDISCRETE', 1<<3),
|
|
45
|
-
('
|
|
46
|
-
('
|
|
47
|
-
('mjNENABLE', 6)))
|
|
45
|
+
('mjENBL_SLEEP', 1<<4),
|
|
46
|
+
('mjNENABLE', 5)))
|
|
48
47
|
|
|
49
48
|
# values mostly increment by one with occasional overrides
|
|
50
49
|
def test_mjtGeom(self): # pylint: disable=invalid-name
|