Skip to content

Let isaacsim and ovphysx resolve into one environment - #6938

Open
AntoineRichard wants to merge 5 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/ovphysx-isaacsim-co-resolve
Open

Let isaacsim and ovphysx resolve into one environment#6938
AntoineRichard wants to merge 5 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/ovphysx-isaacsim-co-resolve

Conversation

@AntoineRichard

Copy link
Copy Markdown
Collaborator

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

  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have added a changelog fragment under source/isaaclab/changelog.d/
  • I have updated the tests that pinned the old behaviour (test_uv_run_pyproject.py)
  • I have verified uv sync --extra isaacsim --extra ovphysx resolves

ovphysx caps packaging at <24 while isaacsim-core pins it to ==26.0, so
the two extras were declared conflicting and uv forked the resolution.
That makes `uv run --extra isaacsim --extra ovphysx` impossible, and any
image wanting both PhysX backends had to drop one.

Both caps are stricter than the code needs. Widen the packaging override
to >=20,<27 so the two resolve together at 26.0, and drop the isaacsim /
ovphysx conflict pair.

The lock diff is large because ovphysx stops being a fork dimension and
uv rewrites resolution markers throughout, but exactly one package
changes version: packaging collapses from {23.2, 26.0} to {26.0}. All
426 packages are otherwise identical. Note that `uv lock` on unmodified
develop already produces most of this churn.

`ov` stays forked: it also pulls ovrtx, which has not been validated
alongside Isaac Sim.
@AntoineRichard
AntoineRichard requested a review from a team August 6, 2026 10:06
@github-actions github-actions Bot added isaac-lab Related to Isaac Lab team infrastructure labels Aug 6, 2026

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

The packaging override and removal of the direct isaacsim/ovphysx conflict consistently enable those extras to co-resolve. One retained conflict and its comment need clarification: teleop/ovphysx can no longer be described as inherited from isaacsim.

  • Design and architecture: Keeping ov forked because its ovrtx dependency remains unvalidated is appropriately scoped. However, the retained teleop/ovphysx conflict now requires an independent justification or removal because isaacsim itself no longer conflicts with ovphysx.
  • API: The direct --extra isaacsim --extra ovphysx compatibility surface is updated consistently through the override, conflict declaration, lockfile, and regression assertions. The behavior of --extra teleop --extra ovphysx remains restricted without a stated reason after the underlying isaacsim conflict was removed.
  • Implementation: The override and direct conflict removal agree with the updated tests. Fix the contradictory comment around the conflict list and either remove the retained teleop/ovphysx pair or document the concrete independent dependency conflict that requires it.

Minor fixes needed. Posted 1 actionable finding inline.

Automated review; human maintainers own approval decisions.

Comment thread pyproject.toml Outdated
# 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 as well, which has not been validated
# alongside Isaac Sim. ``teleop`` bundles isaacsim, so it inherits both pairs.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Suggestion · Design Architecture — Comment contradicts retained teleop/ovphysx conflict

The comment says teleop "inherits both pairs" from isaacsim, but after this diff isaacsim only conflicts with ov, so nothing is inherited for ovphysx. The retained [{ extra = "teleop" }, { extra = "ovphysx" }] entry now stands on its own and keeps --extra teleop --extra ovphysx forked, even though teleop bundles isaacsim, which co-resolves with ovphysx. Either drop that pair or document its actual independent reason.

@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR allows the isaacsim and ovphysx extras to share one environment by overriding packaging to >=20,<27 and removing their declared conflict.

  • Regenerates uv.lock so packaging resolves once at version 26.0 and rewrites the associated resolution markers.
  • Updates dependency-policy tests to preserve the merged extras and packaging override.
  • Adds a changelog fragment documenting the new co-resolution behavior.

Confidence Score: 5/5

The PR appears safe to merge because the manifest, lockfile, tests, and documented intent are consistent and no actionable failure was identified.

The changed override resolves both extras on packaging 26.0, the intended conflict alone is removed, remaining unvalidated conflicts are preserved, and the regenerated lock graph reflects those declarations without an identified broken resolution path.

Important Files Changed

Filename Overview
pyproject.toml Adds the packaging override and removes only the intended isaacsim/ovphysx conflict while retaining unvalidated ov conflicts.
source/isaaclab/test/cli/test_uv_run_pyproject.py Updates metadata assertions to require the new packaging override and merged isaacsim/ovphysx resolution.
uv.lock Regenerates the dependency graph consistently with the manifest, collapsing packaging 23.2/26.0 to 26.0 and mechanically simplifying fork markers.
source/isaaclab/changelog.d/ovphysx-isaacsim-co-resolve.rst Accurately documents the dependency-resolution change and its user-visible effect.

Reviews (1): Last reviewed commit: "Let isaacsim and ovphysx resolve into on..." | Re-trigger Greptile

usd-core and usd-exchange each vendor a complete pxr runtime built
against a different USD version (25.11 and 25.05), overlapping on 51
files including the compiled extensions. newton[importers] requires
usd-exchange without a marker, defeating the platform split declared in
project.dependencies, so both land on x86_64.

uv installs concurrently, so the per-file winner varies between
identical builds. A mixed-ABI pxr fails at import with Tf_PyEnumWrapper
has not been created yet, which made image builds intermittently
unusable.

@StafaH StafaH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's trim the comments and verbose explanation

The teleop/ovphysx pair existed only because teleop bundles isaacsim,
whose packaging cap the override now reconciles. Verified that
`uv sync --extra teleop --extra ovphysx` resolves, so the pair is
removed rather than left with a stale justification.

Also condense the override comments and the changelog fragment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

infrastructure isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants