[Newton] Drop explicit mujoco/mujoco-warp pins, defer to newton[sim]#5566
[Newton] Drop explicit mujoco/mujoco-warp pins, defer to newton[sim]#5566hujc7 wants to merge 2 commits into
Conversation
Newton declares `mujoco` and `mujoco-warp` under its `[sim]` extra, so listing them again in IsaacLab's setup.py was redundant and forced the core `isaaclab` package (used by PhysX and Kit backends too) to pull in MuJoCo even when nothing in IsaacLab core imports it. Switch the Newton install spec to `newton[sim] @ git+...` and remove the direct pins. Mirror the same change in the wheel builder manifest so wheel builds stay in sync with `isaaclab_newton/setup.py`.
There was a problem hiding this comment.
🤖 Isaac Lab Review Bot
Summary
Removes redundant mujoco and mujoco-warp version pins from isaaclab core and isaaclab_newton, deferring to Newton's [sim] extra as the single source of truth for these transitive dependencies. Users installing only PhysX/Kit backends no longer pull in MuJoCo unnecessarily.
Design Assessment
Design is sound. This is the correct architectural decision — isaaclab core doesn't import MuJoCo anywhere (grep -rn "import mujoco" = zero hits), so it shouldn't declare it as a dependency. Newton already pins the compatible versions in its [sim] extra, so newton[sim] @ git+... is the right specifier for isaaclab_newton.
Findings
No issues found. The change is minimal, correct, and well-motivated:
- ✅
isaaclab/setup.py: Removes two lines that forced MuJoCo on PhysX/Kit users - ✅
isaaclab_newton/setup.py: Switches from direct pins tonewton[sim](single source of truth) - ✅
tools/wheel_builder/res/python_packages.toml: Same cleanup for the wheel builder - ✅ Changelogs properly categorized (
Removedfor isaaclab,Changedfor isaaclab_newton)
Test Coverage
No new tests needed — this is a build/dependency configuration change with no runtime code impact. The existing CI Build Wheel check passing confirms the dependency resolution still works.
CI Status
- Build Wheel: ✅ pass
- Check changelog fragments: ✅ pass
- pre-commit: ✅ pass
- Check for Broken Links: ❌ fail (likely unrelated)
Verdict
Ship it ✅
Clean dependency hygiene fix. Single source of truth for MuJoCo versions, no unnecessary transitive deps for PhysX/Kit users.
CI on isaaclab_tasks / isaaclab_newton failed because pip resolves `newton @ git+url` once per URL: the bare spec in isaaclab_visualizers and isaaclab_physx was processed before the `newton[sim] @ git+url` in isaaclab_newton, so the `[sim]` extra (which carries mujoco and mujoco-warp) was dropped and tests hit `ModuleNotFoundError: mujoco`. Switch every `newton @ git+...` site in source/ to `newton[sim] @ ...` so any install order pulls the MuJoCo solver deps transitively.
Greptile SummaryThis PR removes redundant
Confidence Score: 4/5Safe to merge; the change is a straightforward dependency-management cleanup with no functional code changes and a clear rationale for every decision. The core removal of mujoco from isaaclab's top-level deps is clean and correct. The switch to newton[sim] everywhere is logically sound given pip's URL-deduplication behavior. Two minor concerns are worth a second look: the version constraint on mujoco loosens from an exact pin to a compatible-release range, so future patch releases could be picked up; and the rerun/viser extras now carry a full mujoco install that those visualization backends don't actually use. source/isaaclab_visualizers/setup.py — the rerun and viser extras now transitively install mujoco/mujoco-warp; worth confirming this is intentional for all user-facing install scenarios. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["pip install isaaclab_newton[all]"] --> B["newton[sim] @ git+...@v1.2.0rc2"]
B --> C["Newton package\n(physics engine)"]
B --> D["[sim] extras\nmujoco~=3.8.0\nmujoco-warp>=3.8.0.1,~=3.8.0"]
D --> E["mujoco (latest 3.8.x)"]
D --> F["mujoco-warp (latest 3.8.x)"]
G["pip install isaaclab_physx[newton]"] --> B
H["pip install isaaclab_visualizers[newton/rerun/viser]"] --> B
I["pip install isaaclab (core only)"] --> J["No mujoco/mujoco-warp Installed"]
style D fill:#f9f,stroke:#333
style I fill:#9f9,stroke:#333
style J fill:#9f9,stroke:#333
Reviews (1): Last reviewed commit: "Use newton[sim] in all Newton declaratio..." | Re-trigger Greptile |
| "mujoco-warp==3.8.0.1", | ||
| "PyOpenGL-accelerate==3.1.10", | ||
| "newton @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", |
There was a problem hiding this comment.
Loosened mujoco/mujoco-warp version constraints
The previous explicit pins (mujoco==3.8.0, mujoco-warp==3.8.0.1) guaranteed exact reproducibility. Newton's [sim] extra specifies mujoco~=3.8.0 (compatible-release, i.e. >=3.8.0,<3.9.0) and mujoco-warp>=3.8.0.1,~=3.8.0, so a fresh install after a new 3.8.x release could resolve a different patch version than was tested. Since Newton is pinned to an immutable tag (v1.2.0rc2) the constraint itself won't change, but pip will still pick the latest matching patch from PyPI at install time. Worth confirming the team is comfortable trading bit-for-bit reproducibility for deferred version management.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "rerun-sdk>=0.29.0", | ||
| ], | ||
| "viser": [ | ||
| "newton @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@v1.2.0rc2", | ||
| "viser>=1.0.16", | ||
| ], |
There was a problem hiding this comment.
rerun and viser extras now force-install MuJoCo
Before this PR the rerun and viser extras pulled in bare newton (no MuJoCo). After, they request newton[sim], so users who install only isaaclab_visualizers[rerun] or isaaclab_visualizers[viser] will now also download mujoco and mujoco-warp — packages those visualization backends do not use directly. The PR description gives a valid pip-deduplication rationale (a bare newton @ git+URL elsewhere could shadow the [sim] extras), but it is worth documenting in the changelog or a comment why visualization-only extras now carry the full MuJoCo install.
Summary
mujocoandmujoco-warpare already declared under Newton's[sim]optional-dependency extra. Re-listing them in IsaacLab'ssetup.pywas redundant and pinned them at IsaacLab's chosen versions instead of Newton's.source/isaaclab/setup.py's top-levelINSTALL_REQUIRES, so users installing only the PhysX or Kit backends were forced to pull MuJoCo even though nothing inisaaclabcore imports it.newton[sim] @ git+...and remove the direct pins from both setup.py files plus the wheel builder manifest. Newton becomes the single source of truth for those versions.Verification
grep -rn "import mujoco\|import mujoco_warp\|MjModel\|MjData"across the repo: zero direct usages. The Newton backend usesnewton.solvers.SolverMuJoCo(transitive). MJCF asset import goes through Isaac Sim'sisaacsim.asset.importer.mjcf, not themujocoPython package.pyproject.toml[sim]extra:mujoco~=3.8.0,mujoco-warp>=3.8.0.1,~=3.8.0. Newton's compatible-release spec already covers the patch versions IsaacLab was hard-pinning../isaaclab.sh -i,cli/commands/install.py,docker/Dockerfile.*,environment.yml, rootpyproject.toml, per-packagepyproject.toml) read deps from these three files; no other version pins exist../isaaclab.sh -fpasses.Test plan
./isaaclab.sh -i --install newtoninstall resolves Newton,mujoco, andmujoco-warptransitively.tools/wheel_builderproduces wheels with the same set of MuJoCo packages as before.