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.
Files changed (388) hide show
  1. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.gitignore +2 -0
  2. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/PKG-INFO +1 -1
  3. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/getting-started.md +3 -4
  4. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/monte_carlo_example.py +4 -6
  5. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/optimization.md +1 -1
  6. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/optimization_example.py +8 -11
  7. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/boxes_and_springs_monte_carlo.py +4 -6
  8. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/boxes_and_springs_optimization.py +8 -11
  9. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/examples/tennis_racket_theorem.py +7 -10
  10. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/__init__.py +2 -0
  11. mujoco_mojo-2.3.3/src/mujoco_mojo/mj_state.py +15 -0
  12. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco.py +9 -9
  13. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body.py +75 -88
  14. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/geom.py +36 -37
  15. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/joint.py +11 -10
  16. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/site.py +80 -144
  17. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/equality_base.py +13 -15
  18. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base.py +6 -5
  19. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/load.py +186 -219
  20. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/runtime_manager.py +21 -22
  21. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/signal_manager.py +6 -6
  22. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/video_recorder.py +7 -7
  23. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/settings.py +48 -1
  24. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/monte_carlo.py +3 -6
  25. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/optimization.py +3 -6
  26. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/reloaded.py +43 -52
  27. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/proximity.py +68 -87
  28. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/runner.py +20 -33
  29. mujoco_mojo-2.3.3/tests/mjcf/body_test.py +128 -0
  30. mujoco_mojo-2.3.3/tests/mjcf/equality_test.py +71 -0
  31. mujoco_mojo-2.3.3/tests/mjcf/joint_test.py +77 -0
  32. mujoco_mojo-2.3.3/tests/mjcf/mujoco_test.py +64 -0
  33. mujoco_mojo-2.3.3/tests/mjcf/site_test.py +191 -0
  34. mujoco_mojo-2.3.3/tests/mjcf/visualization_test.py +87 -0
  35. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/loads_test.py +252 -55
  36. mujoco_mojo-2.3.3/tests/runtime/mojo_model_test.py +55 -0
  37. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/monte_carlo_bumper.py +6 -8
  38. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/optimizer_bumper.py +11 -14
  39. mujoco_mojo-2.3.3/tests/runtime/runtime_manager_test.py +202 -0
  40. mujoco_mojo-2.3.3/tests/runtime/settings_test.py +84 -0
  41. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/signal_manager_test.py +22 -21
  42. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/proximity_test.py +81 -54
  43. mujoco_mojo-2.3.3/tests/utils/utils_test.py +36 -0
  44. mujoco_mojo-2.3.2/tests/runtime/runtime_manager_test.py +0 -100
  45. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.gitattributes +0 -0
  46. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.github/workflows/docs.yml +0 -0
  47. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.github/workflows/release.yml +0 -0
  48. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.pre-commit-config.yaml +0 -0
  49. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.python-version +0 -0
  50. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/.vscode/settings.json +0 -0
  51. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/LICENSE +0 -0
  52. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/README.md +0 -0
  53. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/TODO.md +0 -0
  54. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/about.md +0 -0
  55. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-hero-logo.png +0 -0
  56. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-hero-logo.svg +0 -0
  57. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/dark-logo.svg +0 -0
  58. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/light-hero-logo.svg +0 -0
  59. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/light-logo.svg +0 -0
  60. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/logo.svg +0 -0
  61. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_original.jpg +0 -0
  62. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_with_coacd.jpg +0 -0
  63. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/bunny_without_coacd.jpg +0 -0
  64. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/frustums.jpg +0 -0
  65. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/proximity/convex_hull_wireframe.jpg +0 -0
  66. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/proximity/real_wireframe.jpg +0 -0
  67. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/with_coacd.jpg +0 -0
  68. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/mesh/without_coacd.jpg +0 -0
  69. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-export-options.jpg +0 -0
  70. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-monitor-view.jpg +0 -0
  71. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-mosaic-view.jpg +0 -0
  72. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-notes-editor.jpg +0 -0
  73. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-plot-editor.jpg +0 -0
  74. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-selector-bar.jpg +0 -0
  75. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/dark-shapes-editor.jpg +0 -0
  76. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/generate-result.jpg +0 -0
  77. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-export-options.jpg +0 -0
  78. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-monitor-view.jpg +0 -0
  79. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-mosaic-view.jpg +0 -0
  80. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-notes-editor.jpg +0 -0
  81. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-plot-editor.jpg +0 -0
  82. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-selector-bar.jpg +0 -0
  83. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/light-shapes-editor.jpg +0 -0
  84. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/assets/user-guides/runtime-anim.gif +0 -0
  85. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/index.md +0 -0
  86. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/favicon-switcher.js +0 -0
  87. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/mojo-highlighter.js +0 -0
  88. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/javascripts/tablesort.js +0 -0
  89. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/stylesheets/extra.css +0 -0
  90. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/MOJO_RUNTIME_REPORT.md +0 -0
  91. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/dojo.md +0 -0
  92. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/generate-script.md +0 -0
  93. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/init.md +0 -0
  94. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/monitor.md +0 -0
  95. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/mosaic.md +0 -0
  96. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/reloaded.md +0 -0
  97. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/running-jobs.md +0 -0
  98. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/docs/user-guides/runtime-script.md +0 -0
  99. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/mkdocs.yml +0 -0
  100. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/pyproject.toml +0 -0
  101. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/requirements.txt +0 -0
  102. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/copy_docs_examples_to_examples.py +0 -0
  103. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/fix_smart_quotes.py +0 -0
  104. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/gen_ref_pages.py +0 -0
  105. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/gen_ts_models.py +0 -0
  106. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/filestomake.txt +0 -0
  107. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/make_sensors.py +0 -0
  108. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/scripts/templating/sensor_template.py +0 -0
  109. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/__about__.py +0 -0
  110. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/base.py +0 -0
  111. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/meta.py +0 -0
  112. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/__init__.py +0 -0
  113. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/defaults.py +0 -0
  114. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/dependency_path.py +0 -0
  115. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/extension.py +0 -0
  116. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/__init__.py +0 -0
  117. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/frame.py +0 -0
  118. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/include.py +0 -0
  119. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/meta/replicate.py +0 -0
  120. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/__init__.py +0 -0
  121. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator.py +0 -0
  122. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/__init__.py +0 -0
  123. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/adhesion.py +0 -0
  124. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/base.py +0 -0
  125. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/cylinder.py +0 -0
  126. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/damper.py +0 -0
  127. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/dcmotor.py +0 -0
  128. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/general.py +0 -0
  129. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/intvelocity.py +0 -0
  130. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/motor.py +0 -0
  131. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/muscle.py +0 -0
  132. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/plugin.py +0 -0
  133. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/position.py +0 -0
  134. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/actuator_attr/velocity.py +0 -0
  135. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset.py +0 -0
  136. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/__init__.py +0 -0
  137. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/hfield.py +0 -0
  138. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material.py +0 -0
  139. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/__init__.py +0 -0
  140. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/material_attr/layer.py +0 -0
  141. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/mesh.py +0 -0
  142. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/model.py +0 -0
  143. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/asset_attr/texture.py +0 -0
  144. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/__init__.py +0 -0
  145. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/attach.py +0 -0
  146. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/camera.py +0 -0
  147. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite.py +0 -0
  148. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/__init__.py +0 -0
  149. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/geom.py +0 -0
  150. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/joint.py +0 -0
  151. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/site.py +0 -0
  152. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/composite_attr/skin.py +0 -0
  153. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp.py +0 -0
  154. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/__init__.py +0 -0
  155. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/contact.py +0 -0
  156. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/edge.py +0 -0
  157. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/elasticity.py +0 -0
  158. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/flexcomp_attr/pin.py +0 -0
  159. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/free_joint.py +0 -0
  160. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/inertial.py +0 -0
  161. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/light.py +0 -0
  162. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/body_attr/plugin.py +0 -0
  163. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler.py +0 -0
  164. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/__init__.py +0 -0
  165. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/compiler_attr/lengthrange.py +0 -0
  166. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact.py +0 -0
  167. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/__init__.py +0 -0
  168. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/exclude.py +0 -0
  169. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/contact_attr/pair.py +0 -0
  170. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable.py +0 -0
  171. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/__init__.py +0 -0
  172. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex.py +0 -0
  173. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/__init__.py +0 -0
  174. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/contact.py +0 -0
  175. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/edge.py +0 -0
  176. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/flex_attr/elasticity.py +0 -0
  177. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin.py +0 -0
  178. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/__init__.py +0 -0
  179. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/deformable_attr/skin_attr/bone.py +0 -0
  180. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality.py +0 -0
  181. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/__init__.py +0 -0
  182. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/connect.py +0 -0
  183. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flex.py +0 -0
  184. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexstrain.py +0 -0
  185. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/flexvert.py +0 -0
  186. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/joint.py +0 -0
  187. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/tendon.py +0 -0
  188. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/equality_attr/weld.py +0 -0
  189. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe.py +0 -0
  190. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/__init__.py +0 -0
  191. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/keyframe_attr/key.py +0 -0
  192. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option.py +0 -0
  193. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/__init__.py +0 -0
  194. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/option_attr/flag.py +0 -0
  195. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor.py +0 -0
  196. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/__init__.py +0 -0
  197. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/accelerometer.py +0 -0
  198. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorfrc.py +0 -0
  199. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorpos.py +0 -0
  200. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/actuatorvel.py +0 -0
  201. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballangvel.py +0 -0
  202. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/ballquat.py +0 -0
  203. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/base_collision.py +0 -0
  204. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/camprojection.py +0 -0
  205. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/clock.py +0 -0
  206. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/contact.py +0 -0
  207. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/distance.py +0 -0
  208. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_kinetic.py +0 -0
  209. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/e_potential.py +0 -0
  210. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/force.py +0 -0
  211. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangacc.py +0 -0
  212. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameangvel.py +0 -0
  213. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinacc.py +0 -0
  214. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framelinvel.py +0 -0
  215. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framepos.py +0 -0
  216. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framequat.py +0 -0
  217. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framexaxis.py +0 -0
  218. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/frameyaxis.py +0 -0
  219. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/framezaxis.py +0 -0
  220. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/fromto.py +0 -0
  221. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/gyro.py +0 -0
  222. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/insidesite.py +0 -0
  223. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointactuatorfrc.py +0 -0
  224. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitfrc.py +0 -0
  225. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitpos.py +0 -0
  226. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointlimitvel.py +0 -0
  227. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointpos.py +0 -0
  228. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/jointvel.py +0 -0
  229. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/magnetometer.py +0 -0
  230. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/normal.py +0 -0
  231. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/plugin.py +0 -0
  232. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/rangefinder.py +0 -0
  233. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreeangmom.py +0 -0
  234. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreecom.py +0 -0
  235. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/subtreelinvel.py +0 -0
  236. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tactile.py +0 -0
  237. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonactuatorfrc.py +0 -0
  238. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitfrc.py +0 -0
  239. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitpos.py +0 -0
  240. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonlimitvel.py +0 -0
  241. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonpos.py +0 -0
  242. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/tendonvel.py +0 -0
  243. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/torque.py +0 -0
  244. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/touch.py +0 -0
  245. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/user.py +0 -0
  246. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/sensor_attr/velocimeter.py +0 -0
  247. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/size.py +0 -0
  248. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/statistic.py +0 -0
  249. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon.py +0 -0
  250. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/__init__.py +0 -0
  251. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed.py +0 -0
  252. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/__init__.py +0 -0
  253. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/fixed_attr/joint.py +0 -0
  254. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial.py +0 -0
  255. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/__init__.py +0 -0
  256. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/geom.py +0 -0
  257. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/pulley.py +0 -0
  258. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/spatial_attr/site.py +0 -0
  259. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/tendon_attr/tendon_base.py +0 -0
  260. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual.py +0 -0
  261. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/__init__.py +0 -0
  262. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/global_.py +0 -0
  263. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/headlight.py +0 -0
  264. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/map.py +0 -0
  265. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/quality.py +0 -0
  266. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/rgba.py +0 -0
  267. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/mujoco_attr/visual_attr/scale.py +0 -0
  268. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/orientation.py +0 -0
  269. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/plugin.py +0 -0
  270. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/pose.py +0 -0
  271. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/position.py +0 -0
  272. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mjcf/xml_model.py +0 -0
  273. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/mojo_model.py +0 -0
  274. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/runtime/__init__.py +0 -0
  275. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/stochas/__init__.py +0 -0
  276. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/__init__.py +0 -0
  277. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/reloaded.sh +0 -0
  278. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/run_mc.sh +0 -0
  279. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/templates/run_opt.sh +0 -0
  280. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/typing.py +0 -0
  281. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/__init__.py +0 -0
  282. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/color.py +0 -0
  283. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/dataframe.py +0 -0
  284. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/defaults.py +0 -0
  285. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/filters/__init__.py +0 -0
  286. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/filters/filters.py +0 -0
  287. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/interp.py +0 -0
  288. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/__init__.py +0 -0
  289. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/cli.py +0 -0
  290. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/__init__.py +0 -0
  291. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/lab_executor.py +0 -0
  292. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/main.py +0 -0
  293. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/plot_config.py +0 -0
  294. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/__init__.py +0 -0
  295. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/monitor.py +0 -0
  296. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/morph.py +0 -0
  297. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/mosaic.py +0 -0
  298. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/routers/sensai.py +0 -0
  299. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/sensai/__init__.py +0 -0
  300. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/sensai/agent.py +0 -0
  301. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/shared.py +0 -0
  302. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/__init__.py +0 -0
  303. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/base.html +0 -0
  304. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/error.html +0 -0
  305. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/monitor.html +0 -0
  306. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/morph.html +0 -0
  307. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/mosaic.html +0 -0
  308. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/_sensai.html +0 -0
  309. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_chart.html +0 -0
  310. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_header.html +0 -0
  311. {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
  312. {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
  313. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_macros.html +0 -0
  314. {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
  315. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/partials/trial_viewer/_overlays.html +0 -0
  316. {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
  317. {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
  318. {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
  319. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/__init__.py +0 -0
  320. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/chime.mp3 +0 -0
  321. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/dark-logo.svg +0 -0
  322. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/__init__.py +0 -0
  323. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/main.js +0 -0
  324. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/monitor.js +0 -0
  325. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/mosaic.js +0 -0
  326. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/sensai.js +0 -0
  327. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.d.ts +0 -0
  328. {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
  329. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/toast.js +0 -0
  330. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/js/trial-viewer.js +0 -0
  331. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/light-logo.svg +0 -0
  332. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/main.css +0 -0
  333. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/build.mjs +0 -0
  334. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package-lock.json +0 -0
  335. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/package.json +0 -0
  336. {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
  337. {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
  338. {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
  339. {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
  340. {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
  341. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/models.ts +0 -0
  342. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/monitor.ts +0 -0
  343. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/mosaic.ts +0 -0
  344. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/sensai.ts +0 -0
  345. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/src/store.ts +0 -0
  346. {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
  347. {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
  348. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/ts/tsconfig.json +0 -0
  349. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/__init__.py +0 -0
  350. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/alpine.min.js +0 -0
  351. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/codemirror.bundle.js +0 -0
  352. {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
  353. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/iro.min.js +0 -0
  354. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.css +0 -0
  355. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/litegraph.min.js +0 -0
  356. {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
  357. {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
  358. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/static/vendored/tailwind.min.js +0 -0
  359. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/layers/dojo/templates/trial_viewer.html +0 -0
  360. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/log.py +0 -0
  361. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/proximity_mixin.py +0 -0
  362. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/statusing.py +0 -0
  363. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/utils/utils.py +0 -0
  364. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/src/mujoco_mojo/visualization.py +0 -0
  365. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/.gitignore +0 -0
  366. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/make_skybox.py +0 -0
  367. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/ball.stl +0 -0
  368. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/bunny2.stl +0 -0
  369. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/meshes/cup.stl +0 -0
  370. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/inertial_test.py +0 -0
  371. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/mesh.py +0 -0
  372. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/orientation_test.py +0 -0
  373. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/pos_test.py +0 -0
  374. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/pose_test.py +0 -0
  375. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/mjcf/xml_model_test.py +0 -0
  376. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/model_with_skybox.xml +0 -0
  377. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/asset_image.png +0 -0
  378. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/monte_carlo.py +0 -0
  379. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/overrides.json +0 -0
  380. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/monte_carlo_test/running_with_slurm.sh +0 -0
  381. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/runtime/conftest.py +0 -0
  382. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/smoke_test.py +0 -0
  383. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/test_writer.py +0 -0
  384. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/color_test.py +0 -0
  385. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/dataframe_test.py +0 -0
  386. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/filter_test.py +0 -0
  387. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/tests/utils/interp_test.py +0 -0
  388. {mujoco_mojo-2.3.2 → mujoco_mojo-2.3.3}/uv.lock +0 -0
@@ -26,3 +26,5 @@ MUJOCO_LOG.TXT
26
26
  # TypeScript build artifacts (node_modules is dev-only; compiled .js files ARE committed)
27
27
  node_modules/
28
28
  *.js.map
29
+
30
+ .coverage
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mujoco-mojo
3
- Version: 2.3.2
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
- mj_model: mujoco.MjModel,
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 mj_data.time < 10.0:
53
- runtime_manager.step(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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(mj_model).register_to_rm(rm)
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 mj_data.time < 2.0:
297
- rm.step(mj_model, mj_data)
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 the MuJoCo `mj_model`/`mj_data` objects.
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
- mj_model: mujoco.MjModel,
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 mj_data.time < 2.0:
219
- rm.step(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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(mj_model, mj_data)
239
- w2 = handoff.box2.rt_ang_vel(mj_model, mj_data)
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(mj_model, mj_data)
243
- ke2 = handoff.box2.rt_trans_ke(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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(mj_model).register_to_rm(rm)
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 mj_data.time < 2.0:
253
- rm.step(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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 mj_data.time < 2.0:
219
- rm.step(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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(mj_model, mj_data)
236
- w2 = handoff.box2.rt_ang_vel(mj_model, mj_data)
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(mj_model, mj_data)
240
- ke2 = handoff.box2.rt_trans_ke(mj_model, mj_data)
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
- mj_model: mujoco.MjModel,
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
- mj_model,
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(mj_model: mujoco.MjModel, mj_data: mujoco.MjData):
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(mj_model, mj_data)
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(mj_model, mj_data)
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 mj_data.time < 10.0:
195
- rm.step(mj_model, mj_data)
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
- self, save_path: Path | None = None
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
- mj_model = mujoco.MjModel.from_xml_path(str(save_path))
251
+ model = mujoco.MjModel.from_xml_path(str(save_path))
252
252
  else:
253
- mj_model = self.to_mj_model()
253
+ model = self.to_mj_model()
254
254
 
255
- mj_data = mujoco.MjData(mj_model)
256
- mujoco.mj_forward(mj_model, mj_data)
257
- return mj_model, mj_data
255
+ data = mujoco.MjData(model)
256
+ mujoco.mj_forward(model, data)
257
+ return MjState(model, data)