Skip to content

Conversation

@Mayankm96
Copy link
Contributor

@Mayankm96 Mayankm96 commented Jan 3, 2026

Description

This MR passes the stage attribute to the functions where applicable. This helps avoid unnecessary get_current_stage() calls as that calls the USD context and can be at times expensive. It is a better practice to give the stage as much as possible.

Type of change

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

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

@github-actions github-actions bot added documentation Improvements or additions to documentation enhancement New feature or request isaac-lab Related to Isaac Lab team labels Jan 3, 2026
@Mayankm96 Mayankm96 changed the title Passes stage argument to avoid unnecessary stage retrieval calls #4322 Passes stage argument to avoid unnecessary stage retrieval calls Jan 3, 2026
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 3, 2026

Greptile Summary

This PR optimizes USD stage retrieval by passing the stage argument throughout the spawner and utility functions, avoiding expensive get_current_stage() calls. The changes include:

  • Created new transforms.py module with utilities for USD transform operations (standardize_xform_ops, resolve_prim_pose, resolve_prim_scale, convert_world_pose_to_local)
  • Refactored create_prim() to use new transform utilities and support both world-space (position) and local-space (translation) coordinate frames
  • Updated all spawner functions (shapes, meshes, lights, sensors, from_files, wrappers) to pass stage argument
  • Added comprehensive test coverage for both transform utilities and multi-type input handling (list, tuple, numpy, torch tensors)
  • Moved transform-related functions from prims.py to dedicated transforms.py module for better organization

The implementation is solid with excellent documentation and thorough testing. All changes maintain backward compatibility while improving performance.

Confidence Score: 5/5

  • This PR is safe to merge with very high confidence
  • The changes are well-structured, thoroughly tested, and maintain backward compatibility. The new transform utilities are well-documented with clear docstrings. The optimization pattern (passing stage argument) is applied consistently across all spawner functions. Comprehensive test coverage includes edge cases like different input types, coordinate frame conversions, and transform standardization scenarios.
  • No files require special attention

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/sim/utils/transforms.py New utility module for USD transform operations - well-documented with comprehensive functions for standardizing xform ops, resolving poses, and coordinate conversions
source/isaaclab/isaaclab/sim/utils/prims.py Refactored create_prim to use new transform utilities and support both world/local coordinate frames; moved transform functions to transforms.py; added _to_tuple helper
source/isaaclab/isaaclab/sim/spawners/shapes/shapes.py Passes stage argument to create_prim and schema functions to avoid unnecessary get_current_stage() calls
source/isaaclab/isaaclab/sim/spawners/from_files/from_files.py Passes stage argument to create_prim, bind_physics_material, bind_visual_material, and ChangePropertyCommand calls
source/isaaclab/test/sim/test_utils_transforms.py New comprehensive test suite for transform utilities covering standardization, pose resolution, coordinate conversion, and edge cases

Sequence Diagram

sequenceDiagram
    participant User
    participant Spawner as Spawner Functions<br/>(shapes, from_files, etc.)
    participant CreatePrim as create_prim()
    participant Transforms as Transform Utilities<br/>(transforms.py)
    participant Stage as USD Stage
    
    Note over User,Stage: Before PR: Multiple get_current_stage() calls
    
    User->>Spawner: spawn geometry/asset
    Spawner->>Stage: get_current_stage()
    activate Stage
    Stage-->>Spawner: stage handle
    deactivate Stage
    Spawner->>CreatePrim: create_prim(path, type, pos, ...)
    CreatePrim->>Stage: get_current_stage()
    activate Stage
    Stage-->>CreatePrim: stage handle
    deactivate Stage
    CreatePrim->>Stage: create prim on stage
    
    Note over User,Stage: After PR: Pass stage argument
    
    User->>Spawner: spawn geometry/asset
    Spawner->>Stage: get_current_stage()
    activate Stage
    Stage-->>Spawner: stage handle
    deactivate Stage
    Spawner->>CreatePrim: create_prim(path, type, pos, stage=stage)
    Note over CreatePrim: Uses provided stage<br/>No get_current_stage() call
    CreatePrim->>Transforms: convert_world_pose_to_local(pos, orient, parent)
    Transforms-->>CreatePrim: local translation, orientation
    CreatePrim->>Transforms: standardize_xform_ops(prim, translation, orient, scale)
    Transforms->>Stage: Set xform operations on prim
    CreatePrim->>Stage: Apply semantic labels, attributes
Loading

@Mayankm96 Mayankm96 merged commit b686374 into isaac-sim:main Jan 3, 2026
9 checks passed
@Mayankm96 Mayankm96 deleted the feature/use-stage-attr branch January 4, 2026 10:54
thiagolages pushed a commit to thiagolages/isaac-lab that referenced this pull request Jan 6, 2026
…saac-sim#4323)

# Description

This MR passes the `stage` attribute to the functions where applicable.
This helps avoid unnecessary `get_current_stage()` calls as that calls
the USD context and can be at times expensive. It is a better practice
to give the stage as much as possible.

## Type of change

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

## 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
Mayankm96 added a commit that referenced this pull request Jan 7, 2026
…4313)

# Description

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: #4307, #4323

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

## Screenshots

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)   
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

## 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`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Mayankm96 added a commit that referenced this pull request Jan 7, 2026
…4313)

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: #4307, #4323

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

- [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`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Edify0991 pushed a commit to Edify0991/IsaacLab that referenced this pull request Jan 14, 2026
…saac-sim#4323)

# Description

This MR passes the `stage` attribute to the functions where applicable.
This helps avoid unnecessary `get_current_stage()` calls as that calls
the USD context and can be at times expensive. It is a better practice
to give the stage as much as possible.

## Type of change

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

## 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
Edify0991 pushed a commit to Edify0991/IsaacLab that referenced this pull request Jan 14, 2026
…saac-sim#4313)

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: isaac-sim#4307, isaac-sim#4323

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

- [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`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
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 enhancement New feature or request isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant