Skip to content

Cherry-pick Antoine PRs to release/3.0.0-beta2#5965

Merged
AntoineRichard merged 7 commits into
isaac-sim:release/3.0.0-beta2from
AntoineRichard:antoine/cherry-pick-latest-prs-beta2
Jun 5, 2026
Merged

Cherry-pick Antoine PRs to release/3.0.0-beta2#5965
AntoineRichard merged 7 commits into
isaac-sim:release/3.0.0-beta2from
AntoineRichard:antoine/cherry-pick-latest-prs-beta2

Conversation

@AntoineRichard
Copy link
Copy Markdown
Collaborator

@AntoineRichard AntoineRichard commented Jun 4, 2026

Summary

Cherry-picked these merged PRs from develop to release/3.0.0-beta2:

Release-Branch Notes

Verification

  • ./isaaclab.sh -f
  • ./isaaclab.sh -p tools/changelog/cli.py check release/3.0.0-beta2
  • ./isaaclab.sh -p -m pytest source/isaaclab/test/test_scripts_torcharray_patterns.py
  • ./isaaclab.sh -p -c "from pathlib import Path; import ast; ast.parse(Path('source/isaaclab/isaaclab/cloner/__init__.pyi').read_text()); print('cloner stub syntax ok')"

## Summary
- Enabled the Spot Newton MJWarp preset to use the Newton collision
pipeline instead of MuJoCo contacts.
- Increased Spot MJWarp constraint/contact capacity and set the Newton
shape margin used by other rough-terrain locomotion presets.

## Test Plan
- [x] `./isaaclab.sh -p -c "from
isaaclab_tasks.core.velocity.config.spot.flat_env_cfg import PhysicsCfg;
cfg = PhysicsCfg().newton_mjwarp; print(cfg.solver_cfg.njmax,
cfg.solver_cfg.nconmax, cfg.solver_cfg.use_mujoco_contacts,
cfg.collision_cfg.max_triangle_pairs, cfg.default_shape_cfg.margin)"`
- [x] `SKIP=check-git-lfs-pointers ./isaaclab.sh -f`
- [ ] `./isaaclab.sh -f` (blocked locally because `git-lfs` is not
installed)

(cherry picked from commit d7e852e)
- Pins the OVPhysX optional runtime dependency to `ovphysx==0.4.13`.
- Pins CI direct OV runtime installs to the same `ovphysx` version.
- Adds an `isaaclab_ovphysx` changelog fragment.

- `PATH=/tmp/git-lfs-local/root/usr/bin:$PATH ./isaaclab.sh -f`
- `./isaaclab.sh -p tools/changelog/cli.py check develop`
- `./isaaclab.sh -p -c "import tomllib;
tomllib.load(open(\"source/isaaclab_ovphysx/pyproject.toml\",\"rb\"));
tomllib.load(open(\"pyproject.toml\",\"rb\")); print(\"toml ok\")"`

No tests added per request.

(cherry picked from commit 7e54511)
## Summary

- Removed `scripts/tools/wrap_warp_to_torch.py`, which is obsolete now
that `ProxyArray` exposes explicit `.torch` access.
- Removed the ProxyArray static scanner exemption for the deleted
helper.
- Added an `isaaclab` changelog fragment for the removal.

## Test Plan

- [x] `./isaaclab.sh -p -m pytest
source/isaaclab/test/test_scripts_torcharray_patterns.py`
- [x] `env PATH=/tmp/git-lfs-3.7.1/git-lfs-3.7.1:$PATH ./isaaclab.sh -f`
- [x] `rg -n "wrap_warp_to_torch|wrap_warp_to_py" docs --glob '!core'`
returned no matches

Closes isaac-sim#5057

(cherry picked from commit ac7fd8a)
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team infrastructure labels Jun 4, 2026
Copy link
Copy Markdown

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

Choose a reason for hiding this comment

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

🤖 Isaac Lab Review Bot

Summary

