mujoco-mojo 2.3.2__tar.gz → 2.3.3__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_mojo-2.3.2 → mujoco_mojo-2.3.3}/.gitignore +2 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/PKG-INFO +1 -1
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/getting-started.md +3 -4
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/monte_carlo_example.py +4 -6
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/optimization.md +1 -1
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/optimization_example.py +8 -11
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/boxes_and_springs_monte_carlo.py +4 -6
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/boxes_and_springs_optimization.py +8 -11
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/tennis_racket_theorem.py +7 -10
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/__init__.py +2 -0
- mujoco_mojo-2.3.3/src/mujoco_mojo/mj_state.py +15 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco.py +9 -9
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body.py +75 -88
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/geom.py +36 -37
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/joint.py +11 -10
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/site.py +80 -144
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/equality_base.py +13 -15
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base.py +6 -5
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/load.py +186 -219
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/runtime_manager.py +21 -22
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/signal_manager.py +6 -6
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/video_recorder.py +7 -7
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/settings.py +48 -1
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/monte_carlo.py +3 -6
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/optimization.py +3 -6
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/reloaded.py +43 -52
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/proximity.py +68 -87
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/runner.py +20 -33
- mujoco_mojo-2.3.3/tests/mjcf/body_test.py +128 -0
- mujoco_mojo-2.3.3/tests/mjcf/equality_test.py +71 -0
- mujoco_mojo-2.3.3/tests/mjcf/joint_test.py +77 -0
- mujoco_mojo-2.3.3/tests/mjcf/mujoco_test.py +64 -0
- mujoco_mojo-2.3.3/tests/mjcf/site_test.py +191 -0
- mujoco_mojo-2.3.3/tests/mjcf/visualization_test.py +87 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/loads_test.py +252 -55
- mujoco_mojo-2.3.3/tests/runtime/mojo_model_test.py +55 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/monte_carlo_bumper.py +6 -8
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/optimizer_bumper.py +11 -14
- mujoco_mojo-2.3.3/tests/runtime/runtime_manager_test.py +202 -0
- mujoco_mojo-2.3.3/tests/runtime/settings_test.py +84 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/signal_manager_test.py +22 -21
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/proximity_test.py +81 -54
- mujoco_mojo-2.3.3/tests/utils/utils_test.py +36 -0
- mujoco_mojo-2.3.2/tests/runtime/runtime_manager_test.py +0 -100
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.gitattributes +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.github/workflows/docs.yml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.github/workflows/release.yml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.pre-commit-config.yaml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.python-version +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.vscode/settings.json +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/LICENSE +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/README.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/TODO.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/about.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-hero-logo.png +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-hero-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/light-hero-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/light-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_original.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_with_coacd.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_without_coacd.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/frustums.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/proximity/convex_hull_wireframe.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/proximity/real_wireframe.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/with_coacd.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/without_coacd.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-export-options.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-monitor-view.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-mosaic-view.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-notes-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-plot-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-selector-bar.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-shapes-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/generate-result.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-export-options.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-monitor-view.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-mosaic-view.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-notes-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-plot-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-selector-bar.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-shapes-editor.jpg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/runtime-anim.gif +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/index.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/favicon-switcher.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/mojo-highlighter.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/tablesort.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/stylesheets/extra.css +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/MOJO_RUNTIME_REPORT.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/dojo.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/generate-script.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/init.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/monitor.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/mosaic.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/reloaded.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/running-jobs.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/runtime-script.md +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/mkdocs.yml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/pyproject.toml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/requirements.txt +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/copy_docs_examples_to_examples.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/fix_smart_quotes.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/gen_ref_pages.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/gen_ts_models.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/filestomake.txt +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/make_sensors.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/sensor_template.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/__about__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/base.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/meta.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/defaults.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/dependency_path.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/extension.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/frame.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/include.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/replicate.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/adhesion.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/base.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/cylinder.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/damper.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/dcmotor.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/general.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/intvelocity.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/motor.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/muscle.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/position.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/velocity.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/hfield.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/layer.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/mesh.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/model.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/texture.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/attach.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/camera.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/geom.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/joint.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/site.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/skin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/contact.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/edge.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/elasticity.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/pin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/free_joint.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/inertial.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/light.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/lengthrange.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/exclude.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/pair.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/contact.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/edge.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/elasticity.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/bone.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/connect.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flex.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexstrain.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexvert.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/joint.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/tendon.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/weld.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/key.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/flag.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/accelerometer.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorfrc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorpos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballangvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballquat.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base_collision.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/camprojection.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/clock.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/contact.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/distance.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_kinetic.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_potential.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/force.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangacc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinacc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framepos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framequat.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framexaxis.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameyaxis.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framezaxis.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/fromto.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/gyro.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/insidesite.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointactuatorfrc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitfrc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitpos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointpos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/magnetometer.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/normal.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/rangefinder.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreeangmom.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreecom.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreelinvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tactile.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonactuatorfrc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitfrc.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitpos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonpos.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonvel.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/torque.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/touch.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/user.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/velocimeter.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/size.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/statistic.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/joint.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/geom.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/pulley.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/site.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/tendon_base.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/global_.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/headlight.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/map.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/quality.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/rgba.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/scale.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/orientation.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/plugin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/pose.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/position.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/xml_model.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mojo_model.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/stochas/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/reloaded.sh +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/run_mc.sh +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/run_opt.sh +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/typing.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/color.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/dataframe.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/defaults.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/filters/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/filters/filters.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/interp.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/cli.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/lab_executor.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/main.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/plot_config.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/monitor.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/morph.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/mosaic.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/sensai.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/sensai/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/sensai/agent.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/shared.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/base.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/error.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/monitor.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/morph.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/mosaic.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/_sensai.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_chart.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_header.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_json_editor.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_lab_trigger.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_macros.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_media_player.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_overlays.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_series_panel.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_signal_lab.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_trial_status.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/chime.mp3 +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/dark-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/main.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/monitor.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/mosaic.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/sensai.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.d.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.d.ts.map +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/trial-viewer.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/light-logo.svg +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/main.css +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/build.mjs +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package-lock.json +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package.json +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/cm-bundle.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/format.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/options.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/plot-config.generated.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/toast.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/models.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/monitor.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/mosaic.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/sensai.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/store.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/trial-viewer.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/types/global.d.ts +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/tsconfig.json +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/__init__.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/alpine.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/codemirror.bundle.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/confetti.browser.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/iro.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.css +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/lz-string.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/plotly-3.4.0.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/tailwind.min.js +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/trial_viewer.html +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/log.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/proximity_mixin.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/statusing.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/utils.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/visualization.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/.gitignore +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/make_skybox.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/ball.stl +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/bunny2.stl +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/cup.stl +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/inertial_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/mesh.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/orientation_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/pos_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/pose_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/xml_model_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/model_with_skybox.xml +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/asset_image.png +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/monte_carlo.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/overrides.json +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/running_with_slurm.sh +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/conftest.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/smoke_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/test_writer.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/color_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/dataframe_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/filter_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/interp_test.py +0 -0
- {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mujoco-mojo
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
4
4
|
Summary: A complete MJCF lifecycle and trial orchestration suite for MuJoCo, powered by Pydantic v2.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Hydrowelder/mujoco-mojo
|
|
6
6
|
Project-URL: Documentation, https://hydrowelder.github.io/mujoco-mojo/
|
|
@@ -43,14 +43,13 @@ Before writing code, it is helpful to understand the three pillars of a Mojo pro
|
|
|
43
43
|
def runtime(
|
|
44
44
|
mojo_model: mojo.MojoModel,
|
|
45
45
|
runtime_manager: rt.RuntimeManager,
|
|
46
|
-
|
|
47
|
-
mj_data: mujoco.MjData,
|
|
46
|
+
state: mojo.MjState,
|
|
48
47
|
*args,
|
|
49
48
|
**kwargs,
|
|
50
49
|
):
|
|
51
50
|
# Step the physics and apply logic here
|
|
52
|
-
while
|
|
53
|
-
runtime_manager.step(
|
|
51
|
+
while state.data.time < 10.0:
|
|
52
|
+
runtime_manager.step(state)
|
|
54
53
|
```
|
|
55
54
|
|
|
56
55
|
- **Request-Based Telemetry:** You don't (*have to*) manually log data. Instead, you "Request" that specific geoms, sites, or custom forces be tracked by the `SignalManager`.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
from typing import Literal
|
|
4
4
|
|
|
5
|
-
import mujoco
|
|
6
5
|
import numpy as np
|
|
7
6
|
from pydantic import Field
|
|
8
7
|
|
|
@@ -254,8 +253,7 @@ def generate(mojo_model: mojo.MojoModel, *args, **kwargs) -> mojo.MojoModel:
|
|
|
254
253
|
def runtime(
|
|
255
254
|
mojo_model: mojo.MojoModel,
|
|
256
255
|
runtime_manager: rt.RuntimeManager,
|
|
257
|
-
|
|
258
|
-
mj_data: mujoco.MjData,
|
|
256
|
+
state: mojo.MjState,
|
|
259
257
|
*args,
|
|
260
258
|
**kwargs,
|
|
261
259
|
) -> mojo.MojoModel:
|
|
@@ -272,7 +270,7 @@ def runtime(
|
|
|
272
270
|
path=Path("runtime-anim.gif"),
|
|
273
271
|
camera_name=FIXED_CAMERA_NAME,
|
|
274
272
|
show_loads=True,
|
|
275
|
-
).setup(
|
|
273
|
+
).setup(state).register_to_rm(rm)
|
|
276
274
|
# --8<-- [end:video]
|
|
277
275
|
|
|
278
276
|
# Register forces from our handoff data
|
|
@@ -293,8 +291,8 @@ def runtime(
|
|
|
293
291
|
|
|
294
292
|
# --8<-- [start:stepping]
|
|
295
293
|
# Step until 2.0 seconds
|
|
296
|
-
while
|
|
297
|
-
rm.step(
|
|
294
|
+
while state.data.time < 2.0:
|
|
295
|
+
rm.step(state)
|
|
298
296
|
# --8<-- [end:stepping]
|
|
299
297
|
|
|
300
298
|
return mojo_model
|
|
@@ -54,7 +54,7 @@ The **Objective Function** is the "grade" you give to a simulation. It is a stan
|
|
|
54
54
|
--8<-- "docs/user-guides/optimization_example.py:score-handle"
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
A valid objective function must accept the `MojoModel`, the `Path` to the telemetry outputs requested during runtime, and
|
|
57
|
+
A valid objective function must accept the `MojoModel`, the `Path` to the telemetry outputs requested during runtime, and an `MjState` object.
|
|
58
58
|
|
|
59
59
|
???+ example "Example: Scoring Performance"
|
|
60
60
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
from typing import Literal
|
|
3
3
|
|
|
4
|
-
import mujoco
|
|
5
4
|
import numpy as np
|
|
6
5
|
from pydantic import Field
|
|
7
6
|
|
|
@@ -196,8 +195,7 @@ def generate(mojo_model: mojo.MojoModel, *args, **kwargs) -> mojo.MojoModel:
|
|
|
196
195
|
def runtime(
|
|
197
196
|
mojo_model: mojo.MojoModel,
|
|
198
197
|
runtime_manager: rt.RuntimeManager,
|
|
199
|
-
|
|
200
|
-
mj_data: mujoco.MjData,
|
|
198
|
+
state: mojo.MjState,
|
|
201
199
|
*args,
|
|
202
200
|
**kwargs,
|
|
203
201
|
) -> mojo.MojoModel:
|
|
@@ -215,8 +213,8 @@ def runtime(
|
|
|
215
213
|
b.request(rm.signal_manager)
|
|
216
214
|
handoff.box1_rot.request(rm.signal_manager)
|
|
217
215
|
|
|
218
|
-
while
|
|
219
|
-
rm.step(
|
|
216
|
+
while state.data.time < 2.0:
|
|
217
|
+
rm.step(state)
|
|
220
218
|
|
|
221
219
|
return mojo_model
|
|
222
220
|
|
|
@@ -226,8 +224,7 @@ def runtime(
|
|
|
226
224
|
def objective(
|
|
227
225
|
mojo_model: mojo.MojoModel,
|
|
228
226
|
telemetry: Path,
|
|
229
|
-
|
|
230
|
-
mj_data: mujoco.MjData,
|
|
227
|
+
state: mojo.MjState,
|
|
231
228
|
) -> float:
|
|
232
229
|
# --8<-- [end:score-handle]
|
|
233
230
|
"""
|
|
@@ -235,12 +232,12 @@ def objective(
|
|
|
235
232
|
"""
|
|
236
233
|
handoff = mojo_model.get_user_data(Handoff)
|
|
237
234
|
|
|
238
|
-
w1 = handoff.box1.rt_ang_vel(
|
|
239
|
-
w2 = handoff.box2.rt_ang_vel(
|
|
235
|
+
w1 = handoff.box1.rt_ang_vel(state)
|
|
236
|
+
w2 = handoff.box2.rt_ang_vel(state)
|
|
240
237
|
omega_score = float(np.linalg.norm(w1 - w2))
|
|
241
238
|
|
|
242
|
-
ke1 = handoff.box1.rt_trans_ke(
|
|
243
|
-
ke2 = handoff.box2.rt_trans_ke(
|
|
239
|
+
ke1 = handoff.box1.rt_trans_ke(state)
|
|
240
|
+
ke2 = handoff.box2.rt_trans_ke(state)
|
|
244
241
|
total_ke = ke1 + ke2
|
|
245
242
|
ke_score = 1 / (total_ke + 1e-6)
|
|
246
243
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
from typing import Literal
|
|
3
3
|
|
|
4
|
-
import mujoco
|
|
5
4
|
import numpy as np
|
|
6
5
|
from pydantic import Field
|
|
7
6
|
|
|
@@ -220,8 +219,7 @@ def generate(mojo_model: mojo.MojoModel, *args, **kwargs) -> mojo.MojoModel:
|
|
|
220
219
|
def runtime(
|
|
221
220
|
mojo_model: mojo.MojoModel,
|
|
222
221
|
runtime_manager: rt.RuntimeManager,
|
|
223
|
-
|
|
224
|
-
mj_data: mujoco.MjData,
|
|
222
|
+
state: mojo.MjState,
|
|
225
223
|
*args,
|
|
226
224
|
**kwargs,
|
|
227
225
|
) -> mojo.MojoModel:
|
|
@@ -234,7 +232,7 @@ def runtime(
|
|
|
234
232
|
path=Path("runtime-anim.gif"),
|
|
235
233
|
camera_name=FIXED_CAMERA_NAME,
|
|
236
234
|
show_loads=True,
|
|
237
|
-
).setup(
|
|
235
|
+
).setup(state).register_to_rm(rm)
|
|
238
236
|
|
|
239
237
|
# Register forces from our handoff data
|
|
240
238
|
handoff.add_spring_force("pz", rm)
|
|
@@ -249,8 +247,8 @@ def runtime(
|
|
|
249
247
|
)
|
|
250
248
|
handoff.box1_rot.request(rm.signal_manager)
|
|
251
249
|
# Step until 2.0 seconds
|
|
252
|
-
while
|
|
253
|
-
rm.step(
|
|
250
|
+
while state.data.time < 2.0:
|
|
251
|
+
rm.step(state)
|
|
254
252
|
|
|
255
253
|
return mojo_model
|
|
256
254
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
from typing import Literal
|
|
3
3
|
|
|
4
|
-
import mujoco
|
|
5
4
|
import numpy as np
|
|
6
5
|
from pydantic import Field
|
|
7
6
|
|
|
@@ -196,8 +195,7 @@ def generate(mojo_model: mojo.MojoModel, *args, **kwargs) -> mojo.MojoModel:
|
|
|
196
195
|
def runtime(
|
|
197
196
|
mojo_model: mojo.MojoModel,
|
|
198
197
|
runtime_manager: rt.RuntimeManager,
|
|
199
|
-
|
|
200
|
-
mj_data: mujoco.MjData,
|
|
198
|
+
state: mojo.MjState,
|
|
201
199
|
*args,
|
|
202
200
|
**kwargs,
|
|
203
201
|
) -> mojo.MojoModel:
|
|
@@ -215,8 +213,8 @@ def runtime(
|
|
|
215
213
|
b.request(rm.signal_manager)
|
|
216
214
|
handoff.box1_rot.request(rm.signal_manager)
|
|
217
215
|
|
|
218
|
-
while
|
|
219
|
-
rm.step(
|
|
216
|
+
while state.data.time < 2.0:
|
|
217
|
+
rm.step(state)
|
|
220
218
|
|
|
221
219
|
return mojo_model
|
|
222
220
|
|
|
@@ -224,20 +222,19 @@ def runtime(
|
|
|
224
222
|
def objective(
|
|
225
223
|
mojo_model: mojo.MojoModel,
|
|
226
224
|
telemetry: Path,
|
|
227
|
-
|
|
228
|
-
mj_data: mujoco.MjData,
|
|
225
|
+
state: mojo.MjState,
|
|
229
226
|
) -> float:
|
|
230
227
|
"""
|
|
231
228
|
Score the trial: Low relative angular velocity (stability) weighted against high translational kinetic energy.
|
|
232
229
|
"""
|
|
233
230
|
handoff = mojo_model.get_user_data(Handoff)
|
|
234
231
|
|
|
235
|
-
w1 = handoff.box1.rt_ang_vel(
|
|
236
|
-
w2 = handoff.box2.rt_ang_vel(
|
|
232
|
+
w1 = handoff.box1.rt_ang_vel(state)
|
|
233
|
+
w2 = handoff.box2.rt_ang_vel(state)
|
|
237
234
|
omega_score = float(np.linalg.norm(w1 - w2))
|
|
238
235
|
|
|
239
|
-
ke1 = handoff.box1.rt_trans_ke(
|
|
240
|
-
ke2 = handoff.box2.rt_trans_ke(
|
|
236
|
+
ke1 = handoff.box1.rt_trans_ke(state)
|
|
237
|
+
ke2 = handoff.box2.rt_trans_ke(state)
|
|
241
238
|
total_ke = ke1 + ke2
|
|
242
239
|
ke_score = 1 / (total_ke + 1e-6)
|
|
243
240
|
|
|
@@ -5,7 +5,6 @@ This file generates an example model of the [tennis racket theorem](https://en.w
|
|
|
5
5
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
|
-
import mujoco
|
|
9
8
|
import numpy as np
|
|
10
9
|
|
|
11
10
|
import mujoco_mojo as mojo
|
|
@@ -138,8 +137,7 @@ def generate(mojo_model: mojo.MojoModel, *args, **kwargs) -> mojo.MojoModel:
|
|
|
138
137
|
def runtime(
|
|
139
138
|
mojo_model: mojo.MojoModel,
|
|
140
139
|
runtime_manager: rt.RuntimeManager,
|
|
141
|
-
|
|
142
|
-
mj_data: mujoco.MjData,
|
|
140
|
+
state: mojo.MjState,
|
|
143
141
|
*args,
|
|
144
142
|
**kwargs,
|
|
145
143
|
) -> mojo.MojoModel:
|
|
@@ -148,24 +146,23 @@ def runtime(
|
|
|
148
146
|
handoff = mojo_model.get_user_data(Handoff)
|
|
149
147
|
|
|
150
148
|
handoff.racket.set_initial_velocity(
|
|
151
|
-
|
|
152
|
-
mj_data,
|
|
149
|
+
state,
|
|
153
150
|
angular_velocity=np.asarray([0.1, 4.0, 0.0]),
|
|
154
151
|
angle=mojo.Angle.RADIAN,
|
|
155
152
|
)
|
|
156
153
|
|
|
157
154
|
# Define a custom signal sampler
|
|
158
|
-
def sample_nutation(
|
|
155
|
+
def sample_nutation(state: mojo.MjState):
|
|
159
156
|
"""Adds the [nutation angle](https://en.wikipedia.org/wiki/Nutation) as an output signal."""
|
|
160
157
|
assert runtime_manager.signal_manager
|
|
161
158
|
|
|
162
159
|
# Get the angular momentum vector and magnitude
|
|
163
|
-
L = handoff.racket.rt_ang_mom(
|
|
160
|
+
L = handoff.racket.rt_ang_mom(state)
|
|
164
161
|
L_mag = np.linalg.norm(L)
|
|
165
162
|
|
|
166
163
|
if L_mag > 1e-9:
|
|
167
164
|
# Get the handle axis in the world frame
|
|
168
|
-
R = handoff.racket.rt_xmat(
|
|
165
|
+
R = handoff.racket.rt_xmat(state)
|
|
169
166
|
handle_axis = R[:, 0]
|
|
170
167
|
|
|
171
168
|
# Calculate the angle (theta) between L and the handle axis
|
|
@@ -191,8 +188,8 @@ def runtime(
|
|
|
191
188
|
b.request(rm.signal_manager)
|
|
192
189
|
|
|
193
190
|
# Run to observe multiple flips
|
|
194
|
-
while
|
|
195
|
-
rm.step(
|
|
191
|
+
while state.data.time < 10.0:
|
|
192
|
+
rm.step(state)
|
|
196
193
|
|
|
197
194
|
return mojo_model
|
|
198
195
|
|
|
@@ -198,6 +198,7 @@ from .mjcf import (
|
|
|
198
198
|
XYAxes,
|
|
199
199
|
ZAxis,
|
|
200
200
|
)
|
|
201
|
+
from .mj_state import MjState
|
|
201
202
|
from .mojo_model import MojoModel, UserData
|
|
202
203
|
from .stochas import (
|
|
203
204
|
NOMINAL_TRIAL_NUM,
|
|
@@ -467,6 +468,7 @@ __all__ = [
|
|
|
467
468
|
"MeshSupersphere",
|
|
468
469
|
"MeshTorus",
|
|
469
470
|
"MeshWedge",
|
|
471
|
+
"MjState",
|
|
470
472
|
"Model",
|
|
471
473
|
"ModelName",
|
|
472
474
|
"MojoModel",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import mujoco
|
|
6
|
+
|
|
7
|
+
__all__ = ["MjState"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class MjState:
|
|
12
|
+
"""Pairs MjModel and MjData for passing through runtime methods."""
|
|
13
|
+
|
|
14
|
+
model: mujoco.MjModel
|
|
15
|
+
data: mujoco.MjData
|
|
@@ -5,6 +5,8 @@ from pathlib import Path
|
|
|
5
5
|
import mujoco
|
|
6
6
|
from pydantic import Field
|
|
7
7
|
|
|
8
|
+
from mujoco_mojo.mj_state import MjState
|
|
9
|
+
|
|
8
10
|
import mujoco_mojo.utils.utils as utils
|
|
9
11
|
from mujoco_mojo.mjcf.defaults import DEFAULT_ANGLE, DEFAULT_EULERSEQ
|
|
10
12
|
from mujoco_mojo.mjcf.extension import Extension
|
|
@@ -242,16 +244,14 @@ class Mujoco(XMLModel):
|
|
|
242
244
|
)
|
|
243
245
|
)
|
|
244
246
|
|
|
245
|
-
def prep_for_sim(
|
|
246
|
-
|
|
247
|
-
) -> tuple[mujoco.MjModel, mujoco.MjData]:
|
|
248
|
-
"""Creates a MuJoCo MjModel and MjData from the Mujoco instance."""
|
|
247
|
+
def prep_for_sim(self, save_path: Path | None = None) -> MjState:
|
|
248
|
+
"""Creates an MjState (MjModel + MjData) from the Mujoco instance."""
|
|
249
249
|
if save_path:
|
|
250
250
|
self.write_xml(save_path)
|
|
251
|
-
|
|
251
|
+
model = mujoco.MjModel.from_xml_path(str(save_path))
|
|
252
252
|
else:
|
|
253
|
-
|
|
253
|
+
model = self.to_mj_model()
|
|
254
254
|
|
|
255
|
-
|
|
256
|
-
mujoco.mj_forward(
|
|
257
|
-
return
|
|
255
|
+
data = mujoco.MjData(model)
|
|
256
|
+
mujoco.mj_forward(model, data)
|
|
257
|
+
return MjState(model, data)
|