Skip to content

Rename modifiers and unify tensor processor APIs - #8693

Open
mataylor-nvidia wants to merge 22 commits into
isaac-sim:mainfrom
mataylor-nvidia:feat/tensor-processors
Open

mataylor-nvidia wants to merge 22 commits into
isaac-sim:mainfrom
mataylor-nvidia:feat/tensor-processors

Conversation

@mataylor-nvidia

@mataylor-nvidia mataylor-nvidia commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Description

Rename modifiers to tensor_processors and unify tensor and structured-data processing under TensorProcessor / TensorProcessorCfg. TensorProcessorData accepts Torch tensors, ProxyArray, and recursively nested lists, tuples, and string-keyed dictionaries. Each implementation defines its input and output structures; built-in filters retain their single-tensor behavior.

Custom processors can accept input buffers in their constructor and call super().__init__(cfg). Existing (cfg, data_dim, device) construction remains supported, and reset() and close() default to no-ops. Configurations use func for functions, classes, or lazy import strings; inputs and outputs provide optional named-key metadata. Managers resolve nested scene entities and manager terms in processor parameters.

Observation terms remain tensor-valued and shape-preserving. Groups retain their concatenated-tensor or dictionary-of-tensors output. Processing order, noise, clipping, scaling, delay, and history retain their existing behavior.

Legacy isaaclab.utils.modifiers and isaaclab_experimental.utils.modifiers imports remain supported with an import-time DeprecationWarning, including old class names, submodule paths, wildcard imports, and serialized callable paths. ObservationTermCfg.modifiers also remains supported: both observation managers emit a targeted FutureWarning and forward it to tensor_processors during initialization. Constructor arguments and later assignments work; setting both fields raises ValueError, including empty lists. Migrate imports and configurations to tensor_processors before the deprecated names are removed in a future release.

Camera attachment and Physically Plausible Image Signal Processing (PPISP) integration remain separate follow-up work. This PR establishes their shared processor interface and replaces the lower portion of #8571.

Validation

  • uv run python -m pytest source/isaaclab/test/managers/test_observation_manager.py -q — 42 passed, including deprecated constructor/assignment use, serialized configurations, Warp manager integration, caller-directed warnings, and conflicting-field rejection.
  • uv run --no-sync python -m pytest source/isaaclab/test/utils/test_tensor_processors.py -q — 11 passed.
  • uv run --no-sync python -m pytest source/isaaclab/test/managers/test_manager_base.py -q — 8 passed; PyTorch emitted its existing torch.jit.script deprecation warnings.
  • Before the compatibility fix, the four new regression cases failed for the intended reasons: the constructor rejected modifiers, both managers ignored assigned legacy fields without warning, and conflicting fields were accepted.
  • uv run --extra dev isaaclab --docs — clean full HTML build with warnings treated as errors.
  • uv run isaaclab --format — repository formatting and lint checks.
  • uv run python tools/changelog/cli.py check upstream/main --include-worktree — changelog validation.
  • git diff --check — clean.

Type of change

  • Tensor processor API addition with deprecated modifier aliases
  • Unified tensor and structured-data processor interface
  • Documentation update

Release backport

  • Backport this pull request to the active release branch after it merges into develop

@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers to tensor processors and add dictionary processing Rename modifiers to tensor processors and add dictionary tensor processing Oct 19, 2026
@mataylor-nvidia

Copy link
Copy Markdown
Contributor Author

Another option is to do aliasing, however this delays the name change that will eventually come

@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers to tensor processors and add dictionary tensor processing Rename modifiers to tensor processors and add observation group pipelines Oct 19, 2026
@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers to tensor processors and add observation group pipelines Rename modifiers to tensor processors and support dictionary observation terms Oct 19, 2026
@mataylor-nvidia

Copy link
Copy Markdown
Contributor Author

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Oct 20, 2026
Comment thread source/isaaclab/isaaclab/managers/manager_base.py
@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers to tensor processors and support dictionary observation terms Rename modifiers to tensor processors Oct 20, 2026
@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers to tensor processors Rename modifiers and add dictionary tensor processor APIs Oct 20, 2026
@mataylor-nvidia

Copy link
Copy Markdown
Contributor Author

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Oct 21, 2026
@mataylor-nvidia
mataylor-nvidia marked this pull request as ready for review October 22, 2026 19:49
@mataylor-nvidia
mataylor-nvidia requested a review from a team October 22, 2026 19:49
@greptile-apps

greptile-apps Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no new actionable issues were found.

Summary

Renames modifiers to tensor processors and gives tensor and structured-data processors one shared interface.

  • Tensor processors now accept nested data and return structured results.
  • Observation terms now configure processors with tensor_processors.
  • Old modifier imports still work with deprecation warnings.
  • Warp observations run processors on their existing output buffers.

The earlier test-coverage thread was manually resolved without explanation. The replacement interface now has concrete coverage.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[Observation configuration] --> B{Legacy modifiers set?}
    B -->|Only legacy field| C[Warn and forward to tensor_processors]
    B -->|Both fields| D[Raise ValueError]
    B -->|No| E[Prepare processors]
    C --> E
    E --> F[Compute observation]
    F --> G[Processors]
    G --> H[Noise, clipping, scaling, delay, history]
Loading

Reviews (2) · Last reviewed commit: "Address tensor processor review feedback" · Reviewed by Greptile

Comment thread source/isaaclab/isaaclab/utils/tensor_processors/dict_tensor_processor.py Outdated

@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

Needs attention: Compatibility and deprecation (1), Style consistency (2). Other reviewed categories look good.

  • PR description: The body matches the diff, but replace the fork follow-up link, define PPISP, remove the stale “import-only” and Windows-temp details, and provide exact validation commands.
  • Design and architecture: Architecture looks good.
  • Scope and over-engineering: No over-engineering issues.
  • API: API changes look good.
  • Compatibility and deprecation: Breaking changes: ObservationTermCfg.modifiers lacks a functional alias, targeted warning, and transition coverage; retain it as a deprecated forwarding field before migrating consumers.
  • Implementation: Implementation looks good.
  • Style consistency: Renamed identifiers remain in prose comments; use “tensor processors” outside code references.
  • Test quality: Test quality looks good.

Significant concerns. Posted 3 inline findings.

Automated review; human maintainers own approval decisions.

Comment thread source/isaaclab/isaaclab/managers/manager_term_cfg.py
Comment thread docs/source/api/lab/isaaclab.utils.rst Outdated
Comment thread source/isaaclab/isaaclab/managers/observation_manager.py Outdated


class DictTensorProcessor(ABC):
"""Transform a dictionary of named tensors into a dictionary of named tensors.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This doesn't make any sense, transform into the same thing?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

updated to single TensorProcessor unified class

@mataylor-nvidia mataylor-nvidia changed the title Rename modifiers and add dictionary tensor processor APIs Rename modifiers and unify tensor processor APIs Oct 22, 2026
@mataylor-nvidia

Copy link
Copy Markdown
Contributor Author

@greptile review

@mataylor-nvidia

Copy link
Copy Markdown
Contributor Author

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Oct 24, 2026
"""Whether or not the observation manager should flatten history-based observation terms to a 2-D (N, D) tensor.
Defaults to True."""

modifiers: list[TensorProcessorCfg] | None = None

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

The old cfg also need deprecation shim?

configuration during construction; they are not forwarded to the constructed instance.
"""

inputs: list[str] = []

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

the input and output key proably only make sense for dict tensor right?

This branch has not been deployed

No deployments
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 isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants