jaxsim 0.5.1.dev37__tar.gz → 0.5.1.dev46__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 (132) hide show
  1. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.github/workflows/pixi.yml +1 -1
  2. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/PKG-INFO +2 -1
  3. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/pyproject.toml +5 -2
  4. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/_version.py +2 -2
  5. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim.egg-info/PKG-INFO +2 -1
  6. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim.egg-info/SOURCES.txt +1 -0
  7. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim.egg-info/requires.txt +1 -0
  8. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/conftest.py +27 -0
  9. jaxsim-0.5.1.dev46/tests/test_benchmark.py +127 -0
  10. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.devcontainer/Dockerfile +0 -0
  11. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.devcontainer/devcontainer.json +0 -0
  12. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.gitattributes +0 -0
  13. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.github/CODEOWNERS +0 -0
  14. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.github/dependabot.yml +0 -0
  15. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.github/workflows/ci_cd.yml +0 -0
  16. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.github/workflows/read_the_docs.yml +0 -0
  17. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.gitignore +0 -0
  18. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.pre-commit-config.yaml +0 -0
  19. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/.readthedocs.yaml +0 -0
  20. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/CONTRIBUTING.md +0 -0
  21. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/LICENSE +0 -0
  22. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/README.md +0 -0
  23. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/Makefile +0 -0
  24. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/conf.py +0 -0
  25. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/examples.rst +0 -0
  26. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/guide/install.rst +0 -0
  27. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/index.rst +0 -0
  28. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/make.bat +0 -0
  29. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/api.rst +0 -0
  30. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/integrators.rst +0 -0
  31. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/math.rst +0 -0
  32. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/mujoco.rst +0 -0
  33. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/parsers.rst +0 -0
  34. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/rbda.rst +0 -0
  35. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/typing.rst +0 -0
  36. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/docs/modules/utils.rst +0 -0
  37. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/environment.yml +0 -0
  38. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/.gitattributes +0 -0
  39. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/.gitignore +0 -0
  40. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/README.md +0 -0
  41. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/assets/build_cartpole_urdf.py +0 -0
  42. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/assets/cartpole.urdf +0 -0
  43. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
  44. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/jaxsim_as_physics_engine.ipynb +0 -0
  45. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
  46. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/pixi.lock +0 -0
  47. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/setup.cfg +0 -0
  48. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/setup.py +0 -0
  49. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/__init__.py +0 -0
  50. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/__init__.py +0 -0
  51. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/com.py +0 -0
  52. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/common.py +0 -0
  53. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/contact.py +0 -0
  54. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/data.py +0 -0
  55. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/frame.py +0 -0
  56. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/joint.py +0 -0
  57. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  58. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/link.py +0 -0
  59. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/model.py +0 -0
  60. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/ode.py +0 -0
  61. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/ode_data.py +0 -0
  62. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/api/references.py +0 -0
  63. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/exceptions.py +0 -0
  64. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/integrators/__init__.py +0 -0
  65. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/integrators/common.py +0 -0
  66. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/integrators/fixed_step.py +0 -0
  67. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/integrators/variable_step.py +0 -0
  68. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/logging.py +0 -0
  69. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/__init__.py +0 -0
  70. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/adjoint.py +0 -0
  71. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/cross.py +0 -0
  72. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/inertia.py +0 -0
  73. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/joint_model.py +0 -0
  74. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/quaternion.py +0 -0
  75. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/rotation.py +0 -0
  76. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/skew.py +0 -0
  77. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/math/transform.py +0 -0
  78. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/__init__.py +0 -0
  79. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/__main__.py +0 -0
  80. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/loaders.py +0 -0
  81. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/model.py +0 -0
  82. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/utils.py +0 -0
  83. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/mujoco/visualizer.py +0 -0
  84. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/__init__.py +0 -0
  85. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  86. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  87. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  88. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/descriptions/link.py +0 -0
  89. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/descriptions/model.py +0 -0
  90. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  91. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/rod/__init__.py +0 -0
  92. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/rod/meshes.py +0 -0
  93. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/rod/parser.py +0 -0
  94. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/parsers/rod/utils.py +0 -0
  95. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/__init__.py +0 -0
  96. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/aba.py +0 -0
  97. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/collidable_points.py +0 -0
  98. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  99. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/common.py +0 -0
  100. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  101. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  102. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/soft.py +0 -0
  103. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/contacts/visco_elastic.py +0 -0
  104. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/crba.py +0 -0
  105. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  106. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/jacobian.py +0 -0
  107. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/rnea.py +0 -0
  108. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/rbda/utils.py +0 -0
  109. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/terrain/__init__.py +0 -0
  110. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/terrain/terrain.py +0 -0
  111. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/typing.py +0 -0
  112. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/utils/__init__.py +0 -0
  113. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  114. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/utils/tracing.py +0 -0
  115. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim/utils/wrappers.py +0 -0
  116. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  117. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/src/jaxsim.egg-info/top_level.txt +0 -0
  118. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/__init__.py +0 -0
  119. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_com.py +0 -0
  120. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_contact.py +0 -0
  121. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_data.py +0 -0
  122. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_frame.py +0 -0
  123. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_joint.py +0 -0
  124. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_link.py +0 -0
  125. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_api_model.py +0 -0
  126. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_automatic_differentiation.py +0 -0
  127. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_contact.py +0 -0
  128. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_exceptions.py +0 -0
  129. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_meshes.py +0 -0
  130. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_pytree.py +0 -0
  131. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/test_simulations.py +0 -0
  132. {jaxsim-0.5.1.dev37 → jaxsim-0.5.1.dev46}/tests/utils_idyntree.py +0 -0
