[Bump] Bump Newton to 1.6.0rc1 for newton#4017 - #7445
Conversation
Isaac Sim ships some prebundled packages twice: a flat directory and an extras-qualified mirror, <pkg>[extras]/<pkg>-<version>-*/<pkg>, whose contents are per-file symlinks into the flat copy. Only the flat directory was repointed, so the mirror kept pointing at the shipped version's file list. MEASURED on the Isaac Sim image: newton[sim]/newton-1.5.0-py3-none-any/newton holds 842 symlinks, and 330 of their targets do not exist in the newton the pin installs, 232 of them under _src/solvers/kamino. Collapse each mirror to the same symlink the flat directory already gets, so one directory link replaces a per-file tree that goes stale on every bump. Mirrors are matched by name rather than glob, since newton[sim] is a valid character class that would otherwise match newtons.
487e413 to
f950b51
Compare
f950b51 to
9282d41
Compare
1.6.0rc1 is the first release carrying newton#4017, which makes ArticulationView generic over custom frequencies; the MuJoCo tendon adapter needs it to read mujoco.actuator_trntype. The release requires warp-lang >=1.17 and mujoco-warp 3.12, so those pins move with it. Both uv-overrides.txt files are regenerated from the override table rather than edited by hand.
9282d41 to
cd565d7
Compare
develop pins Newton to 24bd8635 via isaac-sim#7453, which sits 16 commits before newton#4017 and so lacks the ArticulationView fix this branch exists to deliver. 1.6.0rc1 is a descendant of that commit, so keeping the release pin loses nothing develop gained. Drop two things develop now does better: it expands package_roots to include the extras-qualified wheel trees, which covers the prebundle mirrors this branch walked by hand, and its P-ADMM fix applies the sparse flags only for penalty_update_method rather than for every field.
Greptile SummaryThe PR upgrades Newton to 1.6.0rc1 with the corresponding Warp and MuJoCo versions, updates actuator assertions for Newton's renamed drive classes, repairs extras-qualified prebundle mirrors, and makes the Newton manipulation determinism test request run-to-run determinism.
Confidence Score: 5/5The PR appears safe to merge, with no concrete changed-code defect or security regression identified. The coordinated dependency pins cover the repository's supported platforms, compatibility-sensitive test expectations were updated, and the prebundle and determinism changes preserve their documented runtime contracts. Important Files Changed
Reviews (1): Last reviewed commit: "Merge develop; drop the CI fixes it land..." | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
The Newton, Warp, and MuJoCo dependency updates are internally consistent, but three changelog fragments do not accurately describe the changes in this patch. The Newton release note incorrectly identifies the previous dependency as Newton 1.5.1 rather than the pinned 1.6.0.dev0 git revision, and three .skip entries refer to unrelated or absent implementation changes.
- Design and architecture: The dependency structure remains coherent:
newton[sim]>=1.2.0supports wheel co-resolution while the uv override selects1.6.0rc1, and the override files and lock manifest reflect the same Newton, Warp, and MuJoCo versions. No architectural correction is required beyond keeping the release metadata aligned with the actual dependency transition. - API: No Isaac Lab public API is changed. Newton now constructs the renamed
Drive*actuator classes and the affected tests were updated, but the user-facing changelog currently misstates the prior Newton source and version; it should describe the move from the pinned git revision recorded as 1.6.0.dev0 to the 1.6.0rc1 PyPI release. - Implementation: The dependency pins and actuator test expectations are aligned with the updated lockfile. Before merge, remove the two unrelated
isaaclab.skipfragments and correct theisaaclab_newtonfragment, which currently describes a P-ADMM solver test change absent from this patch rather than the actuator class-name literal updates that actually landed.
Minor fixes needed. Posted 3 actionable findings inline.
Automated review; human maintainers own approval decisions.
| Changed | ||
| ^^^^^^^ | ||
|
|
||
| * Changed the pinned Newton version from ``1.5.1`` to ``1.6.0rc1``, the first release carrying |
There was a problem hiding this comment.
🟡 Warning · Api — Release note misstates the previous Newton pin
This diff replaces newton[sim] @ git+...@24bd8635..., which uv.lock recorded as version 1.6.0.dev0, not 1.5.1. The published note therefore misidentifies both the prior dependency and who was affected by the ArticulationView custom-frequency error. Restate it as moving from the pinned Newton git revision to the 1.6.0rc1 PyPI release, and consider noting the ControllerPD to DrivePD construction rename that this bump makes user-visible.
| @@ -0,0 +1 @@ | |||
| CI-only fix; no user-visible change. | |||
There was a problem hiding this comment.
🔵 Suggestion · Implementation — Unrelated changelog fragments committed
This fragment and jichuanh-kitless-isaac-sim-symlink.skip describe a deps-invariants fix and a kit-less Isaac Sim symlink fix, neither of which appears in this diff; the isaaclab change here is already covered by jichuanh-newton-pin-4017.minor.rst. Drop both so the commit stays focused and changelog.d does not accumulate fragments for unshipped work.
| @@ -0,0 +1,2 @@ | |||
| Test-only change: the P-ADMM round-trip test now builds a solver combination the | |||
There was a problem hiding this comment.
🔵 Suggestion · Implementation — Fragment describes a change absent from diff
The only isaaclab_newton change here updates actuator class-name literals in test/assets/test_newton_actuators_newton.py; no P-ADMM round-trip or solver-combination change exists in this PR. The fragment text therefore records inaccurate release metadata for the package. Reword it to describe the actuator class-name update that actually lands.
Drop two fragments left over from isaac-sim#7405, which merged: the docker and CLI changes they described are no longer part of this branch. Rename the isaaclab_newton fragment to describe the change that is actually here. The P-ADMM solver-combination fix now comes from develop, so the only remaining change in that package is the test update for Newton's new drive class names. State why the manipulation case asks for run_to_run rather than implying it matches the cartpole cases, which request the stronger gpu_to_gpu.
The install test pins the exact Newton version the wheel must resolve, and the literal still named the git-pin build develop carries (1.6.0.dev0). This branch pins the 1.6.0rc1 release, so the assertion failed in Installation Tests (ARM) even though the wheel resolved newton==1.6.0rc1 correctly.
isaac-sim#7453 pinned the Newton build in [project].dependencies specifically to cover "both workspace and wheel installs". Restoring the loose >=1.2.0 bound during the develop merge dropped the wheel half of that guarantee: [tool.uv].override- dependencies only reaches uv sync, and 1.6.0rc1 is a prerelease, so a default resolve of the published metadata skipped it and picked the newest stable, 1.5.1 -- which lacks newton#4017, the fix this bump exists to deliver. Pin the same release the override forces. A default resolve of the new metadata returns newton==1.6.0rc1. isaacsim-core==6.0.1.0 requires newton[sim]==1.2.1, so an override is still needed to install the isaacsim extra, exactly as on develop.
Summary
1.5.1to1.6.0rc1, the first release carrying newton#4017, unblocking the MuJoCo tendon adapter that PR [Task Clean-up][Assets] Serve the Shadow Hand from one asset with native PhysX tendons #7161 needs.warp-langandmujoco/mujoco-warpmove with it, because1.6.0rc1requires them.newton[sim]in[project].dependenciesas well, so a wheel built from this metadata resolves the fix rather than falling back to the newest stable.isaaclabandisaaclab_newtonfor Newton's new actuator class names, and asks for a determinism guarantee in the manipulation determinism test.Description
resolve_fixed_tendon_actuator_columnsreadsmujoco.actuator_trntypethrough anArticulationView. Every Newton 1.5.x release rejects that with "has custom frequency'mujoco:actuator' which is not supported by ArticulationView"; newton#4017 makes
ArticulationViewgeneric over custom frequencies.1.6.0rc1(published 2026-09-03) is the first release containing that fix — verified two ways:the merge commit
4055a159is an ancestor ofv1.6.0rc1, andcustom_frequency_label_attributes,the symbol the fix introduces in
newton/_src/sim/model.py, is present atv1.6.0rc1and absentat
v1.5.1. No1.6.0final exists yet, and no 1.5.x backport carries the fix, so1.6.0rc1isthe only released option.
The release requires
warp-lang>=1.17.0andmujoco-warp~=3.12.0, so those pins move too:newton[sim]1.5.11.6.0rc1warp-lang1.16.01.17.0mujoco3.11.03.12.0mujoco-warp3.11.03.12.0warp-langis pinned to the1.17.0release rather than left as>=1.17.0: Newton's prereleaseenables prerelease resolution, and an unbounded bound then resolves to a nightly
(
1.18.0.dev20260903).Wheel installs get the pin too
[tool.uv].override-dependenciesonly reachesuv sync, so it does not constrain a wheel builtfrom this metadata.
1.6.0rc1is a prerelease, which a default resolve skips, so a loose boundresolved
newton 1.5.1— without newton#4017, the fix this bump exists to deliver. Sincewheel.ymlbuilds on every push todevelop, that would have shipped.[project].dependenciesnow pinsnewton[sim]==1.6.0rc1, matching the override. A defaultresolve of the new metadata returns
1.6.0rc1under bothuv pip compileandpip download,with no
--preflag.isaacsim-core==6.0.1.0requiresnewton[sim]==1.2.1, so installing theisaacsimextra still needs an override — exactly as ondevelop, which carries an equallyexact pin in the same place.
Newton actuator class rename
1.6.0rc1introducesDrivePD/DriveNeuralMLP/DriveNeuralLSTMalongside the existingControllerPD/ControllerNeural*. Both names remain importable, so this is not a breakingAPI change and no production code changes. Tests in
isaaclabandisaaclab_newtonassert on theclass name Newton constructs with, which switched to the
Drive*form, so those literals areupdated.
Determinism
test_manipulation_env_determinism[cuda-Isaac-Open-Drawer-Franka]failed on this branch in CI.Two separate questions: whether the bump caused it, and why it failed at all.
Not caused by the bump. Each arm was run 5x on the same machine, because a single run of an
intermittent test samples a coin rather than measuring it:
newton 1.5.1/warp 1.16.0/mujoco 3.11.0)newton 1.6.0rc1/warp 1.17.0/mujoco 3.12.0)Both pin sets fail at the same rate on Blackwell and both are clean on L40, so the failure is
hardware-dependent, not version-dependent. Intermediate Newton revisions (the commits before and
at newton#4119, the MuJoCo 3.12 bump) show
the same behaviour, so neither Warp 1.17, MuJoCo 3.12, nor #4119 is implicated.
Why it failed. The test asserted bit-reproducible rewards without ever asking for a
determinism guarantee. Newton defaults to
wp.DeterministicMode.NOT_GUARANTEED, under whichWarp's atomics may accumulate in any order, so two runs of the same environment are not required
to agree — the assertion was stricter than the configuration it ran under, and whether it held
came down to GPU scheduling.
The Newton-backed case now passes
deterministic_mode="run_to_run", which is exactly theguarantee this test asserts: one device, one process, run twice.
deterministic_modeis a Newtonsetting, so the PhysX-backed
IsaacContrib-Lift-Cube-Frankacase leaves it unset and the helperkeeps asserting that the mode is only applied to a
NewtonCfgbackend. This is atest-configuration fix, not a masking of the intermittency: the guarantee the assertion depends
on is now actually requested.
Related: #7561 addresses the adjacent layer and
does not overlap this PR. Newton's solvers take a per-module
deterministicargument, which iswhat
deterministic_modereaches and what this PR sets; Newton's sensor and geometry kernels takeno such argument and fall back to the
warp.config.deterministicglobal, which #7561 raises fromthe same config field in the RL entrypoint.
Type of change
Release backport
developValidation
uv lock --check— clean; the relock moves exactly the four packages above, and the[project].dependenciespin moves exactly one further lockfile linenewton==1.6.0rc1under bothuv pip compileandpip download, with no--preflaguv run --frozen python -m pytest source/isaaclab/test/cli/test_wheel_builder_metadata.py source/isaaclab/test/cli/test_uv_run_pyproject.py— 21 passed, which enforces that the two generateduv-overrides.txtfiles match the override table and that[tool.isaaclab.versions]mirrors the dependency pinsuv run isaaclab -f— passedb184335e80b