jaxsim 0.4.3.dev80__tar.gz → 0.4.3.dev90__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 (124) hide show
  1. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/PKG-INFO +1 -1
  2. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/_version.py +2 -2
  3. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/contact.py +5 -7
  4. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/kin_dyn_parameters.py +1 -3
  5. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/model.py +2 -8
  6. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/crba.py +29 -29
  7. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/PKG-INFO +1 -1
  8. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_link.py +10 -30
  9. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_automatic_differentiation.py +1 -1
  10. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.devcontainer/Dockerfile +0 -0
  11. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.devcontainer/devcontainer.json +0 -0
  12. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.gitattributes +0 -0
  13. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/CODEOWNERS +0 -0
  14. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/ci_cd.yml +0 -0
  15. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/read_the_docs.yml +0 -0
  16. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/update_pixi_lockfile.yml +0 -0
  17. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.gitignore +0 -0
  18. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.pre-commit-config.yaml +0 -0
  19. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.readthedocs.yaml +0 -0
  20. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/CONTRIBUTING.md +0 -0
  21. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/LICENSE +0 -0
  22. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/README.md +0 -0
  23. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/Makefile +0 -0
  24. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/conf.py +0 -0
  25. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/examples.rst +0 -0
  26. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/guide/install.rst +0 -0
  27. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/index.rst +0 -0
  28. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/make.bat +0 -0
  29. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/api.rst +0 -0
  30. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/integrators.rst +0 -0
  31. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/math.rst +0 -0
  32. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/mujoco.rst +0 -0
  33. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/parsers.rst +0 -0
  34. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/rbda.rst +0 -0
  35. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/typing.rst +0 -0
  36. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/utils.rst +0 -0
  37. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/environment.yml +0 -0
  38. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/.gitattributes +0 -0
  39. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/.gitignore +0 -0
  40. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/PD_controller.ipynb +0 -0
  41. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/Parallel_computing.ipynb +0 -0
  42. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/README.md +0 -0
  43. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/assets/cartpole.urdf +0 -0
  44. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/pixi.lock +0 -0
  45. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/pyproject.toml +0 -0
  46. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/setup.cfg +0 -0
  47. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/setup.py +0 -0
  48. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/__init__.py +0 -0
  49. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/__init__.py +0 -0
  50. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/com.py +0 -0
  51. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/common.py +0 -0
  52. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/data.py +0 -0
  53. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/frame.py +0 -0
  54. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/joint.py +0 -0
  55. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/link.py +0 -0
  56. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/ode.py +0 -0
  57. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/ode_data.py +0 -0
  58. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/references.py +0 -0
  59. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/exceptions.py +0 -0
  60. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/__init__.py +0 -0
  61. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/common.py +0 -0
  62. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/fixed_step.py +0 -0
  63. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/variable_step.py +0 -0
  64. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/logging.py +0 -0
  65. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/__init__.py +0 -0
  66. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/adjoint.py +0 -0
  67. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/cross.py +0 -0
  68. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/inertia.py +0 -0
  69. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/joint_model.py +0 -0
  70. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/quaternion.py +0 -0
  71. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/rotation.py +0 -0
  72. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/skew.py +0 -0
  73. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/transform.py +0 -0
  74. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/__init__.py +0 -0
  75. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/__main__.py +0 -0
  76. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/loaders.py +0 -0
  77. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/model.py +0 -0
  78. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/visualizer.py +0 -0
  79. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/__init__.py +0 -0
  80. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  81. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  82. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  83. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/link.py +0 -0
  84. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/model.py +0 -0
  85. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  86. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/__init__.py +0 -0
  87. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/parser.py +0 -0
  88. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/utils.py +0 -0
  89. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/__init__.py +0 -0
  90. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/aba.py +0 -0
  91. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/collidable_points.py +0 -0
  92. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  93. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/common.py +0 -0
  94. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  95. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  96. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/soft.py +0 -0
  97. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  98. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/jacobian.py +0 -0
  99. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/rnea.py +0 -0
  100. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/utils.py +0 -0
  101. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/terrain/__init__.py +0 -0
  102. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/terrain/terrain.py +0 -0
  103. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/typing.py +0 -0
  104. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/__init__.py +0 -0
  105. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  106. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/tracing.py +0 -0
  107. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/wrappers.py +0 -0
  108. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  109. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  110. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/requires.txt +0 -0
  111. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/top_level.txt +0 -0
  112. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/__init__.py +0 -0
  113. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/conftest.py +0 -0
  114. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_com.py +0 -0
  115. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_contact.py +0 -0
  116. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_data.py +0 -0
  117. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_frame.py +0 -0
  118. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_joint.py +0 -0
  119. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_model.py +0 -0
  120. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_contact.py +0 -0
  121. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_exceptions.py +0 -0
  122. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_pytree.py +0 -0
  123. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_simulations.py +0 -0
  124. {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.3.dev80
3
+ Version: 0.4.3.dev90
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>
6
6
  Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.3.dev80'
16
- __version_tuple__ = version_tuple = (0, 4, 3, 'dev80')
15
+ __version__ = version = '0.4.3.dev90'
16
+ __version_tuple__ = version_tuple = (0, 4, 3, 'dev90')
@@ -372,11 +372,9 @@ def transforms(model: js.model.JaxSimModel, data: js.data.JaxSimModelData) -> jt
372
372
  """
373
373
 
374
374
  # Get the transforms of the parent link of all collidable points.
375
- W_H_L = jax.vmap(
376
- lambda parent_link_idx: js.link.transform(
377
- model=model, data=data, link_index=parent_link_idx
378
- )
379
- )(jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int))
375
+ W_H_L = js.model.forward_kinematics(model=model, data=data)[
376
+ jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int)
377
+ ]
380
378
 
381
379
  # Build the link-to-point transform from the displacement between the link frame L
382
380
  # and the implicit contact frame C.
@@ -427,9 +425,9 @@ def jacobian(
427
425
  # Compute the contact Jacobian.
428
426
  # In inertial-fixed output representation, the Jacobian of the parent link is also
429
427
  # the Jacobian of the frame C implicitly associated with the collidable point.
430
- W_J_WC = jax.vmap(lambda parent_link_idx: W_J_WL[parent_link_idx])(
428
+ W_J_WC = W_J_WL[
431
429
  jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int)
432
- )
430
+ ]
433
431
 
434
432
  # Adjust the output representation.
435
433
  match output_vel_repr:
@@ -422,9 +422,7 @@ class KynDynParameters(JaxsimDataclass):
422
422
  # Note that here we include also the index 0 since suc_H_child[0] stores the
423
423
  # optional pose of the base link w.r.t. the root frame of the model.
424
424
  # This is supported by SDF when the base link <pose> element is defined.
425
- suc_H_i = jax.vmap(lambda i: self.joint_model.successor_H_child(joint_index=i))(
426
- jnp.arange(0, 1 + self.number_of_joints())
427
- )
425
+ suc_H_i = self.joint_model.suc_H_i[jnp.arange(0, 1 + self.number_of_joints())]
428
426
 
429
427
  # Compute the overall transforms from the parent to the child of each joint by
430
428
  # composing all the components of our joint model.
@@ -395,13 +395,7 @@ def total_mass(model: JaxSimModel) -> jtp.Float:
395
395
  The total mass of the model.
396
396
  """
397
397
 
398
- return (
399
- jax.vmap(lambda idx: js.link.mass(model=model, link_index=idx))(
400
- jnp.arange(model.number_of_links())
401
- )
402
- .sum()
403
- .astype(float)
404
- )
398
+ return model.kin_dyn_parameters.link_parameters.mass.sum().astype(float)
405
399
 
406
400
 
407
401
  @jax.jit
@@ -974,7 +968,7 @@ def free_floating_coriolis_matrix(
974
968
  lambda link_index: js.link.jacobian_derivative(
975
969
  model=model, data=data, link_index=link_index
976
970
  )
977
- )(js.link.names_to_idxs(model=model, link_names=model.link_names()))
971
+ )(jnp.arange(model.number_of_links()))
978
972
 
