Skip to content

Commit f181a6b

Browse files
committed
Pin Newton to the commit carrying newton#4017
Reading a MuJoCo actuator attribute through an articulation view -- mujoco.actuator_trntype, which the fixed-tendon adapter needs -- fails on release-1.5 with "has custom frequency 'mujoco:actuator' which is not supported by ArticulationView". newton#4017 makes ArticulationView generic over custom frequencies. It merged to main and was not backported, so the pin is the merge commit; main carries one further commit, so this takes 4017 and nothing else. The bump also exposes a latent installer bug. _ensure_newton uninstalled Newton before reinstalling it, but Isaac Sim's isaacsim.pip.newton prebundle symlinks into the installed tree (pip_prebundle/newton -> .../site-packages/newton). Removing the distribution left every link dangling, and the install failed its own prebundle check (nvbugs 6343978). It only ever fired when the pin changed, because the freeze check returns early while the pinned commit is already installed. The pinned build is now force-reinstalled over the existing tree. uv.lock is edited in place rather than regenerated: Newton's dependencies are identical across the two revisions, and a regenerate rewrites 1087 unrelated lines because uv 0.12.6 simplifies away a marker equal to the union of the three declared [tool.uv] environments.
1 parent bfec172 commit f181a6b

7 files changed

Lines changed: 41 additions & 13 deletions

File tree

pyproject.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,10 @@ torchaudio = "2.11.0"
211211
ovphysx = "0.5.10"
212212
ovrtx = "0.4.1.364340"
213213
ovstage = "0.1.1.355824"
214-
newton = "release-1.5"
214+
# Pinned past release-1.5 for newton#4017 (ArticulationView generic over custom frequencies),
215+
# which the MuJoCo tendon adapter needs to read mujoco.actuator_trntype. Merged to main and
216+
# not backported, so this is the merge commit rather than a branch.
217+
newton = "4055a1594d91ae8c1a8688b0932cd10f75d30603"
215218
warp = "1.16.0"
216219

