Skip to content

Commit c6e817a

Browse files
Let isaacsim and ovphysx resolve into one environment (#6938)
# Description `ovphysx` caps `packaging` at `<24` while `isaacsim-core` pins it to `==26.0`, so the two extras are declared conflicting and uv forks the resolution. That makes `uv run --extra isaacsim --extra ovphysx` impossible: an environment can have Isaac Sim **or** OvPhysX, never both. Any image that wants to exercise both PhysX backends has to build twice or drop one. Both caps are stricter than the code needs. This widens the `packaging` override to `>=20,<27` so the two resolve together at `26.0`, and drops the `isaacsim` / `ovphysx` conflict pair. Validated empirically: **119 of 120 OvPhysX training rows completed** on a benchmark image built with both extras in a single environment at `packaging==26.0` (the one failure was unrelated). OvPhysX does not exercise anything that its `<24` cap protects. `ov` stays forked — it also pulls `ovrtx`, which has not been validated alongside Isaac Sim. Scope is deliberately limited to the pair with evidence behind it. ## On the lock diff It is large, and almost all of it is mechanical. Once `ovphysx` stops being a fork dimension, uv rewrites resolution markers across every package, dropping the `extra == '...-ovphysx'` conjunctions. Exactly one package changes version: ``` packages before: 426 after: 426 packages whose version set differs: 1 packaging: ['23.2', '26.0'] -> ['26.0'] ``` Nothing is upgraded, downgraded, added, or removed. Note also that running `uv lock` on unmodified `develop` already produces ~2570 lines of churn on its own, so a portion of this diff is pre-existing staleness rather than a consequence of this change. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have added a changelog fragment under `source/isaaclab/changelog.d/` - [x] I have updated the tests that pinned the old behaviour (`test_uv_run_pyproject.py`) - [x] I have verified `uv sync --extra isaacsim --extra ovphysx` resolves --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Kelly Guo <kellyguo123@hotmail.com>
1 parent f74ee31 commit c6e817a

6 files changed

Lines changed: 1053 additions & 1092 deletions

File tree

pyproject.toml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,16 +398,19 @@ override-dependencies = [
398398
"typing-extensions>=4.15.0",
399399
"websockets>=14.0,<17.0.0",
400400
"coverage>=7.6.1",
401+
# ovphysx caps packaging at <24 and isaacsim-core pins ==26.0; both caps are
402+
# stricter than the code needs, so widening lets them resolve together at 26.0.
403+
"packaging>=20,<27",
404+
# usd-exchange and usd-core each vendor a full ``pxr`` built against a different
405+
# USD version, and newton[importers] pulls usd-exchange unmarked. Re-impose the
406+
# platform split from [project.dependencies] so only one lands per platform.
407+
"usd-exchange>=2.2 ; platform_machine == 'aarch64'",
401408
]
402-
# ovphysx pins packaging>=20,<24 while isaacsim-core pins packaging==26.0: a genuine
403-
# two-sided incompatibility, so uv forks the resolution instead of failing. ``teleop``
404-
# bundles isaacsim, so it inherits that pair. Every other historical conflict was an
405-
# over-strict pin that the overrides above now reconcile.
409+
# ``ov`` stays forked: it pulls ovrtx, which is not validated alongside Isaac Sim.
410+
# ``teleop`` bundles isaacsim, so it inherits that pair.
406411
conflicts = [
407412
[{ extra = "teleop" }, { extra = "ov" }],
408-
[{ extra = "teleop" }, { extra = "ovphysx" }],
409413
[{ extra = "isaacsim" }, { extra = "ov" }],
410-
[{ extra = "isaacsim" }, { extra = "ovphysx" }],
411414
]
412415
python-preference = "only-managed"
413416
package = false
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Changed
2+
^^^^^^^
3+
4+
* Widened the ``packaging`` override to ``>=20,<27`` and removed the ``ovphysx``
5+
conflicts with ``isaacsim`` and ``teleop``, so those extras now resolve into a
6+
single environment.
7+
8+
Fixed
9+
^^^^^
10+
11+
* Fixed intermittent ``pxr`` import failures by overriding ``usd-exchange`` to
12+
aarch64 only. It and ``usd-core`` each vendor a complete ``pxr`` runtime, and
13+
``newton[importers]`` pulled usd-exchange onto x86_64 unmarked.

source/isaaclab/test/cli/test_uv_run_pyproject.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,11 @@ def test_uv_run_isaacsim_extra_handles_dependency_conflicts():
188188

189189
# isaacsim is forked away from extras whose pins cannot be safely overridden.
190190
conflict_groups = [{entry["extra"] for entry in group} for group in pyproject["tool"]["uv"]["conflicts"]]
191-
for extra in ("ov", "ovphysx"):
192-
assert {"isaacsim", extra} in conflict_groups, f"isaacsim must declare a conflict with '{extra}'"
191+
assert {"isaacsim", "ov"} in conflict_groups, "isaacsim must declare a conflict with 'ov'"
193192
assert {"isaacsim", "all"} not in conflict_groups
193+
# ovphysx no longer clashes: the packaging override reconciles it.
194+
assert {"isaacsim", "ovphysx"} not in conflict_groups
195+
assert "packaging>=20,<27" in pyproject["tool"]["uv"]["override-dependencies"]
194196
# ``test`` is no longer forked away: the coverage override reconciles it with Isaac Sim.
195197
assert {"isaacsim", "test"} not in conflict_groups
196198
# ``mimic`` is no longer forked away either: robomimic dropped its lxml constraint, so
@@ -239,10 +241,8 @@ def test_uv_run_teleop_extra_bundles_isaacsim():
239241
assert not any(dep.startswith("robomimic") for dep in teleop)
240242

241243
conflict_groups = [{entry["extra"] for entry in group} for group in pyproject["tool"]["uv"]["conflicts"]]
242-
# Only the packaging split is real; the overrides reconcile everything else.
243-
for extra in ("ov", "ovphysx"):
244-
assert {"teleop", extra} in conflict_groups, f"teleop must declare a conflict with '{extra}'"
245-
for extra in ("mimic", "all", "viser", "test"):
244+
assert {"teleop", "ov"} in conflict_groups, "teleop must declare a conflict with 'ov'"
245+
for extra in ("mimic", "all", "viser", "test", "ovphysx"):
246246
assert {"teleop", extra} not in conflict_groups
247247
# ``--extra teleop --extra test`` must keep working so the teleop suite stays runnable.
248248
assert {"teleop", "test"} not in conflict_groups

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ torchaudio==2.11.0
99
typing-extensions>=4.15.0
1010
websockets>=14.0,<17.0.0
1111
coverage>=7.6.1
12+
packaging>=20,<27
13+
usd-exchange>=2.2 ; platform_machine == 'aarch64'

tools/wheel_builder/uv-overrides.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ torchaudio==2.11.0
99
typing-extensions>=4.15.0
1010
websockets>=14.0,<17.0.0
1111
coverage>=7.6.1
12+
packaging>=20,<27
13+
usd-exchange>=2.2 ; platform_machine == 'aarch64'

0 commit comments

Comments
 (0)