979
973
  L_M_L = link_spatial_inertia_matrices(model=model)
980
974
 
@@ -94,48 +94,48 @@ def crba(model: js.model.JaxSimModel, *, joint_positions: jtp.Vector) -> jtp.Mat
94
94
 
95
95
  j = i
96
96
 
97
- CarryInnerFn = tuple[jtp.Int, jtp.Matrix, jtp.Matrix]
98
- carry_inner_fn = (j, Fi, M)
97
+ FakeWhileCarry = tuple[jtp.Int, jtp.Vector, jtp.Matrix]
98
+ fake_while_carry = (j, Fi, M)
99
99
 
100
- def while_loop_body(carry: CarryInnerFn) -> CarryInnerFn:
101
- j, Fi, M = carry
100
+ # This internal for loop implements the while loop of the CRBA algorithm
101
+ # to compute off-diagonal blocks of the mass matrix M.
102
+ # In pseudocode it is implemented as a while loop. However, in order to enable
103
+ # applying reverse-mode AD, we implement it as a nested for loop with a fixed
104
+ # number of iterations and a branching model to skip for loop iterations.
105
+ def fake_while_loop(
106
+ carry: FakeWhileCarry, i: jtp.Int
107
+ ) -> tuple[FakeWhileCarry, None]:
102
108
 
