Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
30 changes: 20 additions & 10 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ dependencies = [
"protobuf>=4.25.8,!=5.26.0",
"hidapi>=0.14.0",
"gymnasium>=1.2.0",
"trimesh",
"trimesh>=4.6.8",
"pyglet>=2.1.6,<3",
"transformers==4.57.6",
"einops",
Expand All @@ -67,11 +67,10 @@ dependencies = [
"pin ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')",
"pin-pink==3.3.0 ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')",
"daqp==0.8.5 ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')",
# OpenUSD (kit-less mode). Both packages vendor a complete ``pxr`` runtime, so
# they must never co-install: usd-core supplies pxr where it has wheels (x86_64),
# usd-exchange supplies it on aarch64 (where usd-core has no wheel).
"usd-core>=25.11,<26.0 ; platform_machine == 'x86_64' or platform_machine == 'AMD64'",
"usd-exchange>=2.2 ; platform_machine == 'aarch64'",
# OpenUSD (kit-less mode). Use the same provider required by the URDF importer
# packages so another complete ``pxr`` runtime cannot co-install with it.
# usd-exchange 2.3.0 vendors USD 25.5, matching the Isaac Sim 6.0 wheel stack.
"usd-exchange==2.3.0",
# avoid broken hf-xet pre-release cached on NVIDIA Artifactory
"hf-xet>=1.4.1,<2.0.0 ; platform_machine == 'x86_64' or platform_machine == 'AMD64' or platform_machine == 'aarch64'",
# ----- tasks -----
Expand All @@ -87,9 +86,19 @@ dependencies = [
# ----- newton (default physics engine) -----
# Loose bound so the wheel co-resolves with isaacsim's newton[sim]==1.2.0 pin; the
# exact git commit is forced via [tool.uv].override-dependencies (uv sync only).
# The importers extra carries the mesh-processing deps (coacd, fast-simplification,
# ...) that honoring USD-authored ``physics:approximation`` requires.
"newton[sim,importers]>=1.2.0",
"newton[sim]>=1.2.0",
# Import and mesh-processing packages used by Newton. Keep these explicit instead
# of selecting newton[importers], whose standalone USD dependency would overlap
# with usd-exchange.
"requests>=2.25.0",
"scipy>=1.11.0",
"coacd>=1.0.7",
"fast-simplification>=0.1.11",
"alphashape>=1.3.1",
"meshio>=5.3.5",
"pycollada>=0.9",
"resolve-robotics-uri-py>=0.4.0",
"open3d>=0.19.0 ; python_version < '3.13' and (sys_platform != 'linux' or platform_machine != 'aarch64')",
# Loose bound co-resolves with isaacsim's ==0.2.0; the override below forces >=0.4.0.
"newton-usd-schemas>=0.2.0",
"PyOpenGL-accelerate>=3.1.0",
Expand Down Expand Up @@ -195,6 +204,7 @@ leapp = [
# ``test_version_single_source`` fails CI if they drift.
[tool.isaaclab.versions]
isaacsim = "6.0.1.0"
usd_exchange = "2.3.0"
torch = "2.11.0"
torchvision = "0.26.0"
torchaudio = "2.11.0"
Expand Down Expand Up @@ -383,7 +393,7 @@ override-dependencies = [
"numpy>=2",
"mujoco~=3.10.0",
"mujoco-warp~=3.10.0,>=3.10.0.2",
"newton[sim,importers] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479",
"newton[sim] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479",
# Force the Newton-matched schemas over isaacsim's ==0.2.0 pin.
"newton-usd-schemas>=0.4.0",
"torch==2.11.0",
Expand Down
6 changes: 6 additions & 0 deletions source/isaaclab/changelog.d/kellyguo11-use-usd-exchange.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Fixed
^^^^^

* Fixed installation failures caused by overlapping standalone USD providers by using
``usd-exchange`` on all supported platforms and installing required Newton mesh-processing
packages directly.
2 changes: 1 addition & 1 deletion source/isaaclab/test/cli/test_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def fake_run(cmd, *args, **kwargs):
install_cmds = [cmd for cmd in calls if "install" in cmd]
assert install_cmds, "expected a pip install call"
install_args = install_cmds[-1]
assert any(arg.startswith("newton[sim,importers]") and arg.endswith(commit) for arg in install_args)
assert any(arg.startswith("newton[sim]") and arg.endswith(commit) for arg in install_args)
assert any(arg.startswith("newton-usd-schemas") for arg in install_args), "schemas must be forced too"

def test_skips_when_commit_already_installed(self):
Expand Down
18 changes: 4 additions & 14 deletions source/isaaclab/test/cli/test_source_package_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,17 @@ def _repo_root() -> Path:
raise RuntimeError("Could not find Isaac Lab repository root.")


def test_isaaclab_usd_core_pin_stays_on_isaacsim_compatible_usd25_abi():
"""The kit-less USD package must stay on the Isaac Sim compatible USD 25 ABI."""
def test_isaaclab_uses_one_standalone_usd_provider():
"""Isaac Lab must install only the USD provider shared with its importer dependencies."""
with (_repo_root() / "pyproject.toml").open("rb") as f:
pyproject = tomllib.load(f)

usd_core_dependencies = [
dependency for dependency in pyproject["project"]["dependencies"] if dependency.startswith("usd-core")
]

assert usd_core_dependencies == [
"usd-core>=25.11,<26.0 ; platform_machine == 'x86_64' or platform_machine == 'AMD64'"
]


def test_isaaclab_standalone_usd_providers_are_platform_disjoint():
"""Standalone USD packages must not overlap on platforms where both ship ``pxr``."""
with (_repo_root() / "pyproject.toml").open("rb") as f:
pyproject = tomllib.load(f)

usd_exchange_dependencies = [
dependency for dependency in pyproject["project"]["dependencies"] if dependency.startswith("usd-exchange")
]

assert usd_exchange_dependencies == ["usd-exchange>=2.2 ; platform_machine == 'aarch64'"]
assert usd_core_dependencies == []
assert usd_exchange_dependencies == [f"usd-exchange=={pyproject['tool']['isaaclab']['versions']['usd_exchange']}"]
10 changes: 7 additions & 3 deletions source/isaaclab/test/cli/test_uv_run_pyproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ def test_version_single_source_matches_literal_pins():

assert versions["ovphysx"] == "0.5.9"
assert "omniverseclient==2.72.3" in dependencies
assert f"usd-exchange=={versions['usd_exchange']}" in dependencies

# Isaac Sim extra mirrors the table.
assert optional["isaacsim"] == [f"isaacsim[all,extscache]=={versions['isaacsim']}"]
Expand Down Expand Up @@ -199,9 +200,12 @@ def test_uv_run_base_dependencies_cover_newton_rsl_rl_training():
dependencies = _root_pyproject()["project"]["dependencies"]

# Newton is the default physics engine and RSL-RL the default training library,
# so both ship as core third-party requirements (not opt-in extras). The importers
# extra carries the mesh-processing deps that authored collision approximations need.
assert any(dep.startswith("newton[sim,importers]") for dep in dependencies)
# so both ship as core third-party requirements (not opt-in extras). Keep the
# required mesh-processing packages explicit so Newton's importer extra does not
# select a second standalone USD provider.
assert any(dep.startswith("newton[sim]") for dep in dependencies)
assert any(dep.startswith("coacd") for dep in dependencies)
assert any(dep.startswith("fast-simplification") for dep in dependencies)
assert any(dep.startswith("rsl-rl-lib") for dep in dependencies)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ def test_install_core_omits_optional_submodules(self, isaaclab_root):
@pytest.mark.slow
@pytest.mark.timeout(1800)
def test_install_core_provides_newton_importer_dependencies(self, isaaclab_root):
"""Newton's mesh-processing deps ship with -i core (via newton[sim,importers]).
"""Newton's required mesh-processing dependencies ship with ``-i core``.

Without them, Newton warns and falls back to a single convex hull instead of
honoring an authored ``physics:approximation`` (behavior is unit-tested in
Expand Down
2 changes: 1 addition & 1 deletion source/isaaclab/test/install_ci/uv_pip/uv-overrides.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
numpy>=2
mujoco~=3.10.0
mujoco-warp~=3.10.0,>=3.10.0.2
newton[sim,importers] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479
newton[sim] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479
newton-usd-schemas>=0.4.0
torch==2.11.0
torchvision==0.26.0
Expand Down
2 changes: 1 addition & 1 deletion tools/wheel_builder/uv-overrides.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
numpy>=2
mujoco~=3.10.0
mujoco-warp~=3.10.0,>=3.10.0.2
newton[sim,importers] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479
newton[sim] @ git+https://github.com/newton-physics/newton.git@831076f52f14612aecace894c81270c1e0ed9479
newton-usd-schemas>=0.4.0
torch==2.11.0
torchvision==0.26.0
Expand Down
Loading
Loading