Cherry-pick of 5 PRs from develop to release/3.0.0-beta2:

  • #5940 – Enable Spot Newton MJWarp preset (Newton collision pipeline, increased capacity/margin)
  • #5959 – Pin ovphysx==0.4.13 runtime dependency
  • #5924 – Remove obsolete wrap_warp_to_torch.py migration helper
  • #5956 – Deprecate MJWarpSolverCfg.ls_parallel (kept as ignored compat field with deprecation warning)
  • #5923 – Fix pre-trained policy action grad leak (benchmark wrapped with torch.inference_mode())

The PR also notes a cherry-pick conflict resolution for #5959: the release branch setup.py packaging path was preserved while applying the ovphysx==0.4.13 pin.

Cherry-Pick Correctness

  • ✅ No merge conflict markers (<<<<<<<, =======, >>>>>>>) found in the diff
  • ✅ All 33 files changed cleanly — removals of ls_parallel usage are consistent across all task configs, tests, and documentation
  • ✅ The ls_parallel field is properly deprecated (kept with __post_init__ warning + ignored in _build_solver) rather than hard-removed, preserving backward compatibility
  • ✅ Changelog fragments added for all affected packages (isaaclab, isaaclab_newton, isaaclab_contrib, isaaclab_tasks, isaaclab_tasks_experimental, isaaclab_ovphysx)
  • ✅ Documentation updates are internally consistent (migration guide, solver docs, solver comparison all aligned)
  • ✅ CI workflow pins match the setup.py pin (ovphysx==0.4.13)
  • ✅ OVPhysX test docstrings updated from version-specific ovphysx<=0.3.7 to generic "The OVPhysX runtime" phrasing

Findings

No issues found. The cherry-pick is clean with no conflict artifacts. The conflict resolution for #5959 (keeping release branch packaging paths while applying the version pin) is correctly described and the changes are consistent. All ls_parallel removals from call sites are paired with the deprecation infrastructure in the cfg class, ensuring no breakage for downstream code that still passes the parameter.

Verdict

No issues found — clean cherry-pick ready for merge.


