mujoco 3.7.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.7.0/mujoco.egg-info → mujoco-3.8.0}/PKG-INFO +4 -3
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/CMakeLists.txt +3 -3
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/bindings_test.py +8 -4
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/MujocoOptions.cmake +5 -1
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/enum_traits.h +1 -1
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/function_traits.h +33 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/functions.cc +1 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/enums.py +4 -4
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/enums_test.py +2 -3
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/functions.py +72 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/structs.py +43 -1
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/mjpython/Info.plist +4 -4
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/CMakeLists.txt +1 -1
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/SimulateOptions.cmake +5 -1
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/simulate.cc +2 -2
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/specs.cc.inc +670 -653
- {mujoco-3.7.0 → mujoco-3.8.0/mujoco.egg-info}/PKG-INFO +4 -3
- {mujoco-3.7.0 → mujoco-3.8.0}/pyproject.toml +4 -3
- {mujoco-3.7.0 → mujoco-3.8.0}/LICENSE +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/LICENSES_THIRD_PARTY.md +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/MANIFEST.in +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/README.md +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/callbacks.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cgl/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cgl/cgl.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/MujocoDependencies.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/MujocoLinkOptions.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/ShellTests.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/cmake/TargetAddRpath.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/constants.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/egl/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/egl/egl_ext.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/enums.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/errors.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/errors.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/functions.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/gl_context.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/glfw/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/indexer_xmacro.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/indexers.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/indexers.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/ast_nodes.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/ast_nodes_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/codegen/formatter.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_enums.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_functions.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/codegen/generate_structs.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/functions_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/mjxmacro.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/structs_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/type_parsing.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/introspect/type_parsing_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/memory_leak_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/minimize.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/minimize_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.icns +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.mm +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/mjpython/mjpython.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/msh2obj.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/msh2obj_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/osmesa/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/private.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/raw.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/render.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/render_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/renderer.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/renderer_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rendering/classic/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rendering/classic/gl_context.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rendering/classic/renderer.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rollout.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rollout.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/rollout_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/serialization.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/array_safety.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoLinkOptions.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/cmake/SimulateDependencies.cmake +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_adapter.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_adapter.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_corevideo.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_corevideo.mm +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_dispatch.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/glfw_dispatch.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/macos_gui.mm +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/main.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/platform_ui_adapter.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/platform_ui_adapter.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate/simulate.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/simulate.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/specs.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/specs_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/specs_wrapper.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/specs_wrapper.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/structs.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/structs.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/structs_wrappers.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/io.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/model_modifier.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/optimize.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/parameter.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/plotting.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/residual.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/signal_modifier.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/signal_transform.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/timeseries.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/_src/trajectory.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/py.typed +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/builder.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/defaults.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/base.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/covariance.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/group.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/insights.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/optimization_trace.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/parameter_distribution.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/parameters.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/row.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/signals.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/sections/video.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/covariance.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/group.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/insights.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/layout.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/optimization_trace.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/parameter_confidence.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/parameters_table.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/plot_generic.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/row.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/signals.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/templates/video.html +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/report/utils.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/__init__.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/conftest.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_integration.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_model_modifier.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_parameter.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_signal.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_timeseries.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/sysid/tests/test_trajectory.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/MJCF_NoRoot.zip +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/MJCF_Root.zip +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/abdomen_1_body.msh +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/model.urdf +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/model.xml +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/msh.xml +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/simple_usd_preview_surface.usda +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/testdata/usd_golden.usda +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/threadpool.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/threadpool.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/camera.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/demo.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/exporter.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/exporter_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/lights.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/objects.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/shapes.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/usd/utils.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/CMakeLists.txt +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/array_traits.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/array_traits_test.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/crossplatform.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/func_traits.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/func_traits_test.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/func_wrap.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/func_wrap_test.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/tuple_tools.h +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/util/tuple_tools_test.cc +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/viewer.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco/viewer_test.py +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco.egg-info/SOURCES.txt +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco.egg-info/dependency_links.txt +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco.egg-info/requires.txt +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/mujoco.egg-info/top_level.txt +0 -0
- {mujoco-3.7.0 → mujoco-3.8.0}/setup.cfg +0 -0
- {mujoco-3.7.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)
|
|
@@ -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)
|
|
@@ -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
|
};
|
|
@@ -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.";
|
|
@@ -1210,6 +1232,17 @@ struct mj_rnePostConstraint {
|
|
|
1210
1232
|
}
|
|
1211
1233
|
};
|
|
1212
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
|
+
|
|
1213
1246
|
struct mj_collision {
|
|
1214
1247
|
static constexpr char name[] = "mj_collision";
|
|
1215
1248
|
static constexpr char doc[] = "Run collision detection.";
|
|
@@ -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);
|
|
@@ -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',
|
|
@@ -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
|
|
@@ -162,6 +162,52 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
|
|
|
162
162
|
),
|
|
163
163
|
doc='Delete file from VFS; return 0: success, -1: not found in VFS.',
|
|
164
164
|
)),
|
|
165
|
+
('mj_containsBufferVFS',
|
|
166
|
+
FunctionDecl(
|
|
167
|
+
name='mj_containsBufferVFS',
|
|
168
|
+
return_type=ValueType(name='int'),
|
|
169
|
+
parameters=(
|
|
170
|
+
FunctionParameterDecl(
|
|
171
|
+
name='vfs',
|
|
172
|
+
type=PointerType(
|
|
173
|
+
inner_type=ValueType(name='mjVFS'),
|
|
174
|
+
),
|
|
175
|
+
),
|
|
176
|
+
FunctionParameterDecl(
|
|
177
|
+
name='name',
|
|
178
|
+
type=PointerType(
|
|
179
|
+
inner_type=ValueType(name='char', is_const=True),
|
|
180
|
+
),
|
|
181
|
+
),
|
|
182
|
+
),
|
|
183
|
+
doc='Check if buffer exists in VFS; return 1: exists, 0: not found.',
|
|
184
|
+
)),
|
|
185
|
+
('mj_containsFileVFS',
|
|
186
|
+
FunctionDecl(
|
|
187
|
+
name='mj_containsFileVFS',
|
|
188
|
+
return_type=ValueType(name='int'),
|
|
189
|
+
parameters=(
|
|
190
|
+
FunctionParameterDecl(
|
|
191
|
+
name='vfs',
|
|
192
|
+
type=PointerType(
|
|
193
|
+
inner_type=ValueType(name='mjVFS'),
|
|
194
|
+
),
|
|
195
|
+
),
|
|
196
|
+
FunctionParameterDecl(
|
|
197
|
+
name='directory',
|
|
198
|
+
type=PointerType(
|
|
199
|
+
inner_type=ValueType(name='char', is_const=True),
|
|
200
|
+
),
|
|
201
|
+
),
|
|
202
|
+
FunctionParameterDecl(
|
|
203
|
+
name='filename',
|
|
204
|
+
type=PointerType(
|
|
205
|
+
inner_type=ValueType(name='char', is_const=True),
|
|
206
|
+
),
|
|
207
|
+
),
|
|
208
|
+
),
|
|
209
|
+
doc='Check if file exists in VFS; return 1: exists, 0: not found.',
|
|
210
|
+
)),
|
|
165
211
|
('mj_deleteVFS',
|
|
166
212
|
FunctionDecl(
|
|
167
213
|
name='mj_deleteVFS',
|
|
@@ -2407,6 +2453,32 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
|
|
|
2407
2453
|
),
|
|
2408
2454
|
doc='RNE with complete data: compute cacc, cfrc_ext, cfrc_int.',
|
|
2409
2455
|
)),
|
|
2456
|
+
('mj_maxContact',
|
|
2457
|
+
FunctionDecl(
|
|
2458
|
+
name='mj_maxContact',
|
|
2459
|
+
return_type=ValueType(name='int'),
|
|
2460
|
+
parameters=(
|
|
2461
|
+
FunctionParameterDecl(
|
|
2462
|
+
name='m',
|
|
2463
|
+
type=PointerType(
|
|
2464
|
+
inner_type=ValueType(name='mjModel', is_const=True),
|
|
2465
|
+
),
|
|
2466
|
+
),
|
|
2467
|
+
FunctionParameterDecl(
|
|
2468
|
+
name='g1',
|
|
2469
|
+
type=ValueType(name='int'),
|
|
2470
|
+
),
|
|
2471
|
+
FunctionParameterDecl(
|
|
2472
|
+
name='g2',
|
|
2473
|
+
type=ValueType(name='int'),
|
|
2474
|
+
),
|
|
2475
|
+
FunctionParameterDecl(
|
|
2476
|
+
name='has_margin',
|
|
2477
|
+
type=ValueType(name='int'),
|
|
2478
|
+
),
|
|
2479
|
+
),
|
|
2480
|
+
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.', # pylint: disable=line-too-long
|
|
2481
|
+
)),
|
|
2410
2482
|
('mj_collision',
|
|
2411
2483
|
FunctionDecl(
|
|
2412
2484
|
name='mj_collision',
|
|
@@ -972,6 +972,11 @@ STRUCTS: Mapping[str, StructDecl] = dict([
|
|
|
972
972
|
type=ValueType(name='mjtSize'),
|
|
973
973
|
doc='number of element vertex ids in all flexes',
|
|
974
974
|
),
|
|
975
|
+
StructFieldDecl(
|
|
976
|
+
name='nflexstiffness',
|
|
977
|
+
type=ValueType(name='mjtSize'),
|
|
978
|
+
doc='number of stiffness parameters in all flexes',
|
|
979
|
+
),
|
|
975
980
|
StructFieldDecl(
|
|
976
981
|
name='nflexelemedge',
|
|
977
982
|
type=ValueType(name='mjtSize'),
|
|
@@ -2663,6 +2668,22 @@ STRUCTS: Mapping[str, StructDecl] = dict([
|
|
|
2663
2668
|
doc='interpolation (0: vertex, 1: nodes)',
|
|
2664
2669
|
array_extent=('nflex',),
|
|
2665
2670
|
),
|
|
2671
|
+
StructFieldDecl(
|
|
2672
|
+
name='flex_bandwidth',
|
|
2673
|
+
type=PointerType(
|
|
2674
|
+
inner_type=ValueType(name='int'),
|
|
2675
|
+
),
|
|
2676
|
+
doc='precomputed solver bandwidth',
|
|
2677
|
+
array_extent=('nflex',),
|
|
2678
|
+
),
|
|
2679
|
+
StructFieldDecl(
|
|
2680
|
+
name='flex_cellnum',
|
|
2681
|
+
type=PointerType(
|
|
2682
|
+
inner_type=ValueType(name='int'),
|
|
2683
|
+
),
|
|
2684
|
+
doc='finite cell num per dimension',
|
|
2685
|
+
array_extent=('nflex', 3),
|
|
2686
|
+
),
|
|
2666
2687
|
StructFieldDecl(
|
|
2667
2688
|
name='flex_nodeadr',
|
|
2668
2689
|
type=PointerType(
|
|
@@ -2735,6 +2756,14 @@ STRUCTS: Mapping[str, StructDecl] = dict([
|
|
|
2735
2756
|
doc='first element vertex id address',
|
|
2736
2757
|
array_extent=('nflex',),
|
|
2737
2758
|
),
|
|
2759
|
+
StructFieldDecl(
|
|
2760
|
+
name='flex_stiffnessadr',
|
|
2761
|
+
type=PointerType(
|
|
2762
|
+
inner_type=ValueType(name='int'),
|
|
2763
|
+
),
|
|
2764
|
+
doc='stiffness matrix address',
|
|
2765
|
+
array_extent=('nflex',),
|
|
2766
|
+
),
|
|
2738
2767
|
StructFieldDecl(
|
|
2739
2768
|
name='flex_elemedgeadr',
|
|
2740
2769
|
type=PointerType(
|
|
@@ -2965,7 +2994,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([
|
|
|
2965
2994
|
inner_type=ValueType(name='mjtNum'),
|
|
2966
2995
|
),
|
|
2967
2996
|
doc='finite element stiffness matrix',
|
|
2968
|
-
array_extent=('
|
|
2997
|
+
array_extent=('nflexstiffness',),
|
|
2969
2998
|
),
|
|
2970
2999
|
StructFieldDecl(
|
|
2971
3000
|
name='flex_bending',
|
|
@@ -8224,6 +8253,19 @@ STRUCTS: Mapping[str, StructDecl] = dict([
|
|
|
8224
8253
|
type=ValueType(name='int'),
|
|
8225
8254
|
doc='2D passive forces; 0: none, 1: bending, 2: stretching, 3: both', # pylint: disable=line-too-long
|
|
8226
8255
|
),
|
|
8256
|
+
StructFieldDecl(
|
|
8257
|
+
name='cellcount',
|
|
8258
|
+
type=ArrayType(
|
|
8259
|
+
inner_type=ValueType(name='int'),
|
|
8260
|
+
extents=(3,),
|
|
8261
|
+
),
|
|
8262
|
+
doc='grid cell count for finite cell method',
|
|
8263
|
+
),
|
|
8264
|
+
StructFieldDecl(
|
|
8265
|
+
name='order',
|
|
8266
|
+
type=ValueType(name='int'),
|
|
8267
|
+
doc='interpolation order (1: trilinear, 2: quadratic)',
|
|
8268
|
+
),
|
|
8227
8269
|
StructFieldDecl(
|
|
8228
8270
|
name='nodebody',
|
|
8229
8271
|
type=PointerType(
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
<key>CFBundleIdentifier</key>
|
|
8
8
|
<string>org.mujoco.mjpython</string>
|
|
9
9
|
<key>CFBundleVersion</key>
|
|
10
|
-
<string>3.
|
|
10
|
+
<string>3.8.0</string>
|
|
11
11
|
<key>CFBundleGetInfoString</key>
|
|
12
|
-
<string>3.
|
|
12
|
+
<string>3.8.0</string>
|
|
13
13
|
<key>CFBundleLongVersionString</key>
|
|
14
|
-
<string>3.
|
|
14
|
+
<string>3.8.0</string>
|
|
15
15
|
<key>CFBundleShortVersionString</key>
|
|
16
|
-
<string>3.
|
|
16
|
+
<string>3.8.0</string>
|
|
17
17
|
<key>CFBundleExecutable</key>
|
|
18
18
|
<string>mjpython</string>
|
|
19
19
|
<key>CFBundleIconFile</key>
|
|
@@ -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)
|
|
@@ -1192,7 +1192,7 @@ void MakeJointSection(mj::Simulate* sim) {
|
|
|
1192
1192
|
|
|
1193
1193
|
// set range
|
|
1194
1194
|
if (sim->jnt_range_[i].has_value())
|
|
1195
|
-
mju::sprintf_arr(defSlider[0].other, "%.
|
|
1195
|
+
mju::sprintf_arr(defSlider[0].other, "%.17g %.17g",
|
|
1196
1196
|
sim->jnt_range_[i]->first, sim->jnt_range_[i]->second);
|
|
1197
1197
|
else if (sim->jnt_type_[i]==mjJNT_SLIDE) {
|
|
1198
1198
|
mju::strcpy_arr(defSlider[0].other, "-1 1");
|
|
@@ -1251,7 +1251,7 @@ void MakeControlSection(mj::Simulate* sim) {
|
|
|
1251
1251
|
|
|
1252
1252
|
// set range
|
|
1253
1253
|
if (sim->actuator_ctrlrange_[i].has_value())
|
|
1254
|
-
mju::sprintf_arr(defSlider[0].other, "%.
|
|
1254
|
+
mju::sprintf_arr(defSlider[0].other, "%.17g %.17g",
|
|
1255
1255
|
sim->actuator_ctrlrange_[i]->first, sim->actuator_ctrlrange_[i]->second);
|
|
1256
1256
|
else {
|
|
1257
1257
|
mju::strcpy_arr(defSlider[0].other, "-1 1");
|