217220
[tool.ruff]
@@ -394,7 +397,7 @@ override-dependencies = [
394397
"numpy>=2",
395398
"mujoco~=3.11.0",
396399
"mujoco-warp~=3.11.0",
397-
"newton[sim] @ git+https://github.com/newton-physics/newton.git@release-1.5",
400+
"newton[sim] @ git+https://github.com/newton-physics/newton.git@4055a1594d91ae8c1a8688b0932cd10f75d30603",
398401
# Force the Newton-matched schemas over isaacsim's ==0.2.0 pin.
399402
"newton-usd-schemas>=0.4.1",
400403
"torch==2.11.0",
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Changed
2+
^^^^^^^
3+
4+
* Changed the pinned Newton build to the commit merging
5+
`newton#4017 <https://github.com/newton-physics/newton/pull/4017>`_, which makes
6+
``ArticulationView`` generic over custom frequencies. Reading a MuJoCo actuator attribute such as
7+
``mujoco.actuator_trntype`` through an articulation view previously raised *"has custom frequency
8+
'mujoco:actuator' which is not supported by ArticulationView"*.
9+
10+
Fixed
11+
^^^^^
12+
13+
* Fixed ``isaaclab.sh --install`` aborting whenever the pinned Newton commit changes. The installer
14+
uninstalled Newton before reinstalling it, but Isaac Sim's ``isaacsim.pip.newton`` prebundle
15+
symlinks into the installed tree, so removing the distribution left every link dangling and the
16+
install failed its own prebundle check (nvbugs 6343978). The pinned build is now force-reinstalled
17+
over the existing tree instead.

source/isaaclab/isaaclab/cli/commands/install.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,6 @@ def _ensure_newton() -> None:
368368

369369
python_exe = extract_python_exe()
370370
pip_cmd = get_pip_command(python_exe)
371-
using_uv = pip_cmd[0] == "uv"
372371

373372
# git installs record the commit in freeze output; skip if it is already present.
374373
frozen = run_command(pip_cmd + ["freeze"], capture_output=True, text=True, check=False)
@@ -379,9 +378,12 @@ def _ensure_newton() -> None:
379378
return
380379

381380
print_info(f"Installing pinned Newton git build ({commit[:10]})...")
382-
uninstall_flags = ["-y"] if not using_uv else []
383-
run_command(pip_cmd + ["uninstall"] + uninstall_flags + ["newton"], check=False)
384-
_run_package_install(pip_cmd + ["install", requirement, *([schemas] if schemas else [])])
381+
# Overwrite in place rather than uninstall-then-install. Isaac Sim's
382+
# ``isaacsim.pip.newton`` prebundle is a symlink farm pointing at the installed tree, so
383+
# removing the distribution first leaves every link dangling and trips
384+
# :func:`_assert_no_new_dangling_prebundle_symlinks` -- see nvbugs 6343978. A forced
385+
# reinstall replaces the files the new version ships without deleting the old tree.
386+
_run_package_install(pip_cmd + ["install", "--force-reinstall", requirement, *([schemas] if schemas else [])])
385387

386388

387389
# Isaac Sim install settings.

source/isaaclab/test/cli/test_install.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,12 @@ def _completed(stdout: str = "", returncode: int = 0) -> subprocess.CompletedPro
311311
return subprocess.CompletedProcess(args=[], returncode=returncode, stdout=stdout, stderr="")
312312

313313
def test_installs_pinned_git_build_when_absent(self):
314-
"""When the pinned commit is not installed, uninstall newton then install the git build."""
314+
"""When the pinned commit is not installed, force-reinstall over the existing tree.
315+
316+
Never ``pip uninstall`` first: Isaac Sim's ``isaacsim.pip.newton`` prebundle symlinks
317+
into the installed tree, so removing the distribution dangles every link and the
318+
install aborts on the prebundle guard (nvbugs 6343978).
319+
"""
315320
from isaaclab.cli.commands import install
316321

317322
commit = install._pinned_version("newton")
@@ -328,10 +333,11 @@ def fake_run(cmd, *args, **kwargs):
328333
):
329334
install._ensure_newton()
330335

331-
assert any("uninstall" in cmd for cmd in calls), "old Newton should be uninstalled first"
336+
assert not any("uninstall" in cmd for cmd in calls), "uninstalling dangles the prebundle symlinks"
332337
install_cmds = [cmd for cmd in calls if "install" in cmd]
333338
assert install_cmds, "expected a pip install call"
334339
install_args = install_cmds[-1]
340+
assert "--force-reinstall" in install_args, "the new tree must overwrite the old in place"
335341
assert any(arg.startswith("newton[sim]") and arg.endswith(commit) for arg in install_args)
336342
assert any(arg.startswith("newton-usd-schemas") for arg in install_args), "schemas must be forced too"
337343

source/isaaclab/test/install_ci/uv_pip/uv-overrides.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
numpy>=2
22
mujoco~=3.11.0
33
mujoco-warp~=3.11.0
4-
newton[sim] @ git+https://github.com/newton-physics/newton.git@release-1.5
4+
newton[sim] @ git+https://github.com/newton-physics/newton.git@4055a1594d91ae8c1a8688b0932cd10f75d30603
55
newton-usd-schemas>=0.4.1
66
torch==2.11.0
77
torchvision==0.26.0

tools/wheel_builder/uv-overrides.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
numpy>=2
22
mujoco~=3.11.0
33
mujoco-warp~=3.11.0
4-
newton[sim] @ git+https://github.com/newton-physics/newton.git@release-1.5
4+
newton[sim] @ git+https://github.com/newton-physics/newton.git@4055a1594d91ae8c1a8688b0932cd10f75d30603
55
newton-usd-schemas>=0.4.1
66
torch==2.11.0
77
torchvision==0.26.0

uv.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)