mujoco-mojo 2.3.6__tar.gz → 2.3.7__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.6 → mujoco_mojo-2.3.7}/PKG-INFO +1 -1
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/cli.py +64 -16
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/reloaded.py +55 -11
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.gitattributes +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.github/workflows/docs.yml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.github/workflows/release.yml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.gitignore +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.pre-commit-config.yaml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.python-version +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/.vscode/settings.json +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/LICENSE +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/README.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/TODO.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/about.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/dark-hero-logo.png +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/dark-hero-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/dark-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/light-hero-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/light-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/bunny_original.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/bunny_with_coacd.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/bunny_without_coacd.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/frustums.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/proximity/convex_hull_wireframe.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/proximity/real_wireframe.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/with_coacd.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/without_coacd.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-export-options.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-monitor-view.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-mosaic-view.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-notes-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-plot-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-selector-bar.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/dark-shapes-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/generate-result.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-export-options.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-monitor-view.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-mosaic-view.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-notes-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-plot-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-selector-bar.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/light-shapes-editor.jpg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/user-guides/runtime-anim.gif +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/index.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/javascripts/favicon-switcher.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/javascripts/mojo-highlighter.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/javascripts/tablesort.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/stylesheets/extra.css +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/MOJO_RUNTIME_REPORT.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/dojo.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/generate-script.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/getting-started.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/init.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/monitor.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/monte_carlo_example.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/mosaic.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/optimization.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/optimization_example.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/pose-context.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/pose_context_example.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/reloaded.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/running-jobs.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/user-guides/runtime-script.md +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/examples/boxes_and_springs_monte_carlo.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/examples/boxes_and_springs_optimization.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/examples/tennis_racket_theorem.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/mkdocs.yml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/pyproject.toml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/requirements.txt +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/copy_docs_examples_to_examples.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/fix_smart_quotes.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/gen_ref_pages.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/gen_ts_models.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/templating/filestomake.txt +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/templating/make_sensors.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/scripts/templating/sensor_template.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/__about__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/base.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/meta.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mj_state.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/defaults.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/dependency_path.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/extension.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/meta/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/meta/frame.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/meta/include.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/meta/replicate.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/adhesion.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/base.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/cylinder.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/damper.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/dcmotor.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/general.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/intvelocity.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/motor.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/muscle.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/position.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/velocity.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/hfield.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/layer.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/mesh.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/model.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/texture.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/attach.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/camera.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/geom.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/joint.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/site.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/skin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/contact.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/edge.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/elasticity.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/pin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/free_joint.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/geom.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/inertial.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/joint.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/light.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/site.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/compiler.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/lengthrange.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/contact.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/exclude.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/pair.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/contact.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/edge.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/elasticity.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/bone.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/connect.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/equality_base.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flex.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexstrain.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexvert.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/joint.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/tendon.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/weld.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/key.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/option.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/flag.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/accelerometer.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorfrc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorpos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballangvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballquat.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base_collision.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/camprojection.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/clock.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/contact.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/distance.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_kinetic.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_potential.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/force.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangacc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinacc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framepos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framequat.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framexaxis.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameyaxis.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framezaxis.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/fromto.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/gyro.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/insidesite.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointactuatorfrc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitfrc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitpos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointpos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/magnetometer.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/normal.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/plugin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/rangefinder.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreeangmom.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreecom.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreelinvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tactile.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonactuatorfrc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitfrc.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitpos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonpos.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonvel.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/torque.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/touch.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/user.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/velocimeter.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/size.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/statistic.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/joint.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/geom.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/pulley.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/site.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/tendon_base.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/global_.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/headlight.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/map.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/quality.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/rgba.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/scale.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/orientation.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/plugin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/pose.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/pose_context.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/position.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/xml_model.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mojo_model.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/runtime/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/runtime/load.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/runtime/runtime_manager.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/runtime/signal_manager.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/runtime/video_recorder.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/settings.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/stochas/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/dojo.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/monte_carlo.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/optimization.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/reloaded.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/run_mc.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/templates/run_opt.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/typing.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/color.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/dataframe.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/defaults.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/filters/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/filters/filters.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/interp.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/lab_executor.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/main.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/plot_config.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/routers/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/routers/monitor.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/routers/morph.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/routers/mosaic.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/routers/sensai.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/sensai/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/sensai/agent.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/shared.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/base.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/error.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/monitor.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/morph.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/mosaic.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/_sensai.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_chart.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_header.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_json_editor.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_lab_trigger.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_macros.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_media_player.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_overlays.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_series_panel.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_signal_lab.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_trial_status.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/chime.mp3 +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/dark-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/main.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/monitor.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/mosaic.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/sensai.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.d.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.d.ts.map +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/trial-viewer.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/light-logo.svg +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/main.css +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/build.mjs +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package-lock.json +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package.json +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/cm-bundle.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/format.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/options.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/plot-config.generated.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/lib/toast.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/models.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/monitor.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/mosaic.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/sensai.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/store.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/trial-viewer.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/types/global.d.ts +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/tsconfig.json +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/__init__.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/alpine.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/codemirror.bundle.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/confetti.browser.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/iro.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.css +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/lz-string.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/plotly-3.4.0.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/tailwind.min.js +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/layers/dojo/templates/trial_viewer.html +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/log.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/proximity.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/proximity_mixin.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/runner.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/statusing.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/utils/utils.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/visualization.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/.gitignore +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/make_skybox.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/meshes/ball.stl +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/meshes/bunny2.stl +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/meshes/cup.stl +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/body_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/equality_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/inertial_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/joint_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/mesh.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/mujoco_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/orientation_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/pos_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/pose_graph_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/pose_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/site_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/visualization_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/mjcf/xml_model_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/model_with_skybox.xml +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/monte_carlo_test/asset_image.png +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/monte_carlo_test/monte_carlo.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/monte_carlo_test/overrides.json +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/monte_carlo_test/running_with_slurm.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/one_off/proximity/dojo.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/one_off/proximity/reloaded.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/one_off/proximity/run.sh +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/one_off/proximity/simulation.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/conftest.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/loads_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/mojo_model_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/monte_carlo_bumper.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/optimizer_bumper.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/runtime_manager_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/settings_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/runtime/signal_manager_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/smoke_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/test_writer.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/color_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/dataframe_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/filter_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/interp_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/proximity_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/tests/utils/utils_test.py +0 -0
- {mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/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.7
|
|
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/
|
|
@@ -4,14 +4,18 @@ import ast
|
|
|
4
4
|
import importlib
|
|
5
5
|
import logging
|
|
6
6
|
import sys
|
|
7
|
+
from collections.abc import Callable
|
|
7
8
|
from enum import StrEnum
|
|
8
9
|
from importlib.metadata import version
|
|
9
10
|
from pathlib import Path
|
|
10
|
-
from
|
|
11
|
+
from types import ModuleType
|
|
12
|
+
from typing import Annotated, Any, Literal, overload
|
|
11
13
|
|
|
12
14
|
import typer
|
|
15
|
+
from rich.align import Align
|
|
13
16
|
from rich.console import Console
|
|
14
17
|
from rich.panel import Panel
|
|
18
|
+
from rich.text import Text
|
|
15
19
|
|
|
16
20
|
# get logger is not called at the top of this module since it MUST be called after setup_logger is run
|
|
17
21
|
# but since setup_logger doesnt know its verbosity until runtime get_logger needs to be called AS NEEDED
|
|
@@ -45,22 +49,37 @@ console = Console()
|
|
|
45
49
|
VERSION = version("mujoco-mojo")
|
|
46
50
|
|
|
47
51
|
|
|
52
|
+
# "MUJOCO" and "MOJO" in the ANSI Shadow figlet font
|
|
53
|
+
_LOGO_LINES = [
|
|
54
|
+
"███╗ ███╗██╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███╗ ███╗ ██████╗ ██╗ ██████╗ ",
|
|
55
|
+
"████╗ ████║██║ ██║ ██║██╔═══██╗██╔════╝██╔═══██╗ ████╗ ████║██╔═══██╗ ██║██╔═══██╗",
|
|
56
|
+
"██╔████╔██║██║ ██║ ██║██║ ██║██║ ██║ ██║ ██╔████╔██║██║ ██║ ██║██║ ██║",
|
|
57
|
+
"██║╚██╔╝██║██║ ██║██ ██║██║ ██║██║ ██║ ██║ ██║╚██╔╝██║██║ ██║██ ██║██║ ██║",
|
|
58
|
+
"██║ ╚═╝ ██║╚██████╔╝╚█████╔╝╚██████╔╝╚██████╗╚██████╔╝ ██║ ╚═╝ ██║╚██████╔╝╚█████╔╝╚██████╔╝",
|
|
59
|
+
"╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚═════╝ ",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
_SHADES = [
|
|
63
|
+
"#67e8f9",
|
|
64
|
+
"#22d3ee",
|
|
65
|
+
"#06b6d4",
|
|
66
|
+
"#0891b2",
|
|
67
|
+
"#0e7490",
|
|
68
|
+
"#155e75",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
|
|
48
72
|
def print_logo():
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
M M M UUUU J OOO CCCC OOO M M M OOO J OOO
|
|
56
|
-
J J
|
|
57
|
-
JJ JJ
|
|
58
|
-
"""
|
|
73
|
+
body = Text(justify="center")
|
|
74
|
+
for i, (line, shade) in enumerate(zip(_LOGO_LINES, _SHADES)):
|
|
75
|
+
body.append(line, style=f"bold {shade}")
|
|
76
|
+
if i != len(_LOGO_LINES) - 1:
|
|
77
|
+
body.append("\n")
|
|
78
|
+
|
|
59
79
|
console.print(
|
|
60
80
|
Panel(
|
|
61
|
-
|
|
81
|
+
Align.center(body),
|
|
62
82
|
expand=False,
|
|
63
|
-
style="bold cyan",
|
|
64
83
|
border_style="cyan",
|
|
65
84
|
subtitle=f"[dim]v{VERSION}[/dim]",
|
|
66
85
|
)
|
|
@@ -72,8 +91,22 @@ def _setup_cli_logging(verbose: int, quiet: int) -> logging.Logger:
|
|
|
72
91
|
return setup_logger(level=level)
|
|
73
92
|
|
|
74
93
|
|
|
75
|
-
|
|
76
|
-
|
|
94
|
+
@overload
|
|
95
|
+
def _load_func(
|
|
96
|
+
path: str, _return_module: Literal[False] = False
|
|
97
|
+
) -> Callable[..., Any]: ...
|
|
98
|
+
@overload
|
|
99
|
+
def _load_func(
|
|
100
|
+
path: str, _return_module: Literal[True]
|
|
101
|
+
) -> tuple[Callable[..., Any], ModuleType]: ...
|
|
102
|
+
def _load_func(
|
|
103
|
+
path: str, _return_module: bool = False
|
|
104
|
+
) -> Callable[..., Any] | tuple[Callable[..., Any], ModuleType]:
|
|
105
|
+
"""
|
|
106
|
+
Helper to dynamically import user logic, supporting classes and methods.
|
|
107
|
+
|
|
108
|
+
If `_return_module` is set, returns a `(obj, module)` tuple, where `module` is the importable module the dotted path resolved against (e.g. a package `__init__` re-exporting a class), as opposed to the module the attribute is actually defined in. Reloading that module is what's needed to pick up re-exported names after an edit.
|
|
109
|
+
"""
|
|
77
110
|
if "." not in sys.path:
|
|
78
111
|
sys.path.insert(0, ".")
|
|
79
112
|
|
|
@@ -104,7 +137,6 @@ def _load_func(path: str) -> Any:
|
|
|
104
137
|
obj = mod
|
|
105
138
|
for part in attr_parts:
|
|
106
139
|
obj = getattr(obj, part)
|
|
107
|
-
return obj
|
|
108
140
|
except AttributeError as e:
|
|
109
141
|
logger = get_logger(__name__)
|
|
110
142
|
console.print(
|
|
@@ -113,6 +145,22 @@ def _load_func(path: str) -> Any:
|
|
|
113
145
|
logger.exception(f"`{path}`not found: {e}", extra={"file_only": True})
|
|
114
146
|
raise typer.Exit(code=1)
|
|
115
147
|
|
|
148
|
+
if not callable(obj):
|
|
149
|
+
logger = get_logger(__name__)
|
|
150
|
+
console.print(
|
|
151
|
+
f"[bold red]Error:[/bold red] [bold green]`{path}`[/bold green] resolved to a "
|
|
152
|
+
f"[bold]{type(obj).__name__}[/bold], which is not callable."
|
|
153
|
+
)
|
|
154
|
+
logger.error(
|
|
155
|
+
f"`{path}` resolved to a non-callable {type(obj).__name__}",
|
|
156
|
+
extra={"file_only": True},
|
|
157
|
+
)
|
|
158
|
+
raise typer.Exit(code=1)
|
|
159
|
+
|
|
160
|
+
if _return_module:
|
|
161
|
+
return obj, mod
|
|
162
|
+
return obj
|
|
163
|
+
|
|
116
164
|
|
|
117
165
|
def _smart_parse(value: str) -> Any:
|
|
118
166
|
"""Tries to convert CLI strings to Python types (int, float, bool)."""
|
|
@@ -23,7 +23,6 @@ from mujoco_mojo.stochas import DesignValueDict, DistributionDict, NamedValueDic
|
|
|
23
23
|
from mujoco_mojo.utils.defaults import DEFAULT_WORKDIR
|
|
24
24
|
from mujoco_mojo.utils.log import get_logger
|
|
25
25
|
from mujoco_mojo.utils.runner import MojoGenerator, MojoRunner, MojoRuntime
|
|
26
|
-
from mujoco_mojo.utils.utils import write_dojo_script
|
|
27
26
|
from mujoco_mojo.utils.statusing import (
|
|
28
27
|
JOB_STATUS_FNAME,
|
|
29
28
|
TRIAL_STATUS_FNAME,
|
|
@@ -34,6 +33,7 @@ from mujoco_mojo.utils.statusing import (
|
|
|
34
33
|
Step,
|
|
35
34
|
TrialStatus,
|
|
36
35
|
)
|
|
36
|
+
from mujoco_mojo.utils.utils import write_dojo_script
|
|
37
37
|
from mujoco_mojo.visualization import ArrowConfig, LineConfig
|
|
38
38
|
|
|
39
39
|
from .cli import UserInterface
|
|
@@ -89,6 +89,44 @@ def is_dark_mode() -> bool:
|
|
|
89
89
|
return False
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
def _matrix_rain(duration: float = 1.5, fps: int = 20) -> None:
|
|
93
|
+
"""Plays a brief Matrix-style digital rain animation, e.g. on exit."""
|
|
94
|
+
import random
|
|
95
|
+
|
|
96
|
+
from rich.live import Live
|
|
97
|
+
from rich.text import Text
|
|
98
|
+
|
|
99
|
+
width, height = console.size
|
|
100
|
+
if width <= 0 or height <= 0:
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
drops = [random.randint(-height, 0) for _ in range(width)]
|
|
104
|
+
trail_length = 8
|
|
105
|
+
|
|
106
|
+
with Live(console=console, refresh_per_second=fps, screen=True) as live:
|
|
107
|
+
for _ in range(int(duration * fps)):
|
|
108
|
+
frame = Text()
|
|
109
|
+
for row in range(height):
|
|
110
|
+
for col in range(width):
|
|
111
|
+
head = drops[col]
|
|
112
|
+
if row == head:
|
|
113
|
+
frame.append(random.choice("01"), style="bold white")
|
|
114
|
+
elif 0 <= head - row <= trail_length:
|
|
115
|
+
frame.append(random.choice("01"), style="green")
|
|
116
|
+
else:
|
|
117
|
+
frame.append(" ")
|
|
118
|
+
if row < height - 1:
|
|
119
|
+
frame.append("\n")
|
|
120
|
+
|
|
121
|
+
for col in range(width):
|
|
122
|
+
drops[col] += 1
|
|
123
|
+
if drops[col] - height > random.randint(0, height):
|
|
124
|
+
drops[col] = random.randint(-height, 0)
|
|
125
|
+
|
|
126
|
+
live.update(frame)
|
|
127
|
+
time.sleep(1 / fps)
|
|
128
|
+
|
|
129
|
+
|
|
92
130
|
def recursive_reload(module, project_root: Path, visited: set | None = None):
|
|
93
131
|
"""Recursively reloads modules, but only if they live inside project_root."""
|
|
94
132
|
import importlib
|
|
@@ -271,9 +309,9 @@ class MojoReloaded:
|
|
|
271
309
|
def reload_with_check(path_str: str, label: str):
|
|
272
310
|
"""Internal helper to validate file existance before reloading."""
|
|
273
311
|
try:
|
|
274
|
-
# attempt to find
|
|
275
|
-
|
|
276
|
-
mod =
|
|
312
|
+
# attempt to find the module the dotted path resolves against, which may be a
|
|
313
|
+
# package `__init__` re-exporting a class/function defined in a submodule
|
|
314
|
+
_, mod = _load_func(path_str, _return_module=True)
|
|
277
315
|
|
|
278
316
|
if mod and hasattr(mod, "__file__") and mod.__file__:
|
|
279
317
|
source_file = Path(mod.__file__).resolve()
|
|
@@ -289,6 +327,8 @@ class MojoReloaded:
|
|
|
289
327
|
f"Unable to find source file for {path_str}. Did you rename or move it?"
|
|
290
328
|
)
|
|
291
329
|
|
|
330
|
+
# reloading the entry module re-resolves any re-exported names (e.g.
|
|
331
|
+
# `from .robot import RobotGenerator`) after their source modules reload
|
|
292
332
|
recursive_reload(module=mod, project_root=project_root)
|
|
293
333
|
|
|
294
334
|
# reload to get the reference
|
|
@@ -478,6 +518,7 @@ class MojoReloaded:
|
|
|
478
518
|
self.run_viser(initial_state)
|
|
479
519
|
case _:
|
|
480
520
|
console.print(f"Invalid viewer option selected {self.ui}")
|
|
521
|
+
_matrix_rain()
|
|
481
522
|
console.print("\n[bold yellow]Exiting MuJoCo Mojo Reloaded[/bold yellow]")
|
|
482
523
|
|
|
483
524
|
def _print_help(self):
|
|
@@ -523,15 +564,18 @@ class MojoReloaded:
|
|
|
523
564
|
"Install [bold]mujoco-mojo[reloaded][/bold] to use --watch."
|
|
524
565
|
)
|
|
525
566
|
return None
|
|
567
|
+
# silence watchfiles' own "N changes detected" log; we print our own below
|
|
568
|
+
logging.getLogger("watchfiles").setLevel(logging.WARNING)
|
|
569
|
+
|
|
526
570
|
evt = threading.Event()
|
|
527
571
|
watch_path = Path.cwd()
|
|
528
572
|
|
|
529
573
|
def _run():
|
|
530
574
|
try:
|
|
531
|
-
for
|
|
575
|
+
for changes in wf_watch(
|
|
532
576
|
watch_path, watch_filter=PythonFilter(), stop_event=evt
|
|
533
577
|
):
|
|
534
|
-
event_queue.put(("reload",
|
|
578
|
+
event_queue.put(("reload", str(len(changes))))
|
|
535
579
|
except Exception:
|
|
536
580
|
pass
|
|
537
581
|
|
|
@@ -566,9 +610,7 @@ class MojoReloaded:
|
|
|
566
610
|
def print_prompt():
|
|
567
611
|
watch_indicator = " [bold blue]W[/bold blue]" if self.watch else ""
|
|
568
612
|
console.print(
|
|
569
|
-
f"[bold green]Awaiting command[/bold green]"
|
|
570
|
-
f"[dim](last: {self._last_command} | seed: {self.seed} | trial: {self.trial_num})[/dim]"
|
|
571
|
-
f"{watch_indicator}[white] > [/white]",
|
|
613
|
+
f"[bold green]Awaiting command[/bold green] [dim](last: {self._last_command} | seed: {self.seed} | trial: {self.trial_num})[/dim] {watch_indicator}[white] > [/white]",
|
|
572
614
|
end="",
|
|
573
615
|
)
|
|
574
616
|
|
|
@@ -583,8 +625,10 @@ class MojoReloaded:
|
|
|
583
625
|
break
|
|
584
626
|
|
|
585
627
|
if event_type == "reload":
|
|
628
|
+
count = int(data) if data.isdigit() else 0
|
|
629
|
+
plural = "s" if count != 1 else ""
|
|
586
630
|
console.print(
|
|
587
|
-
"\n[dim]
|
|
631
|
+
f"\n[dim]{count} change{plural} detected, reloading with last command...[/dim]"
|
|
588
632
|
)
|
|
589
633
|
use_runtime = self._last_command != "gen"
|
|
590
634
|
try:
|
|
@@ -682,7 +726,7 @@ class MojoReloaded:
|
|
|
682
726
|
|
|
683
727
|
try:
|
|
684
728
|
start = time.time()
|
|
685
|
-
console.print("[
|
|
729
|
+
console.print("[dim]Processing...[/dim]")
|
|
686
730
|
new_state = self.generate_construct(
|
|
687
731
|
use_runtime=use_runtime, on_reload_callback=on_reload_callback
|
|
688
732
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/docs/assets/mesh/proximity/convex_hull_wireframe.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/__init__.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/adhesion.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/base.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/cylinder.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/damper.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/dcmotor.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/general.py
RENAMED
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/motor.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/muscle.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/plugin.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/position.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/velocity.py
RENAMED
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/__init__.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/hfield.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/model.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/texture.py
RENAMED
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/__init__.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/attach.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/camera.py
RENAMED
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/free_joint.py
RENAMED
|
File without changes
|
|
File without changes
|
{mujoco_mojo-2.3.6 → mujoco_mojo-2.3.7}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/inertial.py
RENAMED
|
File without changes
|
|
File without changes
|