Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -397,16 +397,19 @@ override-dependencies = [
"typing-extensions>=4.15.0",
"websockets>=14.0,<17.0.0",
"coverage>=7.6.1",
# ovphysx caps packaging at <24 and isaacsim-core pins ==26.0; both caps are
# stricter than the code needs, so widening lets them resolve together at 26.0.
"packaging>=20,<27",
# usd-exchange and usd-core each vendor a full ``pxr`` built against a different
# USD version, and newton[importers] pulls usd-exchange unmarked. Re-impose the
# platform split from [project.dependencies] so only one lands per platform.
"usd-exchange>=2.2 ; platform_machine == 'aarch64'",
]
# ovphysx pins packaging>=20,<24 while isaacsim-core pins packaging==26.0: a genuine
# two-sided incompatibility, so uv forks the resolution instead of failing. ``teleop``
# bundles isaacsim, so it inherits that pair. Every other historical conflict was an
# over-strict pin that the overrides above now reconcile.
# ``ov`` stays forked: it pulls ovrtx, which is not validated alongside Isaac Sim.
# ``teleop`` bundles isaacsim, so it inherits that pair.
conflicts = [
[{ extra = "teleop" }, { extra = "ov" }],
[{ extra = "teleop" }, { extra = "ovphysx" }],
[{ extra = "isaacsim" }, { extra = "ov" }],
[{ extra = "isaacsim" }, { extra = "ovphysx" }],
]
python-preference = "only-managed"
package = false
Expand Down
13 changes: 13 additions & 0 deletions source/isaaclab/changelog.d/ovphysx-isaacsim-co-resolve.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Changed
^^^^^^^

* Widened the ``packaging`` override to ``>=20,<27`` and removed the ``ovphysx``
conflicts with ``isaacsim`` and ``teleop``, so those extras now resolve into a
single environment.

Fixed
^^^^^

* Fixed intermittent ``pxr`` import failures by overriding ``usd-exchange`` to
aarch64 only. It and ``usd-core`` each vendor a complete ``pxr`` runtime, and
``newton[importers]`` pulled usd-exchange onto x86_64 unmarked.
12 changes: 6 additions & 6 deletions source/isaaclab/test/cli/test_uv_run_pyproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,11 @@ def test_uv_run_isaacsim_extra_handles_dependency_conflicts():

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

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