From cf4a1c79e7976d4e519bbbcc440e094484f15a07 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 14 Apr 2026 12:14:24 +0200 Subject: [PATCH 1/5] Refactor environment registration to use a registry. --- isaaclab_arena/assets/asset_registry.py | 7 ++ isaaclab_arena/assets/register.py | 11 ++ .../environments/isaaclab_interop.py | 6 +- .../tests/test_dexsuite_kuka_lift_example.py | 9 +- isaaclab_arena_environments/cli.py | 101 ++++++++---------- .../cube_goal_pose_environment.py | 2 + .../dexsuite_lift_environment.py | 2 + .../franka_put_and_close_door_environment.py | 2 + ...g1_locomanip_pick_and_place_environment.py | 2 + .../galileo_pick_and_place_environment.py | 2 + .../gr1_open_microwave_environment.py | 2 + .../gr1_put_and_close_door_environment.py | 2 + ...e_multi_object_no_collision_environment.py | 2 + .../gr1_turn_stand_mixer_knob_environment.py | 2 + .../kitchen_pick_and_place_environment.py | 2 + .../lift_object_environment.py | 2 + .../pick_and_place_maple_table_environment.py | 2 + .../press_button_environment.py | 2 + .../sorting_environment.py | 2 + .../tabletop_gearmesh_environment.py | 2 + .../tabletop_peginsert_environment.py | 2 + .../tabletop_place_upright_environment.py | 2 + 22 files changed, 109 insertions(+), 59 deletions(-) diff --git a/isaaclab_arena/assets/asset_registry.py b/isaaclab_arena/assets/asset_registry.py index 92c31b7d5..5abbc731f 100644 --- a/isaaclab_arena/assets/asset_registry.py +++ b/isaaclab_arena/assets/asset_registry.py @@ -210,6 +210,13 @@ def get_random_hdr_by_tag(self, tag: str) -> type["HDRImage"]: return random.choice(hdrs) +class EnvironmentRegistry(Registry): + """Registry for example environment classes.""" + + def __init__(self): + super().__init__() + + # Lazy registration to avoid circular imports _assets_registered = False diff --git a/isaaclab_arena/assets/register.py b/isaaclab_arena/assets/register.py index 38664c635..d4d41c283 100644 --- a/isaaclab_arena/assets/register.py +++ b/isaaclab_arena/assets/register.py @@ -6,6 +6,7 @@ from isaaclab_arena.assets.asset_registry import ( AssetRegistry, DeviceRegistry, + EnvironmentRegistry, HDRImageRegistry, PolicyRegistry, RetargeterRegistry, @@ -57,3 +58,13 @@ def register_hdr(cls): else: HDRImageRegistry().register(cls, cls.name) return cls + + +# Decorator to register an environment with the EnvironmentRegistry. +def register_environment(cls): + registry = EnvironmentRegistry() + if cls.name in registry._components: + print(f"WARNING: Environment {cls.name} is already registered. Doing nothing.") + else: + registry.register(cls, cls.name) + return cls diff --git a/isaaclab_arena/environments/isaaclab_interop.py b/isaaclab_arena/environments/isaaclab_interop.py index 98b373dc9..2c3bd300a 100644 --- a/isaaclab_arena/environments/isaaclab_interop.py +++ b/isaaclab_arena/environments/isaaclab_interop.py @@ -5,7 +5,8 @@ import argparse -from isaaclab_arena_environments.cli import ExampleEnvironments +from isaaclab_arena.assets.asset_registry import EnvironmentRegistry +from isaaclab_arena_environments.cli import ensure_environments_registered def is_simulation_app_running() -> bool: @@ -58,7 +59,8 @@ def environment_registration_callback() -> list[str]: # The result is that a single argument tells Arena what to register, and Lab what to run. parser.add_argument("--task", type=str, required=True, help="Name of the IsaacLab Arena environment to register.") environment_name = parser.parse_known_args()[0].task - environment = ExampleEnvironments[environment_name]() + ensure_environments_registered() + environment = EnvironmentRegistry().get_component_by_name(environment_name)() # Get the full list of environment-specific CLI args. AppLauncher.add_app_launcher_args(parser) add_isaac_lab_cli_args(parser) diff --git a/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py b/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py index 2767b9c4e..1cd6f059f 100644 --- a/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py +++ b/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py @@ -13,10 +13,13 @@ def test_dexsuite_lift_example_in_cli_registry() -> None: pytest.importorskip( "isaaclab_tasks.manager_based.manipulation.dexsuite.config.kuka_allegro.dexsuite_kuka_allegro_env_cfg" ) - from isaaclab_arena_environments.cli import ExampleEnvironments + from isaaclab_arena.assets.asset_registry import EnvironmentRegistry + from isaaclab_arena_environments.cli import ensure_environments_registered - assert "dexsuite_lift" in ExampleEnvironments - assert ExampleEnvironments["dexsuite_lift"].name == "dexsuite_lift" + ensure_environments_registered() + env_registry = EnvironmentRegistry() + assert env_registry.is_registered("dexsuite_lift") + assert env_registry.get_component_by_name("dexsuite_lift").name == "dexsuite_lift" @pytest.mark.with_newton diff --git a/isaaclab_arena_environments/cli.py b/isaaclab_arena_environments/cli.py index 7c7cd0725..ed64d4a2d 100644 --- a/isaaclab_arena_environments/cli.py +++ b/isaaclab_arena_environments/cli.py @@ -5,52 +5,40 @@ import argparse import importlib +import inspect +import pkgutil from typing import Any +import isaaclab_arena_environments +from isaaclab_arena.assets.asset_registry import EnvironmentRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser -from isaaclab_arena_environments.cube_goal_pose_environment import CubeGoalPoseEnvironment -from isaaclab_arena_environments.dexsuite_lift_environment import DexsuiteLiftEnvironment -from isaaclab_arena_environments.franka_put_and_close_door_environment import FrankaPutAndCloseDoorEnvironment -from isaaclab_arena_environments.galileo_g1_locomanip_pick_and_place_environment import ( - GalileoG1LocomanipPickAndPlaceEnvironment, -) -from isaaclab_arena_environments.galileo_pick_and_place_environment import GalileoPickAndPlaceEnvironment -from isaaclab_arena_environments.gr1_open_microwave_environment import Gr1OpenMicrowaveEnvironment -from isaaclab_arena_environments.gr1_put_and_close_door_environment import GR1PutAndCloseDoorEnvironment -from isaaclab_arena_environments.gr1_table_multi_object_no_collision_environment import ( - GR1TableMultiObjectNoCollisionEnvironment, -) -from isaaclab_arena_environments.gr1_turn_stand_mixer_knob_environment import Gr1TurnStandMixerKnobEnvironment -from isaaclab_arena_environments.kitchen_pick_and_place_environment import KitchenPickAndPlaceEnvironment -from isaaclab_arena_environments.lift_object_environment import LiftObjectEnvironment -from isaaclab_arena_environments.pick_and_place_maple_table_environment import PickAndPlaceMapleTableEnvironment -from isaaclab_arena_environments.press_button_environment import PressButtonEnvironment -from isaaclab_arena_environments.tabletop_place_upright_environment import TableTopPlaceUprightEnvironment - -# NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. -# We cannot annotate types which require the simulation app to be started in order to -# import, because this file is used to retrieve CLI arguments, so it must be imported -# before the simulation app is started. -# TODO(alexmillane, 2025.09.04): Fix this. - - -# Collection of the available example environments -ExampleEnvironments = { - FrankaPutAndCloseDoorEnvironment.name: FrankaPutAndCloseDoorEnvironment, - Gr1OpenMicrowaveEnvironment.name: Gr1OpenMicrowaveEnvironment, - GR1PutAndCloseDoorEnvironment.name: GR1PutAndCloseDoorEnvironment, - KitchenPickAndPlaceEnvironment.name: KitchenPickAndPlaceEnvironment, - GalileoPickAndPlaceEnvironment.name: GalileoPickAndPlaceEnvironment, - PickAndPlaceMapleTableEnvironment.name: PickAndPlaceMapleTableEnvironment, - GalileoG1LocomanipPickAndPlaceEnvironment.name: GalileoG1LocomanipPickAndPlaceEnvironment, - PressButtonEnvironment.name: PressButtonEnvironment, - CubeGoalPoseEnvironment.name: CubeGoalPoseEnvironment, - DexsuiteLiftEnvironment.name: DexsuiteLiftEnvironment, - LiftObjectEnvironment.name: LiftObjectEnvironment, - TableTopPlaceUprightEnvironment.name: TableTopPlaceUprightEnvironment, - Gr1TurnStandMixerKnobEnvironment.name: Gr1TurnStandMixerKnobEnvironment, - GR1TableMultiObjectNoCollisionEnvironment.name: GR1TableMultiObjectNoCollisionEnvironment, -} +from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase + +_environments_registered = False + + +def ensure_environments_registered(): + """Discover and register all environment classes in the ``isaaclab_arena_environments`` package. + + Imports every top-level module in the package and registers any concrete + :class:`ExampleEnvironmentBase` subclass that has a ``name`` attribute. + """ + global _environments_registered + if not _environments_registered: + _environments_registered = True + registry = EnvironmentRegistry() + for _importer, modname, ispkg in pkgutil.iter_modules(isaaclab_arena_environments.__path__): + if ispkg: + continue + module = importlib.import_module(f"isaaclab_arena_environments.{modname}") + for _attr_name, obj in inspect.getmembers(module, inspect.isclass): + if ( + issubclass(obj, ExampleEnvironmentBase) + and obj is not ExampleEnvironmentBase + and getattr(obj, "name", None) is not None + and obj.name not in registry._components + ): + registry.register(obj, obj.name) def parse_and_return_external_environment_from_string(environment_path: str) -> dict[str, Any]: @@ -86,19 +74,23 @@ def parse_and_return_external_environment_from_string(environment_path: str) -> def add_example_environments_cli_args(args_parser: argparse.ArgumentParser) -> argparse.ArgumentParser: - # Parse the parser once here to add the external environments to the example environments + ensure_environments_registered() + env_registry = EnvironmentRegistry() + args, unknown = args_parser.parse_known_args() environment = getattr(args, "external_environment_class_path", None) if environment is not None: - # Update the ExampleEnvironments dictionary with the new external environment print(f"Adding external environment: {environment}") - ExampleEnvironments.update(parse_and_return_external_environment_from_string(environment)) + for name, cls in parse_and_return_external_environment_from_string(environment).items(): + env_registry.register(cls, name) + subparsers = args_parser.add_subparsers( dest="example_environment", required=True, help="Example environment to run" ) - for example_environment in ExampleEnvironments.values(): - subparser = subparsers.add_parser(example_environment.name) - example_environment.add_cli_args(subparser) + for env_name in env_registry.get_all_keys(): + env_cls = env_registry.get_component_by_name(env_name) + subparser = subparsers.add_parser(env_cls.name) + env_cls.add_cli_args(subparser) return args_parser @@ -117,13 +109,14 @@ def get_isaaclab_arena_environments_cli_parser( def get_arena_builder_from_cli(args_cli: argparse.Namespace): # -> tuple[ManagerBasedRLEnvCfg, str]: from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder - # Get the example environment + ensure_environments_registered() + env_registry = EnvironmentRegistry() + assert hasattr(args_cli, "example_environment"), "Example environment must be specified" - assert ( - args_cli.example_environment in ExampleEnvironments + assert env_registry.is_registered( + args_cli.example_environment ), f"Example environment type {args_cli.example_environment} not supported" - example_env = ExampleEnvironments[args_cli.example_environment]() + example_env = env_registry.get_component_by_name(args_cli.example_environment)() - # Compile the environment env_builder = ArenaEnvBuilder(example_env.get_env(args_cli), args_cli) return env_builder diff --git a/isaaclab_arena_environments/cube_goal_pose_environment.py b/isaaclab_arena_environments/cube_goal_pose_environment.py index 1e95cf3aa..61002c878 100644 --- a/isaaclab_arena_environments/cube_goal_pose_environment.py +++ b/isaaclab_arena_environments/cube_goal_pose_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class CubeGoalPoseEnvironment(ExampleEnvironmentBase): """ A environment for achieving the goal pose of a cube. diff --git a/isaaclab_arena_environments/dexsuite_lift_environment.py b/isaaclab_arena_environments/dexsuite_lift_environment.py index dd62bff67..530d8c5a0 100644 --- a/isaaclab_arena_environments/dexsuite_lift_environment.py +++ b/isaaclab_arena_environments/dexsuite_lift_environment.py @@ -8,11 +8,13 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE: Same pattern as other example envs — avoid heavy imports before AppLauncher. +@register_environment class DexsuiteLiftEnvironment(ExampleEnvironmentBase): """ Dexsuite Kuka Allegro lift task; RSL-RL config ``DexsuiteKukaAllegroPPORunnerCfg``. diff --git a/isaaclab_arena_environments/franka_put_and_close_door_environment.py b/isaaclab_arena_environments/franka_put_and_close_door_environment.py index 2ed2315a2..f636a54f5 100644 --- a/isaaclab_arena_environments/franka_put_and_close_door_environment.py +++ b/isaaclab_arena_environments/franka_put_and_close_door_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class FrankaPutAndCloseDoorEnvironment(ExampleEnvironmentBase): """ A sequential task environment with two subtasks: diff --git a/isaaclab_arena_environments/galileo_g1_locomanip_pick_and_place_environment.py b/isaaclab_arena_environments/galileo_g1_locomanip_pick_and_place_environment.py index a7d7a9230..fd34d730b 100644 --- a/isaaclab_arena_environments/galileo_g1_locomanip_pick_and_place_environment.py +++ b/isaaclab_arena_environments/galileo_g1_locomanip_pick_and_place_environment.py @@ -6,9 +6,11 @@ import argparse import math +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase +@register_environment class GalileoG1LocomanipPickAndPlaceEnvironment(ExampleEnvironmentBase): name: str = "galileo_g1_locomanip_pick_and_place" diff --git a/isaaclab_arena_environments/galileo_pick_and_place_environment.py b/isaaclab_arena_environments/galileo_pick_and_place_environment.py index 53a6d3150..eef179499 100644 --- a/isaaclab_arena_environments/galileo_pick_and_place_environment.py +++ b/isaaclab_arena_environments/galileo_pick_and_place_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class GalileoPickAndPlaceEnvironment(ExampleEnvironmentBase): name: str = "galileo_pick_and_place" diff --git a/isaaclab_arena_environments/gr1_open_microwave_environment.py b/isaaclab_arena_environments/gr1_open_microwave_environment.py index f7e3ee8c9..45909ef9d 100644 --- a/isaaclab_arena_environments/gr1_open_microwave_environment.py +++ b/isaaclab_arena_environments/gr1_open_microwave_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class Gr1OpenMicrowaveEnvironment(ExampleEnvironmentBase): name: str = "gr1_open_microwave" diff --git a/isaaclab_arena_environments/gr1_put_and_close_door_environment.py b/isaaclab_arena_environments/gr1_put_and_close_door_environment.py index 2b733b321..fe2bb5b47 100644 --- a/isaaclab_arena_environments/gr1_put_and_close_door_environment.py +++ b/isaaclab_arena_environments/gr1_put_and_close_door_environment.py @@ -6,6 +6,7 @@ import argparse import math +from isaaclab_arena.assets.register import register_environment from isaaclab_arena.tasks.common.mimic_default_params import MIMIC_DATAGEN_CONFIG_DEFAULTS from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase @@ -21,6 +22,7 @@ RANDOMIZATION_HALF_RANGE_Z_M = 0.0 +@register_environment class GR1PutAndCloseDoorEnvironment(ExampleEnvironmentBase): """ A sequential task environment with two subtasks for GR1 humanoid robot: diff --git a/isaaclab_arena_environments/gr1_table_multi_object_no_collision_environment.py b/isaaclab_arena_environments/gr1_table_multi_object_no_collision_environment.py index 4fcc594f4..c9b917709 100644 --- a/isaaclab_arena_environments/gr1_table_multi_object_no_collision_environment.py +++ b/isaaclab_arena_environments/gr1_table_multi_object_no_collision_environment.py @@ -15,6 +15,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase DEFAULT_TABLE_OBJECTS = [ @@ -30,6 +31,7 @@ # are needed in the near future. +@register_environment class GR1TableMultiObjectNoCollisionEnvironment(ExampleEnvironmentBase): """ Table-based scene with multiple objects (On(table) + NoCollision) and a robot. diff --git a/isaaclab_arena_environments/gr1_turn_stand_mixer_knob_environment.py b/isaaclab_arena_environments/gr1_turn_stand_mixer_knob_environment.py index 00d846c29..3f0a26d71 100644 --- a/isaaclab_arena_environments/gr1_turn_stand_mixer_knob_environment.py +++ b/isaaclab_arena_environments/gr1_turn_stand_mixer_knob_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class Gr1TurnStandMixerKnobEnvironment(ExampleEnvironmentBase): name: str = "gr1_turn_stand_mixer_knob" diff --git a/isaaclab_arena_environments/kitchen_pick_and_place_environment.py b/isaaclab_arena_environments/kitchen_pick_and_place_environment.py index 5b46b0f92..e4e6b8452 100644 --- a/isaaclab_arena_environments/kitchen_pick_and_place_environment.py +++ b/isaaclab_arena_environments/kitchen_pick_and_place_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class KitchenPickAndPlaceEnvironment(ExampleEnvironmentBase): name: str = "kitchen_pick_and_place" diff --git a/isaaclab_arena_environments/lift_object_environment.py b/isaaclab_arena_environments/lift_object_environment.py index c3a5f9a93..7f6eac147 100644 --- a/isaaclab_arena_environments/lift_object_environment.py +++ b/isaaclab_arena_environments/lift_object_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class LiftObjectEnvironment(ExampleEnvironmentBase): name: str = "lift_object" diff --git a/isaaclab_arena_environments/pick_and_place_maple_table_environment.py b/isaaclab_arena_environments/pick_and_place_maple_table_environment.py index c8c9e5b69..3a830c556 100644 --- a/isaaclab_arena_environments/pick_and_place_maple_table_environment.py +++ b/isaaclab_arena_environments/pick_and_place_maple_table_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class PickAndPlaceMapleTableEnvironment(ExampleEnvironmentBase): name: str = "pick_and_place_maple_table" diff --git a/isaaclab_arena_environments/press_button_environment.py b/isaaclab_arena_environments/press_button_environment.py index c1703c35d..294f097c8 100644 --- a/isaaclab_arena_environments/press_button_environment.py +++ b/isaaclab_arena_environments/press_button_environment.py @@ -5,6 +5,7 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase # NOTE(alexmillane, 2025.09.04): There is an issue with type annotation in this file. @@ -14,6 +15,7 @@ # TODO(alexmillane, 2025.09.04): Fix this. +@register_environment class PressButtonEnvironment(ExampleEnvironmentBase): name: str = "press_button" diff --git a/isaaclab_arena_environments/sorting_environment.py b/isaaclab_arena_environments/sorting_environment.py index 0ff22327f..3b0e65047 100644 --- a/isaaclab_arena_environments/sorting_environment.py +++ b/isaaclab_arena_environments/sorting_environment.py @@ -5,9 +5,11 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase +@register_environment class TableTopSortCubesEnvironment(ExampleEnvironmentBase): """ A pick and place environment for the Seattle Lab table. diff --git a/isaaclab_arena_environments/tabletop_gearmesh_environment.py b/isaaclab_arena_environments/tabletop_gearmesh_environment.py index d635d6822..66d0e5f80 100644 --- a/isaaclab_arena_environments/tabletop_gearmesh_environment.py +++ b/isaaclab_arena_environments/tabletop_gearmesh_environment.py @@ -6,9 +6,11 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase +@register_environment class GearMeshEnvironment(ExampleEnvironmentBase): """ Gear mesh assembly environment with 4 gears: diff --git a/isaaclab_arena_environments/tabletop_peginsert_environment.py b/isaaclab_arena_environments/tabletop_peginsert_environment.py index 4f3636a96..b40aaf4d2 100644 --- a/isaaclab_arena_environments/tabletop_peginsert_environment.py +++ b/isaaclab_arena_environments/tabletop_peginsert_environment.py @@ -6,9 +6,11 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase +@register_environment class PegInsertEnvironment(ExampleEnvironmentBase): name: str = "peg_insert" diff --git a/isaaclab_arena_environments/tabletop_place_upright_environment.py b/isaaclab_arena_environments/tabletop_place_upright_environment.py index 2c8cdd574..f80522286 100644 --- a/isaaclab_arena_environments/tabletop_place_upright_environment.py +++ b/isaaclab_arena_environments/tabletop_place_upright_environment.py @@ -5,9 +5,11 @@ import argparse +from isaaclab_arena.assets.register import register_environment from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase +@register_environment class TableTopPlaceUprightEnvironment(ExampleEnvironmentBase): """ A place upright environment for the Seattle Lab table. From 3259b3c17fcdaba1383957e12cc00d32cc14d597 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 15 Apr 2026 09:10:57 +0200 Subject: [PATCH 2/5] Refactor environment discovery. --- isaaclab_arena_environments/__init__.py | 11 +++++++++ isaaclab_arena_environments/cli.py | 30 +++++-------------------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/isaaclab_arena_environments/__init__.py b/isaaclab_arena_environments/__init__.py index fee3a6a9f..69104f473 100644 --- a/isaaclab_arena_environments/__init__.py +++ b/isaaclab_arena_environments/__init__.py @@ -2,3 +2,14 @@ # All rights reserved. # # SPDX-License-Identifier: Apache-2.0 + +import importlib +import pkgutil + +import isaaclab_arena_environments + +_NON_ENVIRONMENT_MODULES = {"cli", "example_environment_base"} + +for _importer, _modname, _ispkg in pkgutil.iter_modules(isaaclab_arena_environments.__path__): + if not _ispkg and _modname not in _NON_ENVIRONMENT_MODULES: + importlib.import_module(f"isaaclab_arena_environments.{_modname}") diff --git a/isaaclab_arena_environments/cli.py b/isaaclab_arena_environments/cli.py index ed64d4a2d..4ece49803 100644 --- a/isaaclab_arena_environments/cli.py +++ b/isaaclab_arena_environments/cli.py @@ -5,40 +5,20 @@ import argparse import importlib -import inspect -import pkgutil from typing import Any -import isaaclab_arena_environments from isaaclab_arena.assets.asset_registry import EnvironmentRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser -from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase - -_environments_registered = False def ensure_environments_registered(): - """Discover and register all environment classes in the ``isaaclab_arena_environments`` package. + """Trigger registration of all environments in the ``isaaclab_arena_environments`` package. - Imports every top-level module in the package and registers any concrete - :class:`ExampleEnvironmentBase` subclass that has a ``name`` attribute. + Importing the package fires the ``@register_environment`` decorator on each + environment module, which handles registration. The import is cached by + Python, so subsequent calls are free. """ - global _environments_registered - if not _environments_registered: - _environments_registered = True - registry = EnvironmentRegistry() - for _importer, modname, ispkg in pkgutil.iter_modules(isaaclab_arena_environments.__path__): - if ispkg: - continue - module = importlib.import_module(f"isaaclab_arena_environments.{modname}") - for _attr_name, obj in inspect.getmembers(module, inspect.isclass): - if ( - issubclass(obj, ExampleEnvironmentBase) - and obj is not ExampleEnvironmentBase - and getattr(obj, "name", None) is not None - and obj.name not in registry._components - ): - registry.register(obj, obj.name) + import isaaclab_arena_environments # noqa: F401 def parse_and_return_external_environment_from_string(environment_path: str) -> dict[str, Any]: From 5fed88ece8c16afe9fb558f4302721569820498c Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 15 Apr 2026 09:19:49 +0200 Subject: [PATCH 3/5] More cleanup. --- isaaclab_arena/assets/register.py | 2 +- .../tests/test_environment_registry.py | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 isaaclab_arena/tests/test_environment_registry.py diff --git a/isaaclab_arena/assets/register.py b/isaaclab_arena/assets/register.py index d4d41c283..155253b76 100644 --- a/isaaclab_arena/assets/register.py +++ b/isaaclab_arena/assets/register.py @@ -63,7 +63,7 @@ def register_hdr(cls): # Decorator to register an environment with the EnvironmentRegistry. def register_environment(cls): registry = EnvironmentRegistry() - if cls.name in registry._components: + if registry.is_registered(cls.name): print(f"WARNING: Environment {cls.name} is already registered. Doing nothing.") else: registry.register(cls, cls.name) diff --git a/isaaclab_arena/tests/test_environment_registry.py b/isaaclab_arena/tests/test_environment_registry.py new file mode 100644 index 000000000..acdf36e95 --- /dev/null +++ b/isaaclab_arena/tests/test_environment_registry.py @@ -0,0 +1,29 @@ +# Copyright (c) 2026, The Isaac Lab Arena Project Developers (https://github.com/isaac-sim/IsaacLab-Arena/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + +"""Tests that all environments in isaaclab_arena_environments are registered.""" + +from isaaclab_arena.assets.asset_registry import EnvironmentRegistry +from isaaclab_arena_environments.cli import ensure_environments_registered + + +def test_environments_registered(): + """All environments in isaaclab_arena_environments are in the registry after ensure_environments_registered().""" + ensure_environments_registered() + env_registry = EnvironmentRegistry() + registered = set(env_registry.get_all_keys()) + assert len(registered) > 0, "No environments registered" + + +def test_environments_registered_twice(): + """Calling ensure_environments_registered() twice should leave the registry unchanged.""" + ensure_environments_registered() + env_registry = EnvironmentRegistry() + keys_after_first = set(env_registry.get_all_keys()) + + ensure_environments_registered() + keys_after_second = set(env_registry.get_all_keys()) + + assert keys_after_first == keys_after_second From f04440a05f429fdf3be32a411884de0d993670e9 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 15 Apr 2026 09:30:20 +0200 Subject: [PATCH 4/5] Address self-review. --- isaaclab_arena_environments/cli.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/isaaclab_arena_environments/cli.py b/isaaclab_arena_environments/cli.py index 4ece49803..be2114e56 100644 --- a/isaaclab_arena_environments/cli.py +++ b/isaaclab_arena_environments/cli.py @@ -5,10 +5,10 @@ import argparse import importlib -from typing import Any from isaaclab_arena.assets.asset_registry import EnvironmentRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser +from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase def ensure_environments_registered(): @@ -21,7 +21,9 @@ def ensure_environments_registered(): import isaaclab_arena_environments # noqa: F401 -def parse_and_return_external_environment_from_string(environment_path: str) -> dict[str, Any]: +def parse_and_return_external_environment_from_string( + environment_path: str, +) -> tuple[str, type[ExampleEnvironmentBase]]: """Parse a string and import the environment class Args: @@ -31,7 +33,7 @@ def parse_and_return_external_environment_from_string(environment_path: str) -> ValueError: If the environment path is not in the format "module_path:class_name" Returns: - dict[str, Any]: A dictionary with the environment name as the key and the environment class as the value + tuple[str, type[ExampleEnvironmentBase]]: A tuple with the environment name and the environment class """ # Parse the environment path and import the environment class # We assume the environment path is in the format "module_path:class_name" @@ -50,7 +52,7 @@ def parse_and_return_external_environment_from_string(environment_path: str) -> ) from e name = getattr(environment_class, "name", environment_class.__name__) assert name is not None, "Environment class must have a 'name' attribute" - return {name: environment_class} + return name, environment_class def add_example_environments_cli_args(args_parser: argparse.ArgumentParser) -> argparse.ArgumentParser: @@ -61,8 +63,8 @@ def add_example_environments_cli_args(args_parser: argparse.ArgumentParser) -> a environment = getattr(args, "external_environment_class_path", None) if environment is not None: print(f"Adding external environment: {environment}") - for name, cls in parse_and_return_external_environment_from_string(environment).items(): - env_registry.register(cls, name) + name, cls = parse_and_return_external_environment_from_string(environment) + env_registry.register(cls, name) subparsers = args_parser.add_subparsers( dest="example_environment", required=True, help="Example environment to run" From 1480d80ff5f850de8b12e3327249b4155ccfcbf2 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 15 Apr 2026 13:52:23 +0200 Subject: [PATCH 5/5] Rename the registry related files. --- isaaclab_arena/assets/register.py | 2 +- .../assets/{asset_registry.py => registries.py} | 0 isaaclab_arena/environments/arena_env_builder.py | 2 +- isaaclab_arena/environments/isaaclab_interop.py | 2 +- isaaclab_arena/evaluation/policy_runner.py | 2 +- isaaclab_arena/examples/compile_env_notebook.py | 2 +- isaaclab_arena/tests/test_achieve_cube_goal_pose.py | 2 +- isaaclab_arena/tests/test_assembly_task.py | 4 ++-- isaaclab_arena/tests/test_asset_registry.py | 10 +++++----- isaaclab_arena/tests/test_camera_observation.py | 2 +- isaaclab_arena/tests/test_close_door.py | 2 +- .../tests/test_contact_sensor_not_at_root.py | 2 +- isaaclab_arena/tests/test_detect_object_type.py | 4 ++-- .../tests/test_device_and_retargeter_registry.py | 2 +- .../tests/test_dexsuite_kuka_lift_example.py | 6 +++--- isaaclab_arena/tests/test_duplicate_asset.py | 2 +- isaaclab_arena/tests/test_environment_registry.py | 2 +- isaaclab_arena/tests/test_events.py | 4 ++-- .../tests/test_g1_agile_tabletop_apple_to_plate.py | 2 +- isaaclab_arena/tests/test_g1_wbc_embodiment.py | 2 +- isaaclab_arena/tests/test_galbot_embodiment.py | 2 +- isaaclab_arena/tests/test_kuka_allegro_embodiment.py | 2 +- .../tests/test_locomanip_object_on_termination.py | 2 +- isaaclab_arena/tests/test_object_configuration.py | 2 +- isaaclab_arena/tests/test_object_of_type_base.py | 2 +- isaaclab_arena/tests/test_object_on_termination.py | 2 +- .../tests/test_object_pose_randomization.py | 2 +- isaaclab_arena/tests/test_object_scale.py | 2 +- isaaclab_arena/tests/test_object_set.py | 12 ++++++------ .../tests/test_object_set_on_termination.py | 2 +- isaaclab_arena/tests/test_open_door.py | 2 +- isaaclab_arena/tests/test_physics_presets.py | 2 +- isaaclab_arena/tests/test_place_upright_task.py | 2 +- .../tests/test_press_coffee_machine_button.py | 2 +- isaaclab_arena/tests/test_reference_objects.py | 2 +- .../tests/test_revolute_joint_moved_rate_metric.py | 2 +- isaaclab_arena/tests/test_robot_initial_position.py | 2 +- .../tests/test_scene_add_assets_ordering.py | 4 ++-- isaaclab_arena/tests/test_scene_to_usd.py | 2 +- isaaclab_arena/tests/test_sequential_open_door.py | 2 +- isaaclab_arena/tests/test_sorting_task.py | 2 +- isaaclab_arena/tests/test_success_rate_metric.py | 2 +- isaaclab_arena/tests/test_turn_stand_mixer_knob.py | 2 +- isaaclab_arena/tests/test_usd_pose_helpers.py | 2 +- isaaclab_arena/tests/test_xr_anchor_pose.py | 6 +++--- isaaclab_arena_environments/cli.py | 2 +- .../example_environment_base.py | 2 +- .../relations/isaac_sim_no_collision_notebook.py | 2 +- .../relations/isaac_sim_object_placer_notebook.py | 2 +- .../wbc_policy/tests/test_g1_agile_policy.py | 2 +- 50 files changed, 66 insertions(+), 66 deletions(-) rename isaaclab_arena/assets/{asset_registry.py => registries.py} (100%) diff --git a/isaaclab_arena/assets/register.py b/isaaclab_arena/assets/register.py index 155253b76..6071dd9da 100644 --- a/isaaclab_arena/assets/register.py +++ b/isaaclab_arena/assets/register.py @@ -3,7 +3,7 @@ # # SPDX-License-Identifier: Apache-2.0 -from isaaclab_arena.assets.asset_registry import ( +from isaaclab_arena.assets.registries import ( AssetRegistry, DeviceRegistry, EnvironmentRegistry, diff --git a/isaaclab_arena/assets/asset_registry.py b/isaaclab_arena/assets/registries.py similarity index 100% rename from isaaclab_arena/assets/asset_registry.py rename to isaaclab_arena/assets/registries.py diff --git a/isaaclab_arena/environments/arena_env_builder.py b/isaaclab_arena/environments/arena_env_builder.py index 2e77bfd77..12b7827ec 100644 --- a/isaaclab_arena/environments/arena_env_builder.py +++ b/isaaclab_arena/environments/arena_env_builder.py @@ -17,9 +17,9 @@ from isaaclab_tasks.utils import parse_env_cfg from isaaclab_teleop import IsaacTeleopCfg -from isaaclab_arena.assets.asset_registry import DeviceRegistry from isaaclab_arena.assets.object import Object from isaaclab_arena.assets.object_reference import ObjectReference +from isaaclab_arena.assets.registries import DeviceRegistry from isaaclab_arena.embodiments.no_embodiment import NoEmbodiment from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment from isaaclab_arena.environments.isaaclab_arena_manager_based_env import ( diff --git a/isaaclab_arena/environments/isaaclab_interop.py b/isaaclab_arena/environments/isaaclab_interop.py index 2c3bd300a..945d3d38d 100644 --- a/isaaclab_arena/environments/isaaclab_interop.py +++ b/isaaclab_arena/environments/isaaclab_interop.py @@ -5,7 +5,7 @@ import argparse -from isaaclab_arena.assets.asset_registry import EnvironmentRegistry +from isaaclab_arena.assets.registries import EnvironmentRegistry from isaaclab_arena_environments.cli import ensure_environments_registered diff --git a/isaaclab_arena/evaluation/policy_runner.py b/isaaclab_arena/evaluation/policy_runner.py index 6859e65dd..a0aea559d 100644 --- a/isaaclab_arena/evaluation/policy_runner.py +++ b/isaaclab_arena/evaluation/policy_runner.py @@ -30,7 +30,7 @@ def get_policy_cls(policy_type: str) -> type["PolicyBase"]: the policy_type argument as a string representing the module path and class name. """ - from isaaclab_arena.assets.asset_registry import PolicyRegistry + from isaaclab_arena.assets.registries import PolicyRegistry policy_registry = PolicyRegistry() if policy_registry.is_registered(policy_type): diff --git a/isaaclab_arena/examples/compile_env_notebook.py b/isaaclab_arena/examples/compile_env_notebook.py index cee81aa28..109f9f17a 100644 --- a/isaaclab_arena/examples/compile_env_notebook.py +++ b/isaaclab_arena/examples/compile_env_notebook.py @@ -16,7 +16,7 @@ # %% -from isaaclab_arena.assets.asset_registry import AssetRegistry +from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_achieve_cube_goal_pose.py b/isaaclab_arena/tests/test_achieve_cube_goal_pose.py index 2819bc6f2..7921e1c54 100644 --- a/isaaclab_arena/tests/test_achieve_cube_goal_pose.py +++ b/isaaclab_arena/tests/test_achieve_cube_goal_pose.py @@ -22,7 +22,7 @@ def get_test_environment(num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_assembly_task.py b/isaaclab_arena/tests/test_assembly_task.py index 45ee85fb3..c7ad29fd3 100644 --- a/isaaclab_arena/tests/test_assembly_task.py +++ b/isaaclab_arena/tests/test_assembly_task.py @@ -18,7 +18,7 @@ def get_peg_insert_test_environment(num_envs: int, remove_events: bool = False): """Returns a peg insert environment for testing.""" import isaaclab.sim as sim_utils - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder @@ -88,7 +88,7 @@ def get_gear_mesh_test_environment(num_envs: int, remove_events: bool = False): """Returns a gear mesh environment for testing.""" import isaaclab.sim as sim_utils - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_asset_registry.py b/isaaclab_arena/tests/test_asset_registry.py index 885875f2f..de0eee5eb 100644 --- a/isaaclab_arena/tests/test_asset_registry.py +++ b/isaaclab_arena/tests/test_asset_registry.py @@ -16,7 +16,7 @@ def _test_default_assets_registered(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry asset_registry = AssetRegistry() assert asset_registry is not None @@ -46,8 +46,8 @@ def test_default_assets_registered(): def _test_all_assets_in_registry(simulation_app): # Import the necessary classes. - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object import Object + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -131,8 +131,8 @@ def test_all_assets_in_registry(): def _test_hdr_images_registered(simulation_app): - from isaaclab_arena.assets.asset_registry import HDRImageRegistry from isaaclab_arena.assets.hdr_image import HDRImage + from isaaclab_arena.assets.registries import HDRImageRegistry hdr_registry = HDRImageRegistry() all_keys = hdr_registry.get_all_keys() @@ -168,7 +168,7 @@ def _test_hdr_image_spawn(simulation_app): This test only needs to confirm that the DomeLight + HDRImage mechanism works in a live simulation, so a single HDR is sufficient. """ - from isaaclab_arena.assets.asset_registry import AssetRegistry, HDRImageRegistry + from isaaclab_arena.assets.registries import AssetRegistry, HDRImageRegistry from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -223,7 +223,7 @@ def test_hdr_image_spawn(): def _test_multi_light_in_scene(simulation_app): from pxr import UsdLux - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_camera_observation.py b/isaaclab_arena/tests/test_camera_observation.py index e68332e9b..b6d84d110 100644 --- a/isaaclab_arena/tests/test_camera_observation.py +++ b/isaaclab_arena/tests/test_camera_observation.py @@ -17,7 +17,7 @@ def _test_camera_observation(simulation_app) -> bool: - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.gr1t2.gr1t2 import GR1T2PinkEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_close_door.py b/isaaclab_arena/tests/test_close_door.py index 2fa61cfc0..9a5079c53 100644 --- a/isaaclab_arena/tests/test_close_door.py +++ b/isaaclab_arena/tests/test_close_door.py @@ -16,7 +16,7 @@ def get_test_environment(remove_reset_door_state_event: bool, num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_contact_sensor_not_at_root.py b/isaaclab_arena/tests/test_contact_sensor_not_at_root.py index 1bbe7932f..b7f21d9e8 100644 --- a/isaaclab_arena/tests/test_contact_sensor_not_at_root.py +++ b/isaaclab_arena/tests/test_contact_sensor_not_at_root.py @@ -19,8 +19,8 @@ def get_test_environment(num_envs: int): # This test tests that we can successfully at a contact sensor to an object # whose rigid body is not at the root of the USD file. - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_detect_object_type.py b/isaaclab_arena/tests/test_detect_object_type.py index b50b3ff38..1426ce777 100644 --- a/isaaclab_arena/tests/test_detect_object_type.py +++ b/isaaclab_arena/tests/test_detect_object_type.py @@ -62,8 +62,8 @@ def _test_detect_object_type(simulation_app): def _test_detect_object_type_for_all_objects(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_utils import detect_object_type + from isaaclab_arena.assets.registries import AssetRegistry asset_registry = AssetRegistry() for object_asset in asset_registry.get_assets_by_tag("object"): @@ -87,9 +87,9 @@ def _test_detect_object_type_for_all_objects(simulation_app): def _test_auto_object_type(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object import Object from isaaclab_arena.assets.object_base import ObjectType + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_device_and_retargeter_registry.py b/isaaclab_arena/tests/test_device_and_retargeter_registry.py index c90520067..a7db6be1d 100644 --- a/isaaclab_arena/tests/test_device_and_retargeter_registry.py +++ b/isaaclab_arena/tests/test_device_and_retargeter_registry.py @@ -19,7 +19,7 @@ def _test_all_devices_and_retargeters_in_registry(simulation_app): # Import the necessary classes. - from isaaclab_arena.assets.asset_registry import AssetRegistry, DeviceRegistry, RetargeterRegistry + from isaaclab_arena.assets.registries import AssetRegistry, DeviceRegistry, RetargeterRegistry from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment from isaaclab_arena.scene.scene import Scene diff --git a/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py b/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py index 1cd6f059f..3e78c7d32 100644 --- a/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py +++ b/isaaclab_arena/tests/test_dexsuite_kuka_lift_example.py @@ -13,7 +13,7 @@ def test_dexsuite_lift_example_in_cli_registry() -> None: pytest.importorskip( "isaaclab_tasks.manager_based.manipulation.dexsuite.config.kuka_allegro.dexsuite_kuka_allegro_env_cfg" ) - from isaaclab_arena.assets.asset_registry import EnvironmentRegistry + from isaaclab_arena.assets.registries import EnvironmentRegistry from isaaclab_arena_environments.cli import ensure_environments_registered ensure_environments_registered() @@ -27,7 +27,7 @@ def test_procedural_assets_registered() -> None: pytest.importorskip( "isaaclab_tasks.manager_based.manipulation.dexsuite.config.kuka_allegro.dexsuite_kuka_allegro_env_cfg" ) - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry reg = AssetRegistry() assert reg.is_registered("procedural_table") @@ -40,7 +40,7 @@ def test_dexsuite_kuka_lift_task_matches_lift_mdp_flags() -> None: "isaaclab_tasks.manager_based.manipulation.dexsuite.config.kuka_allegro.dexsuite_kuka_allegro_env_cfg" ) - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.metrics.success_rate import SuccessRateMetric from isaaclab_arena.tasks.lift_object_task import DexsuiteLiftTask, DexsuiteLiftTerminationsCfg, LiftObjectTask from isaaclab_arena.utils.pose import Pose, PoseRange diff --git a/isaaclab_arena/tests/test_duplicate_asset.py b/isaaclab_arena/tests/test_duplicate_asset.py index ae2e3b970..f89f66d49 100644 --- a/isaaclab_arena/tests/test_duplicate_asset.py +++ b/isaaclab_arena/tests/test_duplicate_asset.py @@ -16,7 +16,7 @@ def get_test_environment(num_envs: int, position_1: tuple[float, float, float], position_2: tuple[float, float, float]): """Returns a scene with two copies of the same cube object.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_environment_registry.py b/isaaclab_arena/tests/test_environment_registry.py index acdf36e95..8317f2349 100644 --- a/isaaclab_arena/tests/test_environment_registry.py +++ b/isaaclab_arena/tests/test_environment_registry.py @@ -5,7 +5,7 @@ """Tests that all environments in isaaclab_arena_environments are registered.""" -from isaaclab_arena.assets.asset_registry import EnvironmentRegistry +from isaaclab_arena.assets.registries import EnvironmentRegistry from isaaclab_arena_environments.cli import ensure_environments_registered diff --git a/isaaclab_arena/tests/test_events.py b/isaaclab_arena/tests/test_events.py index c74067b91..0337cdc4b 100644 --- a/isaaclab_arena/tests/test_events.py +++ b/isaaclab_arena/tests/test_events.py @@ -24,8 +24,8 @@ def _test_set_object_pose_per_env_event(simulation_app): from isaaclab.managers import EventTermCfg, SceneEntityCfg - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -118,7 +118,7 @@ def _test_object_moves_with_initial_velocity(simulation_app): """Test that a sphere moves with the given initial velocity after reset.""" import isaaclab.sim as sim_utils - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_g1_agile_tabletop_apple_to_plate.py b/isaaclab_arena/tests/test_g1_agile_tabletop_apple_to_plate.py index 1dd17d192..631cac793 100644 --- a/isaaclab_arena/tests/test_g1_agile_tabletop_apple_to_plate.py +++ b/isaaclab_arena/tests/test_g1_agile_tabletop_apple_to_plate.py @@ -24,7 +24,7 @@ def get_test_environment(num_envs: int): isolate task termination logic from the full production environment. """ - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.g1.g1 import G1WBCAgileJointEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_g1_wbc_embodiment.py b/isaaclab_arena/tests/test_g1_wbc_embodiment.py index 864dedfbf..98cc4c996 100644 --- a/isaaclab_arena/tests/test_g1_wbc_embodiment.py +++ b/isaaclab_arena/tests/test_g1_wbc_embodiment.py @@ -48,7 +48,7 @@ def get_test_environment(num_envs: int, pink_ik_enabled: bool): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.g1.g1 import G1WBCJointEmbodiment, G1WBCPinkEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_galbot_embodiment.py b/isaaclab_arena/tests/test_galbot_embodiment.py index dce108882..650449579 100644 --- a/isaaclab_arena/tests/test_galbot_embodiment.py +++ b/isaaclab_arena/tests/test_galbot_embodiment.py @@ -18,9 +18,9 @@ def get_galbot_test_environment(num_envs: int = 1): """Returns a kitchen scene with Galbot embodiment for testing.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_base import ObjectType from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.common.arm_mode import ArmMode from isaaclab_arena.embodiments.galbot.galbot import GalbotEmbodiment diff --git a/isaaclab_arena/tests/test_kuka_allegro_embodiment.py b/isaaclab_arena/tests/test_kuka_allegro_embodiment.py index 3a06b12bf..877d229f1 100644 --- a/isaaclab_arena/tests/test_kuka_allegro_embodiment.py +++ b/isaaclab_arena/tests/test_kuka_allegro_embodiment.py @@ -13,7 +13,7 @@ def test_kuka_allegro_registered_in_asset_registry() -> None: pytest.importorskip( "isaaclab_tasks.manager_based.manipulation.dexsuite.config.kuka_allegro.dexsuite_kuka_allegro_env_cfg" ) - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.embodiments.kuka_allegro.kuka_allegro import KukaAllegroEmbodiment reg = AssetRegistry() diff --git a/isaaclab_arena/tests/test_locomanip_object_on_termination.py b/isaaclab_arena/tests/test_locomanip_object_on_termination.py index b49802f99..6e122fef3 100644 --- a/isaaclab_arena/tests/test_locomanip_object_on_termination.py +++ b/isaaclab_arena/tests/test_locomanip_object_on_termination.py @@ -16,7 +16,7 @@ def _test_g1_locomanip_object_on_destination_termination(simulation_app) -> bool from isaaclab.managers import SceneEntityCfg - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_object_configuration.py b/isaaclab_arena/tests/test_object_configuration.py index ca51dc685..1775cc1fc 100644 --- a/isaaclab_arena/tests/test_object_configuration.py +++ b/isaaclab_arena/tests/test_object_configuration.py @@ -10,7 +10,7 @@ def _test_object_initial_pose_update(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.utils.pose import Pose asset_registry = AssetRegistry() diff --git a/isaaclab_arena/tests/test_object_of_type_base.py b/isaaclab_arena/tests/test_object_of_type_base.py index d87eebc0e..baed7e3f9 100644 --- a/isaaclab_arena/tests/test_object_of_type_base.py +++ b/isaaclab_arena/tests/test_object_of_type_base.py @@ -16,9 +16,9 @@ def _test_object_of_type_base(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_base import ObjectType from isaaclab_arena.assets.object_library import LibraryObject + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_object_on_termination.py b/isaaclab_arena/tests/test_object_on_termination.py index 2d271cb02..70a297161 100644 --- a/isaaclab_arena/tests/test_object_on_termination.py +++ b/isaaclab_arena/tests/test_object_on_termination.py @@ -21,8 +21,8 @@ def _test_object_on_destination_termination(simulation_app) -> bool: from isaaclab.managers import SceneEntityCfg - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_object_pose_randomization.py b/isaaclab_arena/tests/test_object_pose_randomization.py index 998ccfb04..53b064d20 100644 --- a/isaaclab_arena/tests/test_object_pose_randomization.py +++ b/isaaclab_arena/tests/test_object_pose_randomization.py @@ -17,7 +17,7 @@ def _test_object_pose_randomization(simulation_app): """Test that object poses are randomized within the specified range.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_object_scale.py b/isaaclab_arena/tests/test_object_scale.py index 93fc56b4d..37424455f 100644 --- a/isaaclab_arena/tests/test_object_scale.py +++ b/isaaclab_arena/tests/test_object_scale.py @@ -11,7 +11,7 @@ def _test_object_scale_default_and_override(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry asset_registry = AssetRegistry() diff --git a/isaaclab_arena/tests/test_object_set.py b/isaaclab_arena/tests/test_object_set.py index 872ec34cf..e0dc7b973 100644 --- a/isaaclab_arena/tests/test_object_set.py +++ b/isaaclab_arena/tests/test_object_set.py @@ -18,7 +18,7 @@ def _build_and_reset_env(simulation_app, scene_assets, env_name="object_set_test", task=None): """Build arena env with given scene and optional task, then reset. Returns env (caller must close).""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -53,8 +53,8 @@ def _run_pick_and_place_object_set_test( """Build env with one object set and PickAndPlaceTask, run common assertions, close. path_contains: str or list[str] of length NUM_ENVS.""" from isaacsim.core.utils.stage import get_current_stage - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.tasks.pick_and_place_task import PickAndPlaceTask from isaaclab_arena.utils.usd_helpers import get_asset_usd_path_from_prim_path @@ -114,8 +114,8 @@ def _test_empty_object_set(simulation_app): def _test_articulation_object_set(simulation_app): - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_set import RigidObjectSet + from isaaclab_arena.assets.registries import AssetRegistry asset_registry = AssetRegistry() microwave = asset_registry.get_asset_by_name("microwave")() @@ -129,9 +129,9 @@ def _test_articulation_object_set(simulation_app): def _test_single_object_in_one_object_set(simulation_app): from isaacsim.core.utils.stage import get_current_stage - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference from isaaclab_arena.assets.object_set import RigidObjectSet + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -196,9 +196,9 @@ def _test_single_object_in_one_object_set(simulation_app): def _test_multi_objects_in_one_object_set(simulation_app): from isaacsim.core.utils.stage import get_current_stage - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference from isaaclab_arena.assets.object_set import RigidObjectSet + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment @@ -270,8 +270,8 @@ def _test_multi_objects_in_one_object_set(simulation_app): def _test_multi_object_sets(simulation_app): from isaacsim.core.utils.stage import get_current_stage - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_set import RigidObjectSet + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_object_set_on_termination.py b/isaaclab_arena/tests/test_object_set_on_termination.py index 9897052b1..377670fc1 100644 --- a/isaaclab_arena/tests/test_object_set_on_termination.py +++ b/isaaclab_arena/tests/test_object_set_on_termination.py @@ -19,9 +19,9 @@ def _test_object_set_on_destination_termination(simulation_app) -> bool: from isaaclab.managers import SceneEntityCfg - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference from isaaclab_arena.assets.object_set import RigidObjectSet + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_open_door.py b/isaaclab_arena/tests/test_open_door.py index 77778ed94..2f05c7d54 100644 --- a/isaaclab_arena/tests/test_open_door.py +++ b/isaaclab_arena/tests/test_open_door.py @@ -16,7 +16,7 @@ def get_test_environment(remove_reset_door_state_event: bool, num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_physics_presets.py b/isaaclab_arena/tests/test_physics_presets.py index 52ee8df88..eef54c0d3 100644 --- a/isaaclab_arena/tests/test_physics_presets.py +++ b/isaaclab_arena/tests/test_physics_presets.py @@ -66,7 +66,7 @@ def test_solver_type(self): def _build_env_cfg(presets: str | None): """Build a real env cfg through ArenaEnvBuilder.compose_manager_cfg with the given preset.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_place_upright_task.py b/isaaclab_arena/tests/test_place_upright_task.py index b0e8ce2dc..98c6b1934 100644 --- a/isaaclab_arena/tests/test_place_upright_task.py +++ b/isaaclab_arena/tests/test_place_upright_task.py @@ -15,7 +15,7 @@ def get_test_environment(dont_reset_placeable_object_pose: bool, num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.agibot.agibot import AgibotEmbodiment from isaaclab_arena.embodiments.common.arm_mode import ArmMode diff --git a/isaaclab_arena/tests/test_press_coffee_machine_button.py b/isaaclab_arena/tests/test_press_coffee_machine_button.py index 381941eb0..b993c10cf 100644 --- a/isaaclab_arena/tests/test_press_coffee_machine_button.py +++ b/isaaclab_arena/tests/test_press_coffee_machine_button.py @@ -16,7 +16,7 @@ def get_test_environment(num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_reference_objects.py b/isaaclab_arena/tests/test_reference_objects.py index 3b0043f62..7f7da5a48 100644 --- a/isaaclab_arena/tests/test_reference_objects.py +++ b/isaaclab_arena/tests/test_reference_objects.py @@ -39,7 +39,7 @@ def __init__(self): def get_test_scene(): - from isaaclab_arena.assets.asset_registry import AssetRegistry # noqa: F401 + from isaaclab_arena.assets.registries import AssetRegistry # noqa: F401 from isaaclab_arena.scene.scene import Scene asset_registry = AssetRegistry() diff --git a/isaaclab_arena/tests/test_revolute_joint_moved_rate_metric.py b/isaaclab_arena/tests/test_revolute_joint_moved_rate_metric.py index dacaea778..5e6537c0a 100644 --- a/isaaclab_arena/tests/test_revolute_joint_moved_rate_metric.py +++ b/isaaclab_arena/tests/test_revolute_joint_moved_rate_metric.py @@ -27,7 +27,7 @@ def _test_revolute_joint_moved_rate(simulation_app): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_robot_initial_position.py b/isaaclab_arena/tests/test_robot_initial_position.py index e67f6fd48..f09448f66 100644 --- a/isaaclab_arena/tests/test_robot_initial_position.py +++ b/isaaclab_arena/tests/test_robot_initial_position.py @@ -20,7 +20,7 @@ def _test_robot_initial_position(simulation_app): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_scene_add_assets_ordering.py b/isaaclab_arena/tests/test_scene_add_assets_ordering.py index ba98fae34..3912ca7fc 100644 --- a/isaaclab_arena/tests/test_scene_add_assets_ordering.py +++ b/isaaclab_arena/tests/test_scene_add_assets_ordering.py @@ -10,8 +10,8 @@ def _test_object_references_added_before_parents(simulation_app) -> bool: """ObjectReferences can be added before their parents.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.scene.scene import Scene # Set up a test scene @@ -33,8 +33,8 @@ def _test_object_references_added_before_parents(simulation_app) -> bool: def _test_object_reference_without_parent_raises(simulation_app) -> bool: """Adding an ObjectReference whose parent is not in the scene should fail.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.scene.scene import Scene asset_registry = AssetRegistry() diff --git a/isaaclab_arena/tests/test_scene_to_usd.py b/isaaclab_arena/tests/test_scene_to_usd.py index 8490d27ec..75c75ef2b 100644 --- a/isaaclab_arena/tests/test_scene_to_usd.py +++ b/isaaclab_arena/tests/test_scene_to_usd.py @@ -16,7 +16,7 @@ def _test_scene_to_usd(simulation_app, output_path: pathlib.Path) -> bool: from pxr import Gf, Usd - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.scene.scene import Scene from isaaclab_arena.utils.pose import Pose diff --git a/isaaclab_arena/tests/test_sequential_open_door.py b/isaaclab_arena/tests/test_sequential_open_door.py index b1b525ca1..037237b3e 100644 --- a/isaaclab_arena/tests/test_sequential_open_door.py +++ b/isaaclab_arena/tests/test_sequential_open_door.py @@ -16,7 +16,7 @@ def get_test_environment(remove_reset_door_state_event: bool, num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_sorting_task.py b/isaaclab_arena/tests/test_sorting_task.py index 7d79acfb2..0e5bee36a 100644 --- a/isaaclab_arena/tests/test_sorting_task.py +++ b/isaaclab_arena/tests/test_sorting_task.py @@ -18,7 +18,7 @@ def get_test_environment(num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_success_rate_metric.py b/isaaclab_arena/tests/test_success_rate_metric.py index 72d98ae77..c18d0cb27 100644 --- a/isaaclab_arena/tests/test_success_rate_metric.py +++ b/isaaclab_arena/tests/test_success_rate_metric.py @@ -33,8 +33,8 @@ def _test_success_rate_metric(simulation_app): from isaaclab.managers import EventTermCfg, SceneEntityCfg - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena/tests/test_turn_stand_mixer_knob.py b/isaaclab_arena/tests/test_turn_stand_mixer_knob.py index 12ed0784c..c821e1e39 100644 --- a/isaaclab_arena/tests/test_turn_stand_mixer_knob.py +++ b/isaaclab_arena/tests/test_turn_stand_mixer_knob.py @@ -18,7 +18,7 @@ def get_test_environment(remove_reset_knob_state_event: bool, num_envs: int): """Returns a scene which we use for these tests.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.franka.franka import FrankaIKEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder diff --git a/isaaclab_arena/tests/test_usd_pose_helpers.py b/isaaclab_arena/tests/test_usd_pose_helpers.py index ca1d75399..442bead03 100644 --- a/isaaclab_arena/tests/test_usd_pose_helpers.py +++ b/isaaclab_arena/tests/test_usd_pose_helpers.py @@ -16,7 +16,7 @@ def _test_get_prim_pose_in_default_prim_frame(simulation_app): from pxr import Usd - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.utils.usd_pose_helpers import get_prim_pose_in_default_prim_frame asset_registry = AssetRegistry() diff --git a/isaaclab_arena/tests/test_xr_anchor_pose.py b/isaaclab_arena/tests/test_xr_anchor_pose.py index e39005efc..23e56d0e0 100644 --- a/isaaclab_arena/tests/test_xr_anchor_pose.py +++ b/isaaclab_arena/tests/test_xr_anchor_pose.py @@ -14,7 +14,7 @@ def _test_gr1t2_xr_anchor_pose(simulation_app) -> bool: """Test GR1T2 XR anchor pose at origin and with robot transformation.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.utils.pose import Pose # Test 1: XR anchor at origin (no initial pose) @@ -92,7 +92,7 @@ def _test_g1_xr_anchor_pose(simulation_app) -> bool: """Test G1 XR anchor config: fixed prim-relative anchor (pelvis), independent of initial pose.""" from isaaclab.devices.openxr.xr_cfg import XrAnchorRotationMode - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.utils.pose import Pose asset_registry = AssetRegistry() @@ -146,7 +146,7 @@ def _test_g1_xr_anchor_pose(simulation_app) -> bool: def _test_xr_anchor_multiple_positions(simulation_app) -> bool: """Test XR anchor with multiple different robot positions.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.utils.pose import Pose asset_registry = AssetRegistry() diff --git a/isaaclab_arena_environments/cli.py b/isaaclab_arena_environments/cli.py index be2114e56..0cac4fc3f 100644 --- a/isaaclab_arena_environments/cli.py +++ b/isaaclab_arena_environments/cli.py @@ -6,7 +6,7 @@ import argparse import importlib -from isaaclab_arena.assets.asset_registry import EnvironmentRegistry +from isaaclab_arena.assets.registries import EnvironmentRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena_environments.example_environment_base import ExampleEnvironmentBase diff --git a/isaaclab_arena_environments/example_environment_base.py b/isaaclab_arena_environments/example_environment_base.py index 1f6e93198..b9ea285ed 100644 --- a/isaaclab_arena_environments/example_environment_base.py +++ b/isaaclab_arena_environments/example_environment_base.py @@ -18,7 +18,7 @@ class ExampleEnvironmentBase(ABC): name: str | None = None def __init__(self): - from isaaclab_arena.assets.asset_registry import AssetRegistry, DeviceRegistry, HDRImageRegistry + from isaaclab_arena.assets.registries import AssetRegistry, DeviceRegistry, HDRImageRegistry self.asset_registry = AssetRegistry() self.device_registry = DeviceRegistry() diff --git a/isaaclab_arena_examples/relations/isaac_sim_no_collision_notebook.py b/isaaclab_arena_examples/relations/isaac_sim_no_collision_notebook.py index e8799a812..cd5b274f5 100644 --- a/isaaclab_arena_examples/relations/isaac_sim_no_collision_notebook.py +++ b/isaaclab_arena_examples/relations/isaac_sim_no_collision_notebook.py @@ -45,8 +45,8 @@ def run_isaac_sim_no_collision_demo( import torch import tqdm - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena_examples/relations/isaac_sim_object_placer_notebook.py b/isaaclab_arena_examples/relations/isaac_sim_object_placer_notebook.py index d61246549..e4ef60478 100644 --- a/isaaclab_arena_examples/relations/isaac_sim_object_placer_notebook.py +++ b/isaaclab_arena_examples/relations/isaac_sim_object_placer_notebook.py @@ -37,8 +37,8 @@ def run_isaac_sim_object_placer_demo( import torch import tqdm - from isaaclab_arena.assets.asset_registry import AssetRegistry from isaaclab_arena.assets.object_reference import ObjectReference + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder from isaaclab_arena.environments.isaaclab_arena_environment import IsaacLabArenaEnvironment diff --git a/isaaclab_arena_g1/g1_whole_body_controller/wbc_policy/tests/test_g1_agile_policy.py b/isaaclab_arena_g1/g1_whole_body_controller/wbc_policy/tests/test_g1_agile_policy.py index ce2fab434..4c998aa49 100644 --- a/isaaclab_arena_g1/g1_whole_body_controller/wbc_policy/tests/test_g1_agile_policy.py +++ b/isaaclab_arena_g1/g1_whole_body_controller/wbc_policy/tests/test_g1_agile_policy.py @@ -27,7 +27,7 @@ def _get_agile_test_env(num_envs: int = 1): """Create a G1 robot with the AGILE WBC policy in an empty scene.""" - from isaaclab_arena.assets.asset_registry import AssetRegistry + from isaaclab_arena.assets.registries import AssetRegistry from isaaclab_arena.cli.isaaclab_arena_cli import get_isaaclab_arena_cli_parser from isaaclab_arena.embodiments.g1.g1 import G1WBCAgileJointEmbodiment from isaaclab_arena.environments.arena_env_builder import ArenaEnvBuilder