@@ -35,7 +35,7 @@ jobs:
35
35
  pixi update --json | pixi exec pixi-diff-to-markdown --explicit-column > diff.md
36
36
 
37
37
  - name: Test project against updated pixi
38
- run: pixi run --environment tasks-cpu tests
38
+ run: pixi run --environment tasks-cpu test
39
39
  env:
40
40
  PY_COLORS: "1"
41
41
  JAX_PLATFORM_NAME: cpu
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.5.1.dev37
3
+ Version: 0.5.1.dev46
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
6
6
  Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@iit.it>
@@ -78,6 +78,7 @@ Requires-Dist: pre-commit; extra == "style"
78
78
  Provides-Extra: testing
79
79
  Requires-Dist: idyntree>=12.2.1; extra == "testing"
80
80
  Requires-Dist: pytest>=6.0; extra == "testing"
81
+ Requires-Dist: pytest-benchmark; extra == "testing"
81
82
  Requires-Dist: pytest-icdiff; extra == "testing"
82
83
  Requires-Dist: robot-descriptions; extra == "testing"
83
84
  Provides-Extra: viz
@@ -67,6 +67,7 @@ style = [
67
67
  testing = [
68
68
  "idyntree >= 12.2.1",
69
69
  "pytest >=6.0",
70
+ "pytest-benchmark",
70
71
  "pytest-icdiff",
71
72
  "robot-descriptions"
72
73
  ]
@@ -121,7 +122,7 @@ multi_line_output = 3
121
122
  profile = "black"
122
123
 
123
124
  [tool.pytest.ini_options]
124
- addopts = "-rsxX -v --strict-markers"
125
+ addopts = "-rsxX -v --strict-markers --benchmark-skip"
125
126
  minversion = "6.0"
126
127
  testpaths = [
127
128
  "tests",
@@ -233,7 +234,8 @@ jaxsim = { path = "./", editable = true }
233
234
 
234
235
  [tool.pixi.feature.test.tasks]
235
236
  pipcheck = "pip check"
236
- tests = { cmd = "pytest", depends_on = ["pipcheck"] }
237
+ test = { cmd = "pytest", depends_on = ["pipcheck"] }
238
+ benchmark = { cmd = "pytest --benchmark-only", depends_on = ["pipcheck"] }
237
239
 
238
240
  [tool.pixi.feature.test.dependencies]
239
241
  black = "24.*"
@@ -241,6 +243,7 @@ idyntree = "*"
241
243
  isort = "*"
242
244
  pre-commit = "*"
243
245
  pytest = "*"
246
+ pytest-benchmark = "*"
244
247
  pytest-icdiff = "*"
245
248
  robot_descriptions = "*"
246
249
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.5.1.dev37'
16
- __version_tuple__ = version_tuple = (0, 5, 1, 'dev37')
15
+ __version__ = version = '0.5.1.dev46'
16
+ __version_tuple__ = version_tuple = (0, 5, 1, 'dev46')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.5.1.dev37
3
+ Version: 0.5.1.dev46
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
6
6
  Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@iit.it>
@@ -78,6 +78,7 @@ Requires-Dist: pre-commit; extra == "style"
78
78
  Provides-Extra: testing
79
79
  Requires-Dist: idyntree>=12.2.1; extra == "testing"
80
80
  Requires-Dist: pytest>=6.0; extra == "testing"
81
+ Requires-Dist: pytest-benchmark; extra == "testing"
81
82
  Requires-Dist: pytest-icdiff; extra == "testing"
82
83
  Requires-Dist: robot-descriptions; extra == "testing"
83
84
  Provides-Extra: viz
@@ -121,6 +121,7 @@ tests/test_api_joint.py
121
121
  tests/test_api_link.py
122
122
  tests/test_api_model.py
123
123
  tests/test_automatic_differentiation.py
124
+ tests/test_benchmark.py
124
125
  tests/test_contact.py
125
126
  tests/test_exceptions.py
126
127
  tests/test_meshes.py
@@ -23,6 +23,7 @@ pre-commit
23
23
  [testing]
24
24
  idyntree>=12.2.1
25
25
  pytest>=6.0
26
+ pytest-benchmark
26
27
  pytest-icdiff
27
28
  robot-descriptions
28
29
 
@@ -20,6 +20,21 @@ def pytest_addoption(parser):
20
20
  help="Run tests only if GPU is available and utilized",
21
21
  )
22
22
 
23
+ parser.addoption(
24
+ "--batch-size",
25
+ action="store",
26
+ default="None",
27
+ help="Batch size for vectorized benchmarks (only applies to benchmark tests)",
28
+ )
29
+
30
+
31
+ def pytest_generate_tests(metafunc):
32
+ if (
33
+ "batch_size" in metafunc.fixturenames
34
+ and (batch_size := metafunc.config.getoption("--batch-size")) != "None"
35
+ ):
36
+ metafunc.parametrize("batch_size", [1, int(batch_size)])
37
+
23
38
 
24
39
  def check_gpu_usage():
25
40
  # Set environment variable to prioritize GPU.
@@ -109,6 +124,18 @@ def velocity_representation(request) -> jaxsim.VelRepr:
109
124
  return request.param
110
125
 
111
126
 
127
+ @pytest.fixture(scope="session")
128
+ def batch_size(request) -> int:
129
+ """
130
+ Fixture providing the batch size for vectorized benchmarks.
131
+
132
+ Returns:
133
+ The batch size for vectorized benchmarks.
134
+ """
135
+
136
+ return 1
137
+
138
+
112
139
  # ================================
113
140
  # Fixtures providing JaxSim models
114
141
  # ================================
@@ -0,0 +1,127 @@
1
+ from collections.abc import Callable
2
+
3
+ import jax
4
+ import pytest
5
+
6
+ import jaxsim
7
+ import jaxsim.api as js
8
+
9
+
10
+ def vectorize_data(model: js.model.JaxSimModel, batch_size: int):
11
+ key = jax.random.PRNGKey(seed=0)
12
+
13
+ return jax.vmap(
14
+ lambda key: js.data.random_model_data(
15
+ model=model,
16
+ key=key,
17
+ )
18
+ )(jax.numpy.repeat(key[None, :], repeats=batch_size, axis=0))
19
+
20
+
21
+ def benchmark_test_function(
22
+ func: Callable, model: js.model.JaxSimModel, benchmark, batch_size
23
+ ):
24
+ """Reusability wrapper for benchmark tests."""
25
+ data = vectorize_data(model=model, batch_size=batch_size)
26
+
27
+ # Warm-up call to avoid including compilation time
28
+ jax.vmap(func, in_axes=(None, 0))(model, data)
29
+ benchmark(jax.vmap(func, in_axes=(None, 0)), model, data)
30
+
31
+
32
+ @pytest.mark.benchmark
33
+ def test_forward_dynamics_aba(
34
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
35
+ ):
36
+ model = jaxsim_model_ergocub_reduced
37
+
38
+ benchmark_test_function(js.model.forward_dynamics_aba, model, benchmark, batch_size)
39
+
40
+
41
+ @pytest.mark.benchmark
42
+ def test_free_floating_bias_forces(
43
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
44
+ ):
45
+ model = jaxsim_model_ergocub_reduced
46
+
47
+ benchmark_test_function(
48
+ js.model.free_floating_bias_forces, model, benchmark, batch_size
49
+ )
50
+
51
+
52
+ @pytest.mark.benchmark
53
+ def test_forward_kinematics(
54
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
55
+ ):
56
+ model = jaxsim_model_ergocub_reduced
57
+
58
+ benchmark_test_function(js.model.forward_kinematics, model, benchmark, batch_size)
59
+
60
+
61
+ @pytest.mark.benchmark
62
+ def test_free_floating_mass_matrix(
63
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
64
+ ):
65
+ model = jaxsim_model_ergocub_reduced
66
+
67
+ benchmark_test_function(
68
+ js.model.free_floating_mass_matrix, model, benchmark, batch_size
69
+ )
70
+
71
+
72
+ @pytest.mark.benchmark
73
+ def test_free_floating_jacobian(
74
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
75
+ ):
76
+ model = jaxsim_model_ergocub_reduced
77
+
78
+ benchmark_test_function(
79
+ js.model.generalized_free_floating_jacobian, model, benchmark, batch_size
80
+ )
81
+
82
+
83
+ @pytest.mark.benchmark
84
+ def test_free_floating_jacobian_derivative(
85
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
86
+ ):
87
+ model = jaxsim_model_ergocub_reduced
88
+
89
+ benchmark_test_function(
90
+ js.model.generalized_free_floating_jacobian_derivative,
91
+ model,
92
+ benchmark,
93
+ batch_size,
94
+ )
95
+
96
+
97
+ @pytest.mark.benchmark
98
+ def test_soft_contact_model(
99
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
100
+ ):
101
+ model = jaxsim_model_ergocub_reduced
102
+
103
+ benchmark_test_function(js.ode.system_dynamics, model, benchmark, batch_size)
104
+
105
+
106
+ @pytest.mark.benchmark
107
+ def test_rigid_contact_model(
108
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
109
+ ):
110
+ model = jaxsim_model_ergocub_reduced
111
+
112
+ with model.editable(validate=False) as model:
113
+ model.contact_model = jaxsim.rbda.contacts.RigidContacts()
114
+
115
+ benchmark_test_function(js.ode.system_dynamics, model, benchmark, batch_size)
116
+
117
+
118
+ @pytest.mark.benchmark
119
+ def test_relaxed_rigid_contact_model(
120
+ jaxsim_model_ergocub_reduced: js.model.JaxSimModel, benchmark, batch_size
121
+ ):
122
+ model = jaxsim_model_ergocub_reduced
123
+
124
+ with model.editable(validate=False) as model:
125
+ model.contact_model = jaxsim.rbda.contacts.RelaxedRigidContacts()
126
+
127
+ benchmark_test_function(js.ode.system_dynamics, model, benchmark, batch_size)
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