103
- Fi = i_X_λi[j].T @ Fi
104
- j = λ[j]
105
- jj = j - 1
109
+ def compute(carry: FakeWhileCarry) -> FakeWhileCarry:
106
110
 
107
- M_ij = Fi.T @ S[j]
111
+ j, Fi, M = carry
108
112
 
109
- M = M.at[ii + 6, jj + 6].set(M_ij.squeeze())
110
- M = M.at[jj + 6, ii + 6].set(M_ij.squeeze())
113
+ Fi = i_X_λi[j].T @ Fi
114
+ j = λ[j]
111
115
 
112
- return j, Fi, M
116
+ M_ij = Fi.T @ S[j]
113
117
 
114
- # The following functions are part of a (rather messy) workaround for computing
115
- # a while loop using a for loop with fixed number of iterations.
116
- def inner_fn(carry: CarryInnerFn, k: jtp.Int) -> tuple[CarryInnerFn, None]:
117
- def compute_inner(carry: CarryInnerFn) -> tuple[CarryInnerFn, None]:
118
- j, _, _ = carry
119
- out = jax.lax.cond(
120
- pred=(λ[j] > 0),
121
- true_fun=while_loop_body,
122
- false_fun=lambda carry: carry,
123
- operand=carry,
124
- )
125
- return out, None
118
+ jj = j - 1
119
+ M = M.at[ii + 6, jj + 6].set(M_ij.squeeze())
120
+ M = M.at[jj + 6, ii + 6].set(M_ij.squeeze())
121
+
122
+ return j, Fi, M
126
123
 
127
124
  j, _, _ = carry
