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
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