diff --git a/isaaclab.bat b/isaaclab.bat index 131c75e16e01..22c65e9516f0 100644 --- a/isaaclab.bat +++ b/isaaclab.bat @@ -41,6 +41,13 @@ if exist "%ISAACLAB_PATH%\_isaac_sim\" ( ) ) +rem Prefer omni.usd.libs over usd-core for pxr imports to avoid TfType::AddAlias +rem conflicts with ovrtx/ovphysx (see tools/setup_usd_libs.py for details). +for /f "delims=" %%d in ('"%python_exe%" "%ISAACLAB_PATH%\tools\setup_usd_libs.py"') do ( + set "PYTHONPATH=%%d;!PYTHONPATH!" + set "PATH=%%d\bin;!PATH!" +) + rem Execute CLI. "%python_exe%" -c "from isaaclab.cli import cli; cli()" %* diff --git a/isaaclab.sh b/isaaclab.sh index 941dba9e462e..bdb1cfac6906 100755 --- a/isaaclab.sh +++ b/isaaclab.sh @@ -61,5 +61,16 @@ if [ -d "$ISAACLAB_PATH/_isaac_sim" ]; then fi fi +# Prefer omni.usd.libs over usd-core for pxr imports to avoid TfType::AddAlias +# conflicts with ovrtx/ovphysx. omni.usd.libs/pxr/ is a namespace package, so +# Python ignores PYTHONPATH order and picks usd-core's regular pxr instead; writing +# a minimal __init__.py promotes it to a regular package so path order takes effect. +_ov_usd_libs_dir=$("$python_exe" "$ISAACLAB_PATH/tools/setup_usd_libs.py") +if [ -n "$_ov_usd_libs_dir" ]; then + export PYTHONPATH="$_ov_usd_libs_dir:$PYTHONPATH" + export LD_LIBRARY_PATH="$_ov_usd_libs_dir/bin:$LD_LIBRARY_PATH" +fi +unset _ov_usd_libs_dir + # Execute CLI. exec "$python_exe" -c "from isaaclab.cli import cli; cli()" "$@" diff --git a/pyproject.toml b/pyproject.toml index 315982e6cb75..3709b0c461dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,7 @@ dependencies = [ # 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 in 'x86_64 AMD64'", + "usd-core>=26.05,<27.0 ; platform_machine in 'x86_64 AMD64'", "usd-exchange>=2.2 ; platform_machine in 'aarch64 arm64'", # avoid broken hf-xet pre-release cached on NVIDIA Artifactory "hf-xet>=1.4.1,<2.0.0 ; platform_machine in 'x86_64 AMD64 aarch64 arm64'", @@ -86,7 +86,7 @@ dependencies = [ # 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", # 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", @@ -340,6 +340,10 @@ override-dependencies = [ "newton[sim,importers] @ git+https://github.com/newton-physics/newton.git@81cdcfc2dd89f8b7285e32b5e3853092a97fa6f9", # Force the Newton-matched schemas over isaacsim's ==0.2.0 pin. "newton-usd-schemas>=0.4.0", + # newton[importers] pins usd-core<26.5 in every published release and the current + # dev build; override it so uv accepts our usd-core>=26.05 requirement. + # Remove once newton publishes a release that drops the upper bound. + "usd-core>=26.05,<27.0 ; platform_machine in 'x86_64 AMD64'", "torch==2.11.0", "torchvision==0.26.0", "torchaudio==2.11.0", diff --git a/source/isaaclab/changelog.d/mataylor-golden-sim-usd.minor.rst b/source/isaaclab/changelog.d/mataylor-golden-sim-usd.minor.rst new file mode 100644 index 000000000000..b2f022bb5fc7 --- /dev/null +++ b/source/isaaclab/changelog.d/mataylor-golden-sim-usd.minor.rst @@ -0,0 +1,5 @@ +Changed +^^^^^^^ + +* Bumped ``usd-core`` dependency from ``>=25.11,<26.0`` to ``>=26.05,<27.0`` on x86_64 to resolve + a crash in ``libusd_ms`` triggered by USD physics loading (``LoadUsdPhysicsFromRange``) for kitless runs. diff --git a/source/isaaclab/test/benchmark/test_capture.py b/source/isaaclab/test/benchmark/test_capture.py index 01c3ba794a7e..5a2644bd789f 100644 --- a/source/isaaclab/test/benchmark/test_capture.py +++ b/source/isaaclab/test/benchmark/test_capture.py @@ -72,7 +72,7 @@ def test_capture_versions_preserves_runtime_packages(): StringMetadata(name="ovphysx_version", data="3.0.5"), StringMetadata(name="mujoco_version", data="3.8.1"), StringMetadata(name="cuda_bindings_version", data="12.9.4"), - StringMetadata(name="usd_core_version", data="25.11"), + StringMetadata(name="usd_core_version", data="26.05"), StringMetadata(name="isaaclab_release_version", data="3.0.0"), ] bm = _Bm({"VersionInfo": _Rec(MeasurementData(measurements=[], metadata=md, artefacts=[]))}) @@ -89,7 +89,7 @@ def test_capture_versions_preserves_runtime_packages(): assert versions.ovphysx == "3.0.5" assert versions.mujoco == "3.8.1" assert versions.cuda_bindings == "12.9.4" - assert versions.usd_core == "25.11" + assert versions.usd_core == "26.05" assert versions.isaaclab_release == "3.0.0" diff --git a/source/isaaclab/test/cli/test_setup_usd_libs.py b/source/isaaclab/test/cli/test_setup_usd_libs.py new file mode 100644 index 000000000000..7dc59b3bd59b --- /dev/null +++ b/source/isaaclab/test/cli/test_setup_usd_libs.py @@ -0,0 +1,186 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Tests for tools/setup_usd_libs.py. + +Covers two Isaac Sim install layouts: + +* **Symlink / binary install** — ``ISAACLAB_PATH/_isaac_sim/extscache/omni.usd.libs-/`` +* **Wheel / pip install** — ``isaacsim`` package on ``sys.path``; ``extscache`` lives next + to the package ``__init__.py``. + +Each test runs the script as a subprocess so the module-level code executes in a +clean interpreter. +""" + +from __future__ import annotations + +import os +import sys +from pathlib import Path + +import pytest + +pytestmark = pytest.mark.unit + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _script_path() -> Path: + for parent in Path(__file__).resolve().parents: + candidate = parent / "tools" / "setup_usd_libs.py" + if candidate.is_file(): + return candidate + raise RuntimeError("Could not find tools/setup_usd_libs.py") + + +def _run(env_overrides: dict[str, str], tmp_path: Path) -> tuple[int, str, str]: + """Run setup_usd_libs.py as a subprocess and return (returncode, stdout, stderr).""" + import subprocess + + env = {**os.environ, **env_overrides} + result = subprocess.run( + [sys.executable, str(_script_path())], + capture_output=True, + text=True, + env=env, + ) + return result.returncode, result.stdout, result.stderr + + +def _make_usd_libs(base: Path, version: str = "26.05.0") -> Path: + """Create a minimal omni.usd.libs extension directory under *base*/extscache.""" + usd_libs = base / "extscache" / f"omni.usd.libs-{version}" + (usd_libs / "pxr").mkdir(parents=True) + return usd_libs + + +# --------------------------------------------------------------------------- +# Symlink / binary install +# --------------------------------------------------------------------------- + + +class TestSymlinkInstall: + """ISAACLAB_PATH/_isaac_sim/extscache layout (binary / developer install).""" + + def _isaaclab_env(self, tmp_path: Path) -> dict[str, str]: + return {"ISAACLAB_PATH": str(tmp_path), "PYTHONPATH": ""} + + def test_prints_usd_libs_dir(self, tmp_path: Path) -> None: + """Script prints the usd_libs_dir path when omni.usd.libs exists.""" + usd_libs = _make_usd_libs(tmp_path / "_isaac_sim") + + rc, stdout, _ = _run(self._isaaclab_env(tmp_path), tmp_path) + + assert rc == 0 + assert stdout == str(usd_libs) + + def test_creates_pxr_init_when_missing(self, tmp_path: Path) -> None: + """Script creates pxr/__init__.py so the directory becomes an importable package.""" + usd_libs = _make_usd_libs(tmp_path / "_isaac_sim") + + _run(self._isaaclab_env(tmp_path), tmp_path) + + assert (usd_libs / "pxr" / "__init__.py").is_file() + + def test_leaves_existing_pxr_init_intact(self, tmp_path: Path) -> None: + """Script does not overwrite an existing pxr/__init__.py.""" + usd_libs = _make_usd_libs(tmp_path / "_isaac_sim") + init_py = usd_libs / "pxr" / "__init__.py" + init_py.write_text("# sentinel") + + _run(self._isaaclab_env(tmp_path), tmp_path) + + assert init_py.read_text() == "# sentinel" + + def test_picks_latest_version(self, tmp_path: Path) -> None: + """Script selects the lexicographically last omni.usd.libs version.""" + _make_usd_libs(tmp_path / "_isaac_sim", "25.11.0") + newer = _make_usd_libs(tmp_path / "_isaac_sim", "26.05.0") + + _, stdout, _ = _run(self._isaaclab_env(tmp_path), tmp_path) + + assert stdout == str(newer) + + def test_no_usd_libs_produces_no_output(self, tmp_path: Path) -> None: + """Script exits 0 with no stdout when extscache has no omni.usd.libs dirs.""" + (tmp_path / "_isaac_sim" / "extscache").mkdir(parents=True) + + rc, stdout, _ = _run(self._isaaclab_env(tmp_path), tmp_path) + + assert rc == 0 + assert stdout == "" + + @pytest.mark.skipif(sys.platform == "win32", reason="chmod semantics differ on Windows") + def test_readonly_pxr_dir_warns_and_exits_cleanly(self, tmp_path: Path) -> None: + """Script emits [WARNING] to stderr and exits 0 when pxr/ is not writable.""" + usd_libs = _make_usd_libs(tmp_path / "_isaac_sim") + pxr_dir = usd_libs / "pxr" + pxr_dir.chmod(0o555) + + try: + rc, _, stderr = _run(self._isaaclab_env(tmp_path), tmp_path) + finally: + pxr_dir.chmod(0o755) + + assert rc == 0 + assert "[WARNING]" in stderr + + +# --------------------------------------------------------------------------- +# Wheel / pip install +# --------------------------------------------------------------------------- + + +class TestWheelInstall: + """Wheel install layout: isaacsim on sys.path, extscache next to __init__.py.""" + + def _wheel_env(self, isaacsim_site: Path) -> dict[str, str]: + """Environment that hides the symlink path and exposes a fake isaacsim package.""" + existing = os.environ.get("PYTHONPATH", "") + pythonpath = str(isaacsim_site) + (os.pathsep + existing if existing else "") + return { + "ISAACLAB_PATH": "", # no _isaac_sim symlink + "PYTHONPATH": pythonpath, + } + + def _make_fake_isaacsim(self, base: Path, version: str = "26.05.0") -> Path: + """Create a minimal fake isaacsim package with an extscache directory.""" + pkg = base / "isaacsim" + pkg.mkdir(parents=True, exist_ok=True) + (pkg / "__init__.py").write_text("") + return _make_usd_libs(pkg, version) + + def test_prints_usd_libs_dir(self, tmp_path: Path) -> None: + """Script finds omni.usd.libs via importlib.util.find_spec when no symlink exists.""" + usd_libs = self._make_fake_isaacsim(tmp_path) + + rc, stdout, _ = _run(self._wheel_env(tmp_path), tmp_path) + + assert rc == 0 + assert stdout == str(usd_libs) + + def test_creates_pxr_init_when_missing(self, tmp_path: Path) -> None: + """Script promotes pxr/ to a package in the wheel-install layout too.""" + usd_libs = self._make_fake_isaacsim(tmp_path) + + _run(self._wheel_env(tmp_path), tmp_path) + + assert (usd_libs / "pxr" / "__init__.py").is_file() + + def test_picks_latest_version(self, tmp_path: Path) -> None: + """Script selects the latest omni.usd.libs in the wheel extscache.""" + pkg = tmp_path / "isaacsim" + pkg.mkdir(parents=True) + (pkg / "__init__.py").write_text("") + _make_usd_libs(pkg, "25.11.0") + newer = _make_usd_libs(pkg, "26.05.0") + + _, stdout, _ = _run(self._wheel_env(tmp_path), tmp_path) + + assert stdout == str(newer) diff --git a/source/isaaclab/test/cli/test_source_package_metadata.py b/source/isaaclab/test/cli/test_source_package_metadata.py index 5f2ff176899f..eb27a261b544 100644 --- a/source/isaaclab/test/cli/test_source_package_metadata.py +++ b/source/isaaclab/test/cli/test_source_package_metadata.py @@ -23,18 +23,6 @@ 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.""" - 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 in 'x86_64 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: diff --git a/source/isaaclab/test/cli/test_uv_run_pyproject.py b/source/isaaclab/test/cli/test_uv_run_pyproject.py index b87894fa8bf6..cfd1ff034403 100644 --- a/source/isaaclab/test/cli/test_uv_run_pyproject.py +++ b/source/isaaclab/test/cli/test_uv_run_pyproject.py @@ -153,7 +153,7 @@ def test_uv_run_base_dependencies_cover_newton_rsl_rl_training(): # 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) + assert any(dep.startswith("newton[sim]") for dep in dependencies) assert any(dep.startswith("rsl-rl-lib") for dep in dependencies) diff --git a/tools/setup_usd_libs.py b/tools/setup_usd_libs.py new file mode 100644 index 000000000000..c0baee26a233 --- /dev/null +++ b/tools/setup_usd_libs.py @@ -0,0 +1,52 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Locate omni.usd.libs and promote its pxr package to a regular package. + +Prints the extension directory to stdout on success, nothing on failure. +Called by isaaclab.sh / isaaclab.bat to populate PYTHONPATH / LD_LIBRARY_PATH. +""" + +import glob +import importlib.util +import os +import sys + + +def _find_extscache() -> str: + # Binary / symlink install: ISAACLAB_PATH/_isaac_sim/extscache. + # Only probe when ISAACLAB_PATH is set; an empty value would produce a + # relative path that resolves against CWD and may accidentally match a + # _isaac_sim symlink in an unrelated working directory. + isaaclab_path = os.environ.get("ISAACLAB_PATH", "") + if isaaclab_path: + symlink_path = os.path.join(isaaclab_path, "_isaac_sim", "extscache") + if os.path.isdir(symlink_path): + return symlink_path + + # Wheel / pip install: locate the isaacsim package without importing it so + # that this script can run before PYTHONPATH is fully configured. + spec = importlib.util.find_spec("isaacsim") + if spec is not None and spec.origin: + return os.path.join(os.path.dirname(spec.origin), "extscache") + + return "" + + +extscache = _find_extscache() +candidates = sorted(glob.glob(os.path.join(extscache, "omni.usd.libs-*"))) if extscache else [] +if candidates: + usd_libs_dir = candidates[-1] + init_py = os.path.join(usd_libs_dir, "pxr", "__init__.py") + if os.path.exists(os.path.join(usd_libs_dir, "pxr")) and not os.path.isfile(init_py): + try: + open(init_py, "w").close() + except OSError as exc: + print( + f"[WARNING] Cannot promote omni.usd.libs/pxr to a regular package; skipping USD path setup: {exc}", + file=sys.stderr, + ) + sys.exit(0) + print(usd_libs_dir, end="") diff --git a/uv.lock b/uv.lock index 52e48e0304cb..7898817dda4c 100644 --- a/uv.lock +++ b/uv.lock @@ -119,6 +119,7 @@ overrides = [ { name = "torchvision", marker = "platform_machine == 'arm64' and sys_platform == 'linux'", specifier = "==0.26.0", index = "https://download.pytorch.org/whl/cu130" }, { name = "torchvision", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = "==0.26.0", index = "https://download.pytorch.org/whl/cu128" }, { name = "torchvision", marker = "sys_platform == 'win32'", specifier = "==0.26.0", index = "https://download.pytorch.org/whl/cu128" }, + { name = "usd-core", marker = "platform_machine in 'x86_64 AMD64'", specifier = ">=26.5,<27.0" }, ] [[package]] @@ -2971,7 +2972,7 @@ requires-dist = [ { name = "lazy-loader", specifier = ">=0.4" }, { name = "matplotlib", specifier = ">=3.10.3" }, { name = "moviepy", specifier = ">=1.0.3,<2.0.0.dev0" }, - { name = "newton", extras = ["sim", "importers"], specifier = ">=1.2.0" }, + { name = "newton", extras = ["sim"], specifier = ">=1.2.0" }, { name = "newton-usd-schemas", specifier = ">=0.2.0" }, { name = "numba", specifier = ">=0.63.1" }, { name = "numpy", specifier = ">=2" }, @@ -3034,7 +3035,7 @@ requires-dist = [ { name = "transformers", specifier = "==4.57.6" }, { name = "trimesh" }, { name = "typing-extensions", specifier = ">=4.12.2" }, - { name = "usd-core", marker = "platform_machine in 'x86_64 AMD64'", specifier = ">=25.11,<26.0" }, + { name = "usd-core", marker = "platform_machine in 'x86_64 AMD64'", specifier = ">=26.5,<27.0" }, { name = "usd-exchange", marker = "platform_machine in 'aarch64 arm64'", specifier = ">=2.2" }, { name = "viser", marker = "extra == 'viser'", specifier = ">=1.0.16" }, { name = "warp-lang", specifier = "==1.15.0.dev20260626" }, @@ -4549,7 +4550,7 @@ importers = [ { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-12-isaaclab-dev-all' or extra != 'extra-12-isaaclab-dev-isaacsim' or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-mimic') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-ov') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-test') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-viser')" }, { name = "trimesh", version = "4.11.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-12-isaaclab-dev-isaacsim' or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-mimic' and extra == 'extra-12-isaaclab-dev-teleop')" }, { name = "trimesh", version = "4.12.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-12-isaaclab-dev-all' or extra != 'extra-12-isaaclab-dev-isaacsim' or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-mimic') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-ov') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-test') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-viser')" }, - { name = "usd-core", marker = "platform_machine != 'aarch64' or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-isaacsim') or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-mimic') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-ov') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-test') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-viser') or (extra == 'extra-12-isaaclab-dev-mimic' and extra == 'extra-12-isaaclab-dev-teleop')" }, + { name = "usd-core", marker = "platform_machine in 'x86_64 AMD64' or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-isaacsim') or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-mimic') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-ov') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-test') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-viser') or (extra == 'extra-12-isaaclab-dev-mimic' and extra == 'extra-12-isaaclab-dev-teleop')" }, { name = "usd-exchange", marker = "platform_machine == 'aarch64' or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-isaacsim') or (extra == 'extra-12-isaaclab-dev-all' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-mimic') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-ov') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-teleop') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-test') or (extra == 'extra-12-isaaclab-dev-isaacsim' and extra == 'extra-12-isaaclab-dev-viser') or (extra == 'extra-12-isaaclab-dev-mimic' and extra == 'extra-12-isaaclab-dev-teleop')" }, ] sim = [ @@ -7930,12 +7931,12 @@ wheels = [ [[package]] name = "usd-core" -version = "25.11" +version = "26.8" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/a4/92db335084f0de14b5d4e1800b847057e3ef36bdbb211e5617f3d9940e92/usd_core-25.11-cp312-none-macosx_10_9_universal2.whl", hash = "sha256:bbf89d0671e0773b957a5a3a3e0178e13d4318d46fd8201fcf1d87e3d5501556", size = 38511379, upload-time = "2025-10-24T19:01:24.506Z" }, - { url = "https://files.pythonhosted.org/packages/ed/f1/dbf18bee5b569a06119f0cde798daeef4837887594a0caf415eb1d75112a/usd_core-25.11-cp312-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c05c05150f6c4598e0738677f0b7c8f82ff9fc492d040ed78147eb1ad5ce8545", size = 27393145, upload-time = "2025-10-24T19:01:27.841Z" }, - { url = "https://files.pythonhosted.org/packages/48/34/dd9883f27526288de19741100cb5b75f2725423367a999c055a677d1d88a/usd_core-25.11-cp312-none-win_amd64.whl", hash = "sha256:7bc5aaad20287bfc821e73e2ced99123e448e40ffd018acf99b09975eab4012d", size = 13061673, upload-time = "2025-10-24T19:01:30.396Z" }, + { url = "https://files.pythonhosted.org/packages/97/44/fb780d02b04bbebc410bfb6decccc66aec07fb0322172ad019c4579ad80a/usd_core-26.8-cp312-none-macosx_10_15_universal2.whl", hash = "sha256:aaf1a68bf4c7ab959b9f4d3a6e0ef9347ff6135a1452676bb40916060146c53e", size = 40698020, upload-time = "2026-07-20T14:32:20.788Z" }, + { url = "https://files.pythonhosted.org/packages/19/0b/efe5c0d7c273149ac94083831e5b36649925a621a73cd2ddf9616e160c8c/usd_core-26.8-cp312-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:204fb1ef1fc977b827c491f4e9fa39b57518504ed0cacfe12e026e95123cacf1", size = 29530957, upload-time = "2026-07-20T14:32:24.255Z" }, + { url = "https://files.pythonhosted.org/packages/79/d3/749edc4d2eea3ffb94aa0526d5da6f4a3f185ef7004ceeb6b5ecdb6a0c68/usd_core-26.8-cp312-none-win_amd64.whl", hash = "sha256:6db0031224b718cae53e4b19ecd80aea0a7ed4348e330fd82ccfbdc9b8b311ed", size = 13887898, upload-time = "2026-07-20T14:32:27.452Z" }, ] [[package]]