128
- return jax.lax.cond(
129
- pred=(k == j),
130
- true_fun=compute_inner,
131
- false_fun=lambda carry: (carry, None),
125
+
126
+ j, Fi, M = jax.lax.cond(
127
+ pred=jnp.logical_and(i == λ[j], λ[j] > 0),
128
+ true_fun=compute,
129
+ false_fun=lambda carry: carry,
132
130
  operand=carry,
133
131
  )
134
132
 
133
+ return (j, Fi, M), None
134
+
135
135
  (j, Fi, M), _ = (
136
136
  jax.lax.scan(
137
- f=inner_fn,
138
- init=carry_inner_fn,
137
+ f=fake_while_loop,
138
+ init=fake_while_carry,
139
139
  xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
140
140
  )
141
141
  if model.number_of_links() > 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.3.dev80
3
+ Version: 0.4.3.dev90
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>
6
6
  Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
@@ -74,7 +74,7 @@ def test_link_inertial_properties(
74
74
 
75
75
  for link_name, link_idx in zip(
76
76
  model.link_names(),
77
- js.link.names_to_idxs(model=model, link_names=model.link_names()),
77
+ jnp.arange(model.number_of_links()),
78
78
  strict=True,
79
79
  ):
80
80
  if link_name == model.base_link():
@@ -164,7 +164,7 @@ def test_link_jacobians(
164
164
 
165
165
  for link_name, link_idx in zip(
166
166
  model.link_names(),
167
- js.link.names_to_idxs(model=model, link_names=model.link_names()),
167
+ jnp.arange(model.number_of_links()),
168
168
  strict=True,
169
169
  ):
170
170
  v_WL_idt = kin_dyn.frame_velocity(frame_name=link_name)
@@ -185,7 +185,7 @@ def test_link_jacobians(
185
185
 
186
186
  for link_name, link_idx in zip(
187
187
  model.link_names(),
188
- js.link.names_to_idxs(model=model, link_names=model.link_names()),
188
+ jnp.arange(model.number_of_links()),
189
189
  strict=True,
190
190
  ):
191
191
  v_WL_idt = kin_dyn_other_repr.frame_velocity(frame_name=link_name)
@@ -220,7 +220,7 @@ def test_link_bias_acceleration(
220
220
 
221
221
  for name, index in zip(
222
222
  model.link_names(),
223
- js.link.names_to_idxs(model=model, link_names=model.link_names()),
223
+ jnp.arange(model.number_of_links()),
224
224
  strict=True,
225
225
  ):
226
226
  Jν_idt = kin_dyn.frame_bias_acc(frame_name=name)
@@ -240,11 +240,7 @@ def test_link_bias_acceleration(
240
240
 
241
241
  W_H_L = js.model.forward_kinematics(model=model, data=data)
242
242
 
243
- W_a_bias_WL = jax.vmap(
244
- lambda index: js.link.bias_acceleration(
245
- model=model, data=data, link_index=index
246
- )
247
- )(jnp.arange(model.number_of_links()))
243
+ W_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
248
244
 
249
245
  with data.switch_velocity_representation(VelRepr.Body):
250
246
 
@@ -252,11 +248,7 @@ def test_link_bias_acceleration(
252
248
  lambda W_H_L: jaxsim.math.Adjoint.from_transform(transform=W_H_L)
253
249
  )(W_H_L)
254
250
 
255
- L_a_bias_WL = jax.vmap(
256
- lambda index: js.link.bias_acceleration(
257
- model=model, data=data, link_index=index
258
- )
259
- )(jnp.arange(model.number_of_links()))
251
+ L_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
260
252
 
261
253
  W_a_bias_WL_converted = jax.vmap(
262
254
  lambda W_X_L, L_a_bias_WL: W_X_L @ L_a_bias_WL
@@ -269,11 +261,7 @@ def test_link_bias_acceleration(
269
261
 
270
262
  W_H_L = js.model.forward_kinematics(model=model, data=data)
271
263
 
272
- L_a_bias_WL = jax.vmap(
273
- lambda index: js.link.bias_acceleration(
274
- model=model, data=data, link_index=index
275
- )
276
- )(jnp.arange(model.number_of_links()))
264
+ L_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
277
265
 
278
266
  with data.switch_velocity_representation(VelRepr.Inertial):
279
267
 
@@ -283,11 +271,7 @@ def test_link_bias_acceleration(
283
271
  )
284
272
  )(W_H_L)
285
273
 
286
- W_a_bias_WL = jax.vmap(
287
- lambda index: js.link.bias_acceleration(
288
- model=model, data=data, link_index=index
289
- )
290
- )(jnp.arange(model.number_of_links()))
274
+ W_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
291
275
 
292
276
  L_a_bias_WL_converted = jax.vmap(
293
277
  lambda L_X_W, W_a_bias_WL: L_X_W @ W_a_bias_WL
@@ -323,14 +307,10 @@ def test_link_jacobian_derivative(
323
307
  lambda link_index: js.link.jacobian_derivative(
324
308
  model=model, data=data, link_index=link_index
325
309
  )
326
- )(js.link.names_to_idxs(model=model, link_names=model.link_names()))
310
+ )(jnp.arange(model.number_of_links()))
327
311
 
328
312
  # Compute the product J̇ν.
329
- O_a_bias_WL = jax.vmap(
330
- lambda link_index: js.link.bias_acceleration(
331
- model=model, data=data, link_index=link_index
332
- )
333
- )(js.link.names_to_idxs(model=model, link_names=model.link_names()))
313
+ O_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
334
314
 
335
315
  # Compare the two computations.
336
316
  assert jnp.einsum("l6g,g->l6", O_J̇_WL_I, I_ν) == pytest.approx(
@@ -263,7 +263,7 @@ def test_ad_jacobian(
263
263
  # ====
264
264
 
265
265
  # Get the link indices.
266
- link_indices = js.link.names_to_idxs(model=model, link_names=model.link_names())
266
+ link_indices = jnp.arange(model.number_of_links())
267
267
 
268
268
  # Get a closure exposing only the parameters to be differentiated.
269
269
  # We differentiate the jacobian of the last link, likely among those
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