Update (cd7d0e9): 4 additional files changed since last review:

  1. scripts/benchmarks/benchmark_startup.py — Wraps env.step(actions) in torch.inference_mode() context (part of #5923 fix, consistent with PR intent)
  2. source/isaaclab/isaaclab/utils/math.py — Docstring correction: T_{AB} described as "frame B to A" instead of "frame A to B" (matches actual convention used in code — t01 = position of frame 1 w.r.t. frame 0, i.e. transform from 1→0)
  3. source/isaaclab/isaaclab/cloner/__init__.pyi — Fixes lazy exports: removes cfg_source_path/path_source_path, adds resolve_clone_plan_source (API rename reflected in stub)
  4. source/isaaclab/changelog.d/ — Two new changelog fragments (docstring-only skip + cloner fix entry)

✅ No issues. Changes are consistent with original PR scope (cherry-picks from develop). The math docstring fix corrects a genuine documentation error.


Update (99d683f): 1 file added since last review:

  1. source/isaaclab_tasks/changelog.d/antoiner-spot-newton-mjwarp-preset.rst — Changelog fragment for the Spot Newton MJWarp preset fix (documents the collision pipeline correction from #5940)

✅ No issues. Trivial changelog addition consistent with existing PR scope.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 4, 2026

Greptile Summary

This cherry-pick from develop bundles five PRs for the release/3.0.0-beta2 branch: deprecation of MJWarpSolverCfg.ls_parallel (now a no-op that emits a DeprecationWarning), removal of the wrap_warp_to_torch.py migration tool, pinning ovphysx==0.4.13 across CI and packaging, an updated Spot locomotion Newton preset, and a torch.inference_mode() guard in the startup benchmark.

  • ls_parallel deprecation: __post_init__ warns and resets the field to False; mjwarp_manager.py explicitly excludes it from kwargs forwarded to SolverMuJoCo. All task/test configs that set it (including ls_parallel=True in Ant and Humanoid) have the field removed.
  • ovphysx pin: setup.py, build.yaml, and daily-compatibility.yml are all updated consistently to ovphysx==0.4.13 to guard against a known-breaking newer release; the strict equality pin is intentional per the PR description.
  • Spot env update: njmax raised from 45 → 130, nconmax from 30 → 40, switched to Newton collision pipeline (use_mujoco_contacts=False) with a NewtonCollisionPipelineCfg and NewtonShapeCfg(margin=0.01).

Confidence Score: 4/5

Safe to merge; all changes are targeted deprecations, dependency pins, and config updates with no risk of data loss or crash.

The deprecation path for ls_parallel is implemented consistently across config, manager, tests, and docs. The ovphysx==0.4.13 exact-equality pin is intentional to block a known breaking release and is mirrored across all three affected files. The only minor concern is that the strict == pin will block future patch releases of ovphysx, which may need revisiting as the library evolves.

source/isaaclab_ovphysx/setup.py — the exact-equality pin for ovphysx may need to be relaxed once a known-good patch release is available.

Important Files Changed

Filename Overview
.github/workflows/build.yaml Pins ovphysx to ==0.4.13 in extra-pip-packages for rendering correctness test job, consistent with setup.py change.
.github/workflows/daily-compatibility.yml Pins ovphysx to ==0.4.13 in extra-pip-packages for daily compatibility job, consistent with setup.py change.
source/isaaclab_ovphysx/setup.py Pins ovphysx extras_require dependency to exactly ==0.4.13 to guard against a breaking newer release; strict equality pin blocks any future patch releases.
source/isaaclab_newton/isaaclab_newton/physics/mjwarp_manager_cfg.py Deprecates ls_parallel via post_init with a DeprecationWarning; stacklevel=5 is correct given the configclass _combined_function wrapper adds one extra frame.
source/isaaclab_newton/isaaclab_newton/physics/mjwarp_manager.py Explicitly adds ls_parallel to the ignored set when building kwargs for SolverMuJoCo, ensuring the deprecated field is never forwarded to the underlying solver.
scripts/tools/wrap_warp_to_torch.py Entire 648-line migration helper deleted; changelog entry correctly documents users should use ProxyArray.torch for tensor interop instead.
scripts/benchmarks/benchmark_startup.py Wraps env.step(actions) in torch.inference_mode() for the first-step profile, avoiding gradient-tracking overhead in the benchmark measurement.
source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/config/spot/flat_env_cfg.py Significantly updates Spot Newton preset: njmax 45→130, nconmax 30→40, adds use_mujoco_contacts=False, NewtonCollisionPipelineCfg(max_triangle_pairs=2_500_000), and NewtonShapeCfg(margin=0.01).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["User creates MJWarpSolverCfg(ls_parallel=True)"] --> B["@configclass __init__"]
    B --> C["_combined __post_init__\n(user + _custom_post_init)"]
    C --> D{"ls_parallel == True?"}
    D -- Yes --> E["warnings.warn(DeprecationWarning)\nstacklevel=5"]
    E --> F["Set ls_parallel = False"]
    D -- No --> G["No-op"]
    F --> H["NewtonMJWarpManager.__init__"]
    G --> H
    H --> I["ignored = {class_type, solver_type, ls_parallel}"]
    I --> J["kwargs = cfg.to_dict() filtered by SolverMuJoCo signature - ignored"]
    J --> K["SolverMuJoCo(model, **kwargs)"]
Loading

Reviews (1): Last reviewed commit: "Fix pre-trained policy action grad leak ..." | Re-trigger Greptile


EXTRAS_REQUIRE = {
"ovphysx": ["ovphysx"],
"ovphysx": ["ovphysx==0.4.13"],
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.

P2 The exact == pin means any ovphysx version other than 0.4.13 — including future bug-fix releases like 0.4.14 — will be refused by pip. A compatible-release (~=0.4.13) or upper-bounded range (>=0.4.13,<0.5) would block known-breaking minor bumps while still allowing patch releases.

Suggested change
"ovphysx": ["ovphysx==0.4.13"],
"ovphysx": ["ovphysx~=0.4.13"],

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

# Description

Fixes a latent autograd leak in `PreTrainedPolicyAction.apply_actions`.
When environments are stepped outside `torch.inference_mode()`, the
low-level policy output can require gradients; copying that output into
`self.low_level_actions` makes the persistent action buffer require
gradients as well. Warp later rejects that tensor when accessing
`__cuda_array_interface__`.

This runs the low-level policy under `torch.no_grad()` and detaches its
output before copying it into the action buffer. No new dependencies are
required.

@pascal-roth FYI for upstream review.

Fixes: N/A

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

N/A.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Verification

- `./isaaclab.sh -f` was run first. All non-LFS hooks passed, but
`check-git-lfs-pointers` failed because `git-lfs` is not installed in
this environment.
- `SKIP=check-git-lfs-pointers ./isaaclab.sh -f` passed.
- Focused inline check with normal grad mode enabled confirmed the
policy output requires grad before the action term runs, while
`low_level_actions.requires_grad`, `low_level_actions.grad_fn`, and the
downstream action tensor remain detached after `apply_actions()`.
- No automated test was added for this change.

(cherry picked from commit 43f875f)
@AntoineRichard AntoineRichard force-pushed the antoine/cherry-pick-latest-prs-beta2 branch from a4ba64d to 2385b42 Compare June 4, 2026 15:33
AntoineRichard and others added 3 commits June 4, 2026 17:35
# Description

Restores the package-level `isaaclab.cloner.resolve_clone_plan_source`
lazy export used by the Newton RayCaster backend. This fixes Newton
RayCaster task construction failures where
`isaaclab_newton.sensors.ray_caster` could not import the helper from
`isaaclab.cloner`.

The PR also removes stale cloner stub exports that no longer have
implementations, so every name in `isaaclab.cloner.__all__` resolves.
These stale names were not caught by existing tests because no code or
test imported or accessed `path_source_path` or `cfg_source_path`;
`lazy_export()` can import the package and resolve other names without
touching every `__all__` entry.

No new dependencies are required for this change.

@OctiZhangOctiZhang (), could you review?

Fixes # (no linked issue)

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

Not applicable.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- Ran `./isaaclab.sh -f`; `ruff` formatted one file, then the full hook
set was blocked because `git-lfs` is not installed in this environment.
- Ran `SKIP=check-git-lfs-pointers ./isaaclab.sh -f` after formatting;
all non-LFS hooks passed.
- [x] I have made corresponding changes to the documentation
  - No documentation update was needed for this import/export fix.
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- No test was added for this simple lazy-export correction. Validation
was done with the Newton RayCaster repro and a one-off import scan.
Note: existing `from isaaclab.cloner import _fabric_notices` test
imports do not cover this lazy-export path because `_fabric_notices` is
a real package submodule, while `resolve_clone_plan_source` is a
function that must be declared in `__init__.pyi` for `lazy_export()` to
expose it.
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

(cherry picked from commit 0fea540)
# Description

Updates the transformation-matrix docstrings in
`combine_frame_transforms()` and `subtract_frame_transforms()` on
`develop` to state that `T_{AB}` maps from frame B to frame A, matching
isaac-sim#5819 on `main`.

No new dependencies.

Fixes # N/A - follow-up to isaac-sim#5819 for `develop`.

## Type of change

- Documentation update

## Screenshots

Not applicable.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format` (`./isaaclab.sh -f`; all hooks pass except
`check-git-lfs-pointers`, which fails because `git-lfs` is not installed
locally)
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works (not applicable: docstring-only change)
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package
(`source/isaaclab/changelog.d/antoiner-fix-transform-docs-develop.skip`)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there (`Antoine Richard`)

Signed-off-by: Junette Hsin  <junetter@gmail.com>
Co-authored-by: Junette Hsin <junetter@gmail.com>
(cherry picked from commit dc0a80d)
@AntoineRichard AntoineRichard merged commit 9299553 into isaac-sim:release/3.0.0-beta2 Jun 5, 2026
37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation infrastructure isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants