Update mjx-warp ffi, prepare for render.

PiperOrigin-RevId: 829027266
Change-Id: Ifca30885fb6302e8ce61f949fdc0f56674bbe9e4
This commit is contained in:
Baruch Tabanpour
2025-11-06 11:03:47 -08:00
committed by Copybara-Service
parent fa062768f4
commit 3080e3424f
+13 -4
View File
@@ -106,8 +106,11 @@ def jax_callable_variadic_tuple(
def callable_wrapper(*args, **kwargs):
def func_wrapper(*flat_args, **kwargs):
unflat_args = jax.tree.unflatten(in_tree, flat_args)
return func(*unflat_args, **kwargs)
num_inputs = in_tree.num_leaves
flat_inputs = flat_args[:num_inputs]
output_buffers = flat_args[num_inputs:]
unflat_args = jax.tree.unflatten(in_tree, flat_inputs)
return func(*unflat_args, *output_buffers, **kwargs)
# Provide a flattened signature for the Warp callable machinery.
new_signature = flatten_signature(inspect.signature(func), args)
@@ -245,7 +248,7 @@ def _squeeze_dim(leaf_expanded: Any, leaf: Any) -> Any:
return leaf_expanded
def marshal_jax_warp_callable(func):
def marshal_jax_warp_callable(func, raw_output: bool = False):
"""Marshal fields into a MuJoCo Warp function."""
@functools.wraps(func)
@@ -265,6 +268,9 @@ def marshal_jax_warp_callable(func):
d,
)
d_expanded_result = func(m_expanded, d_expanded)
if raw_output:
return d_expanded_result
d_result = jax.tree.map(_squeeze_dim, d_expanded_result, d)
return d_result
@@ -350,7 +356,7 @@ def _check_leading_dim(
)
def marshal_custom_vmap(vmap_func):
def marshal_custom_vmap(vmap_func, raw_output: bool = False):
"""Marshal fields for a custom vmap into an MuJoCo Warp function."""
@functools.wraps(vmap_func)
@@ -387,6 +393,9 @@ def marshal_custom_vmap(vmap_func):
d_broadcast_flat_result, out_batched = vmap_func(
axis_size, is_batched, m_flat, d_broadcast_flat
)
if raw_output:
return d_broadcast_flat_result, out_batched
# Explicitly mark MuJoCo Warp data fields as batched after vmapping is done.
out_batched = jax.tree.map_with_path(
# NB: if a field is not in MuJoCo Warp, we let JAX do its magic.