From 2762aeeaaa1e0c942a90d1eab1686cfde96e2f46 Mon Sep 17 00:00:00 2001 From: Antoine Richard Date: Thu, 26 Feb 2026 12:02:39 +0100 Subject: [PATCH] Better looking imports --- .../isaaclab/isaaclab/actuators/__init__.py | 33 ++-- source/isaaclab/isaaclab/assets/__init__.py | 31 ++-- .../isaaclab/assets/articulation/__init__.py | 17 +- .../isaaclab/assets/rigid_object/__init__.py | 17 +- .../rigid_object_collection/__init__.py | 17 +- source/isaaclab/isaaclab/cloner/__init__.py | 25 ++- source/isaaclab/isaaclab/devices/__init__.py | 23 ++- .../isaaclab/devices/gamepad/__init__.py | 15 +- .../isaaclab/devices/keyboard/__init__.py | 15 +- .../isaaclab/devices/spacemouse/__init__.py | 15 +- source/isaaclab/isaaclab/envs/__init__.py | 39 +++-- .../isaaclab/envs/mdp/actions/__init__.py | 51 +++--- .../isaaclab/envs/mdp/commands/__init__.py | 31 ++-- source/isaaclab/isaaclab/envs/ui/__init__.py | 15 +- source/isaaclab/isaaclab/managers/__init__.py | 55 +++---- source/isaaclab/isaaclab/markers/__init__.py | 11 +- source/isaaclab/isaaclab/scene/__init__.py | 11 +- .../isaaclab/sensors/camera/__init__.py | 24 +-- .../sensors/contact_sensor/__init__.py | 17 +- .../sensors/frame_transformer/__init__.py | 17 +- .../isaaclab/isaaclab/sensors/imu/__init__.py | 17 +- .../isaaclab/sensors/ray_caster/__init__.py | 29 ++-- .../isaaclab/sim/converters/__init__.py | 23 ++- .../isaaclab/isaaclab/sim/schemas/__init__.py | 85 +++++----- .../isaaclab/sim/spawners/__init__.py | 151 +++++++++--------- .../sim/spawners/from_files/__init__.py | 35 ++-- .../isaaclab/sim/spawners/lights/__init__.py | 11 +- .../sim/spawners/materials/__init__.py | 15 +- .../isaaclab/sim/spawners/meshes/__init__.py | 23 ++- .../isaaclab/sim/spawners/sensors/__init__.py | 11 +- .../isaaclab/sim/spawners/shapes/__init__.py | 11 +- .../sim/spawners/wrappers/__init__.py | 11 +- .../isaaclab/isaaclab/sim/views/__init__.py | 9 +- source/isaaclab/isaaclab/terrains/__init__.py | 37 +++-- .../terrains/height_field/__init__.py | 17 +- .../isaaclab/terrains/trimesh/__init__.py | 17 +- .../isaaclab/isaaclab/ui/widgets/__init__.py | 15 +- source/isaaclab/isaaclab/utils/__init__.py | 3 + .../isaaclab/isaaclab/utils/lazy_imports.py | 57 +++++++ .../isaaclab_assets/sensors/__init__.py | 11 +- .../isaaclab_contrib/assets/__init__.py | 9 +- .../assets/multirotor/__init__.py | 15 +- .../isaaclab_contrib/sensors/__init__.py | 9 +- .../sensors/tacsl_sensor/__init__.py | 13 +- .../isaaclab_newton/cloner/__init__.py | 9 +- .../isaaclab_physx/assets/__init__.py | 19 +-- .../assets/articulation/__init__.py | 11 +- .../assets/deformable_object/__init__.py | 13 +- .../assets/rigid_object/__init__.py | 11 +- .../rigid_object_collection/__init__.py | 11 +- .../assets/surface_gripper/__init__.py | 11 +- .../isaaclab_physx/cloner/__init__.py | 9 +- .../isaaclab_physx/physics/__init__.py | 11 +- .../isaaclab_physx/sensors/__init__.py | 13 +- .../sensors/contact_sensor/__init__.py | 11 +- .../sensors/frame_transformer/__init__.py | 11 +- .../isaaclab_physx/sensors/imu/__init__.py | 11 +- .../isaaclab_rl/rsl_rl/__init__.py | 43 +++-- .../drone_arl/mdp/commands/__init__.py | 11 +- .../inhand/mdp/commands/__init__.py | 11 +- .../isaaclab_teleop/__init__.py | 17 +- .../deprecated/openxr/__init__.py | 13 +- 62 files changed, 626 insertions(+), 733 deletions(-) create mode 100644 source/isaaclab/isaaclab/utils/lazy_imports.py diff --git a/source/isaaclab/isaaclab/actuators/__init__.py b/source/isaaclab/isaaclab/actuators/__init__.py index f96315ef7e0c..7d1081083d59 100644 --- a/source/isaaclab/isaaclab/actuators/__init__.py +++ b/source/isaaclab/isaaclab/actuators/__init__.py @@ -22,22 +22,19 @@ and called by the :class:`isaaclab.assets.Articulation` class. """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "actuator_base": ["ActuatorBase"], - "actuator_base_cfg": ["ActuatorBaseCfg"], - "actuator_net": ["ActuatorNetLSTM", "ActuatorNetMLP"], - "actuator_net_cfg": ["ActuatorNetLSTMCfg", "ActuatorNetMLPCfg"], - "actuator_pd": ["DCMotor", "DelayedPDActuator", "IdealPDActuator", "ImplicitActuator", "RemotizedPDActuator"], - "actuator_pd_cfg": [ - "DCMotorCfg", - "DelayedPDActuatorCfg", - "IdealPDActuatorCfg", - "ImplicitActuatorCfg", - "RemotizedPDActuatorCfg", - ], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("actuator_base", "ActuatorBase"), + ("actuator_base_cfg", "ActuatorBaseCfg"), + ("actuator_net", ["ActuatorNetLSTM", "ActuatorNetMLP"]), + ("actuator_net_cfg", ["ActuatorNetLSTMCfg", "ActuatorNetMLPCfg"]), + ("actuator_pd", ["DCMotor", "DelayedPDActuator", "IdealPDActuator", "ImplicitActuator", "RemotizedPDActuator"]), + ("actuator_pd_cfg", [ + "DCMotorCfg", + "DelayedPDActuatorCfg", + "IdealPDActuatorCfg", + "ImplicitActuatorCfg", + "RemotizedPDActuatorCfg", + ]), ) diff --git a/source/isaaclab/isaaclab/assets/__init__.py b/source/isaaclab/isaaclab/assets/__init__.py index 25ce73db1e8a..876644d2fa5b 100644 --- a/source/isaaclab/isaaclab/assets/__init__.py +++ b/source/isaaclab/isaaclab/assets/__init__.py @@ -38,21 +38,18 @@ the corresponding actuator torques. """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "asset_base": ["AssetBase"], - "asset_base_cfg": ["AssetBaseCfg"], - "articulation": ["BaseArticulation", "BaseArticulationData", "Articulation", "ArticulationCfg", "ArticulationData"], - "rigid_object": ["BaseRigidObject", "BaseRigidObjectData", "RigidObject", "RigidObjectCfg", "RigidObjectData"], - "rigid_object_collection": [ - "BaseRigidObjectCollection", - "BaseRigidObjectCollectionData", - "RigidObjectCollection", - "RigidObjectCollectionCfg", - "RigidObjectCollectionData", - ], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("asset_base", "AssetBase"), + ("asset_base_cfg", "AssetBaseCfg"), + ("articulation", ["BaseArticulation", "BaseArticulationData", "Articulation", "ArticulationCfg", "ArticulationData"]), + ("rigid_object", ["BaseRigidObject", "BaseRigidObjectData", "RigidObject", "RigidObjectCfg", "RigidObjectData"]), + ("rigid_object_collection", [ + "BaseRigidObjectCollection", + "BaseRigidObjectCollectionData", + "RigidObjectCollection", + "RigidObjectCollectionCfg", + "RigidObjectCollectionData", + ]), ) diff --git a/source/isaaclab/isaaclab/assets/articulation/__init__.py b/source/isaaclab/isaaclab/assets/articulation/__init__.py index 8d4158b516b9..bec107f33193 100644 --- a/source/isaaclab/isaaclab/assets/articulation/__init__.py +++ b/source/isaaclab/isaaclab/assets/articulation/__init__.py @@ -5,15 +5,12 @@ """Sub-module for rigid articulated assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_articulation": ["BaseArticulation"], - "base_articulation_data": ["BaseArticulationData"], - "articulation": ["Articulation"], - "articulation_cfg": ["ArticulationCfg"], - "articulation_data": ["ArticulationData"], - }, +lazy_export( + ("base_articulation", "BaseArticulation"), + ("base_articulation_data", "BaseArticulationData"), + ("articulation", "Articulation"), + ("articulation_cfg", "ArticulationCfg"), + ("articulation_data", "ArticulationData"), ) diff --git a/source/isaaclab/isaaclab/assets/rigid_object/__init__.py b/source/isaaclab/isaaclab/assets/rigid_object/__init__.py index aeafad4c5d12..9522c28f9dff 100644 --- a/source/isaaclab/isaaclab/assets/rigid_object/__init__.py +++ b/source/isaaclab/isaaclab/assets/rigid_object/__init__.py @@ -5,15 +5,12 @@ """Sub-module for rigid object assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_rigid_object": ["BaseRigidObject"], - "base_rigid_object_data": ["BaseRigidObjectData"], - "rigid_object": ["RigidObject"], - "rigid_object_cfg": ["RigidObjectCfg"], - "rigid_object_data": ["RigidObjectData"], - }, +lazy_export( + ("base_rigid_object", "BaseRigidObject"), + ("base_rigid_object_data", "BaseRigidObjectData"), + ("rigid_object", "RigidObject"), + ("rigid_object_cfg", "RigidObjectCfg"), + ("rigid_object_data", "RigidObjectData"), ) diff --git a/source/isaaclab/isaaclab/assets/rigid_object_collection/__init__.py b/source/isaaclab/isaaclab/assets/rigid_object_collection/__init__.py index aa73ac5213be..dd54c4cce686 100644 --- a/source/isaaclab/isaaclab/assets/rigid_object_collection/__init__.py +++ b/source/isaaclab/isaaclab/assets/rigid_object_collection/__init__.py @@ -5,15 +5,12 @@ """Sub-module for rigid object collection.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_rigid_object_collection": ["BaseRigidObjectCollection"], - "base_rigid_object_collection_data": ["BaseRigidObjectCollectionData"], - "rigid_object_collection": ["RigidObjectCollection"], - "rigid_object_collection_cfg": ["RigidObjectCollectionCfg"], - "rigid_object_collection_data": ["RigidObjectCollectionData"], - }, +lazy_export( + ("base_rigid_object_collection", "BaseRigidObjectCollection"), + ("base_rigid_object_collection_data", "BaseRigidObjectCollectionData"), + ("rigid_object_collection", "RigidObjectCollection"), + ("rigid_object_collection_cfg", "RigidObjectCollectionCfg"), + ("rigid_object_collection_data", "RigidObjectCollectionData"), ) diff --git a/source/isaaclab/isaaclab/cloner/__init__.py b/source/isaaclab/isaaclab/cloner/__init__.py index cbc2c1861df4..590493bb0dd8 100644 --- a/source/isaaclab/isaaclab/cloner/__init__.py +++ b/source/isaaclab/isaaclab/cloner/__init__.py @@ -5,19 +5,16 @@ """Sub-package for environment cloning utilities.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "cloner_cfg": ["TemplateCloneCfg"], - "cloner_strategies": ["random", "sequential"], - "cloner_utils": [ - "clone_from_template", - "make_clone_plan", - "usd_replicate", - "filter_collisions", - "grid_transforms", - ], - }, +lazy_export( + ("cloner_cfg", "TemplateCloneCfg"), + ("cloner_strategies", ["random", "sequential"]), + ("cloner_utils", [ + "clone_from_template", + "make_clone_plan", + "usd_replicate", + "filter_collisions", + "grid_transforms", + ]), ) diff --git a/source/isaaclab/isaaclab/devices/__init__.py b/source/isaaclab/isaaclab/devices/__init__.py index 84f1ae0273c4..e8eba41ded54 100644 --- a/source/isaaclab/isaaclab/devices/__init__.py +++ b/source/isaaclab/isaaclab/devices/__init__.py @@ -20,19 +20,16 @@ the peripheral device. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, +lazy_export( + ("device_base", ["DeviceBase", "DeviceCfg", "DevicesCfg"]), + ("gamepad", ["Se2Gamepad", "Se2GamepadCfg", "Se3Gamepad", "Se3GamepadCfg"]), + ("haply", ["HaplyDevice", "HaplyDeviceCfg"]), + ("keyboard", ["Se2Keyboard", "Se2KeyboardCfg", "Se3Keyboard", "Se3KeyboardCfg"]), + ("openxr", ["ManusVive", "ManusViveCfg", "OpenXRDevice", "OpenXRDeviceCfg"]), + ("retargeter_base", ["RetargeterBase", "RetargeterCfg"]), + ("spacemouse", ["Se2SpaceMouse", "Se2SpaceMouseCfg", "Se3SpaceMouse", "Se3SpaceMouseCfg"]), + ("teleop_device_factory", "create_teleop_device"), submodules=["openxr"], - submod_attrs={ - "device_base": ["DeviceBase", "DeviceCfg", "DevicesCfg"], - "gamepad": ["Se2Gamepad", "Se2GamepadCfg", "Se3Gamepad", "Se3GamepadCfg"], - "haply": ["HaplyDevice", "HaplyDeviceCfg"], - "keyboard": ["Se2Keyboard", "Se2KeyboardCfg", "Se3Keyboard", "Se3KeyboardCfg"], - "openxr": ["ManusVive", "ManusViveCfg", "OpenXRDevice", "OpenXRDeviceCfg"], - "retargeter_base": ["RetargeterBase", "RetargeterCfg"], - "spacemouse": ["Se2SpaceMouse", "Se2SpaceMouseCfg", "Se3SpaceMouse", "Se3SpaceMouseCfg"], - "teleop_device_factory": ["create_teleop_device"], - }, ) diff --git a/source/isaaclab/isaaclab/devices/gamepad/__init__.py b/source/isaaclab/isaaclab/devices/gamepad/__init__.py index 47aab61f1758..af3c2b97be80 100644 --- a/source/isaaclab/isaaclab/devices/gamepad/__init__.py +++ b/source/isaaclab/isaaclab/devices/gamepad/__init__.py @@ -5,14 +5,11 @@ """Gamepad device for SE(2) and SE(3) control.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "se2_gamepad": ["Se2Gamepad"], - "se2_gamepad_cfg": ["Se2GamepadCfg"], - "se3_gamepad": ["Se3Gamepad"], - "se3_gamepad_cfg": ["Se3GamepadCfg"], - }, +lazy_export( + ("se2_gamepad", "Se2Gamepad"), + ("se2_gamepad_cfg", "Se2GamepadCfg"), + ("se3_gamepad", "Se3Gamepad"), + ("se3_gamepad_cfg", "Se3GamepadCfg"), ) diff --git a/source/isaaclab/isaaclab/devices/keyboard/__init__.py b/source/isaaclab/isaaclab/devices/keyboard/__init__.py index c77fd833854c..60a64a179701 100644 --- a/source/isaaclab/isaaclab/devices/keyboard/__init__.py +++ b/source/isaaclab/isaaclab/devices/keyboard/__init__.py @@ -5,14 +5,11 @@ """Keyboard device for SE(2) and SE(3) control.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "se2_keyboard": ["Se2Keyboard"], - "se2_keyboard_cfg": ["Se2KeyboardCfg"], - "se3_keyboard": ["Se3Keyboard"], - "se3_keyboard_cfg": ["Se3KeyboardCfg"], - }, +lazy_export( + ("se2_keyboard", "Se2Keyboard"), + ("se2_keyboard_cfg", "Se2KeyboardCfg"), + ("se3_keyboard", "Se3Keyboard"), + ("se3_keyboard_cfg", "Se3KeyboardCfg"), ) diff --git a/source/isaaclab/isaaclab/devices/spacemouse/__init__.py b/source/isaaclab/isaaclab/devices/spacemouse/__init__.py index 12b6522c11ac..bb2616ca1eb8 100644 --- a/source/isaaclab/isaaclab/devices/spacemouse/__init__.py +++ b/source/isaaclab/isaaclab/devices/spacemouse/__init__.py @@ -5,14 +5,11 @@ """Spacemouse device for SE(2) and SE(3) control.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "se2_spacemouse": ["Se2SpaceMouse"], - "se2_spacemouse_cfg": ["Se2SpaceMouseCfg"], - "se3_spacemouse": ["Se3SpaceMouse"], - "se3_spacemouse_cfg": ["Se3SpaceMouseCfg"], - }, +lazy_export( + ("se2_spacemouse", "Se2SpaceMouse"), + ("se2_spacemouse_cfg", "Se2SpaceMouseCfg"), + ("se3_spacemouse", "Se3SpaceMouse"), + ("se3_spacemouse_cfg", "Se3SpaceMouseCfg"), ) diff --git a/source/isaaclab/isaaclab/envs/__init__.py b/source/isaaclab/isaaclab/envs/__init__.py index f5ba046c6c8f..e4664e8af85b 100644 --- a/source/isaaclab/isaaclab/envs/__init__.py +++ b/source/isaaclab/isaaclab/envs/__init__.py @@ -42,27 +42,24 @@ .. _`Task Design Workflows`: https://docs.isaacsim.omniverse.nvidia.com/latest/introduction/workflows.html """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, +lazy_export( + # Pure data types + ("common", ["VecEnvObs", "VecEnvStepReturn", "ViewerCfg"]), + # Cfg classes — clean after Phase 3/4 + ("direct_rl_env_cfg", "DirectRLEnvCfg"), + ("direct_marl_env_cfg", "DirectMARLEnvCfg"), + ("manager_based_env_cfg", "ManagerBasedEnvCfg"), + ("manager_based_rl_env_cfg", "ManagerBasedRLEnvCfg"), + ("mimic_env_cfg", ["MimicEnvCfg", "MimicObservationGroupCfg", "MimicObservationTermCfg"]), + # Impl classes — deferred until needed + ("direct_rl_env", "DirectRLEnv"), + ("direct_marl_env", "DirectMARLEnv"), + ("manager_based_env", "ManagerBasedEnv"), + ("manager_based_rl_env", "ManagerBasedRLEnv"), + ("manager_based_rl_mimic_env", "ManagerBasedRLMimicEnv"), + # MARL utilities + ("utils.marl", ["multi_agent_to_single_agent", "multi_agent_with_one_agent"]), submodules=["mdp", "ui"], - submod_attrs={ - # Pure data types - "common": ["VecEnvObs", "VecEnvStepReturn", "ViewerCfg"], - # Cfg classes — clean after Phase 3/4 - "direct_rl_env_cfg": ["DirectRLEnvCfg"], - "direct_marl_env_cfg": ["DirectMARLEnvCfg"], - "manager_based_env_cfg": ["ManagerBasedEnvCfg"], - "manager_based_rl_env_cfg": ["ManagerBasedRLEnvCfg"], - "mimic_env_cfg": ["MimicEnvCfg", "MimicObservationGroupCfg", "MimicObservationTermCfg"], - # Impl classes — deferred until needed - "direct_rl_env": ["DirectRLEnv"], - "direct_marl_env": ["DirectMARLEnv"], - "manager_based_env": ["ManagerBasedEnv"], - "manager_based_rl_env": ["ManagerBasedRLEnv"], - "manager_based_rl_mimic_env": ["ManagerBasedRLMimicEnv"], - # MARL utilities - "utils.marl": ["multi_agent_to_single_agent", "multi_agent_with_one_agent"], - }, ) diff --git a/source/isaaclab/isaaclab/envs/mdp/actions/__init__.py b/source/isaaclab/isaaclab/envs/mdp/actions/__init__.py index b2289d4f2992..a4f628de1742 100644 --- a/source/isaaclab/isaaclab/envs/mdp/actions/__init__.py +++ b/source/isaaclab/isaaclab/envs/mdp/actions/__init__.py @@ -5,32 +5,29 @@ """Various action terms that can be used in the environment.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "actions_cfg": [ - "JointActionCfg", - "JointPositionActionCfg", - "RelativeJointPositionActionCfg", - "JointVelocityActionCfg", - "JointEffortActionCfg", - "JointPositionToLimitsActionCfg", - "EMAJointPositionToLimitsActionCfg", - "BinaryJointActionCfg", - "BinaryJointPositionActionCfg", - "BinaryJointVelocityActionCfg", - "AbsBinaryJointPositionActionCfg", - "NonHolonomicActionCfg", - "DifferentialInverseKinematicsActionCfg", - "OperationalSpaceControllerActionCfg", - "SurfaceGripperBinaryActionCfg", - ], - "binary_joint_actions": ["BinaryJointAction", "BinaryJointPositionAction", "BinaryJointVelocityAction", "AbsBinaryJointPositionAction"], - "joint_actions": ["JointAction", "JointPositionAction", "RelativeJointPositionAction", "JointVelocityAction", "JointEffortAction"], - "joint_actions_to_limits": ["JointPositionToLimitsAction", "EMAJointPositionToLimitsAction"], - "non_holonomic_actions": ["NonHolonomicAction"], - "surface_gripper_actions": ["SurfaceGripperBinaryAction"], - }, +lazy_export( + ("actions_cfg", [ + "JointActionCfg", + "JointPositionActionCfg", + "RelativeJointPositionActionCfg", + "JointVelocityActionCfg", + "JointEffortActionCfg", + "JointPositionToLimitsActionCfg", + "EMAJointPositionToLimitsActionCfg", + "BinaryJointActionCfg", + "BinaryJointPositionActionCfg", + "BinaryJointVelocityActionCfg", + "AbsBinaryJointPositionActionCfg", + "NonHolonomicActionCfg", + "DifferentialInverseKinematicsActionCfg", + "OperationalSpaceControllerActionCfg", + "SurfaceGripperBinaryActionCfg", + ]), + ("binary_joint_actions", ["BinaryJointAction", "BinaryJointPositionAction", "BinaryJointVelocityAction", "AbsBinaryJointPositionAction"]), + ("joint_actions", ["JointAction", "JointPositionAction", "RelativeJointPositionAction", "JointVelocityAction", "JointEffortAction"]), + ("joint_actions_to_limits", ["JointPositionToLimitsAction", "EMAJointPositionToLimitsAction"]), + ("non_holonomic_actions", "NonHolonomicAction"), + ("surface_gripper_actions", "SurfaceGripperBinaryAction"), ) diff --git a/source/isaaclab/isaaclab/envs/mdp/commands/__init__.py b/source/isaaclab/isaaclab/envs/mdp/commands/__init__.py index 3a1423090c65..fea8ae9dbce2 100644 --- a/source/isaaclab/isaaclab/envs/mdp/commands/__init__.py +++ b/source/isaaclab/isaaclab/envs/mdp/commands/__init__.py @@ -5,22 +5,19 @@ """Various command terms that can be used in the environment.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "commands_cfg": [ - "NullCommandCfg", - "UniformVelocityCommandCfg", - "NormalVelocityCommandCfg", - "UniformPoseCommandCfg", - "UniformPose2dCommandCfg", - "TerrainBasedPose2dCommandCfg", - ], - "null_command": ["NullCommand"], - "pose_2d_command": ["TerrainBasedPose2dCommand", "UniformPose2dCommand"], - "pose_command": ["UniformPoseCommand"], - "velocity_command": ["NormalVelocityCommand", "UniformVelocityCommand"], - }, +lazy_export( + ("commands_cfg", [ + "NullCommandCfg", + "UniformVelocityCommandCfg", + "NormalVelocityCommandCfg", + "UniformPoseCommandCfg", + "UniformPose2dCommandCfg", + "TerrainBasedPose2dCommandCfg", + ]), + ("null_command", "NullCommand"), + ("pose_2d_command", ["TerrainBasedPose2dCommand", "UniformPose2dCommand"]), + ("pose_command", "UniformPoseCommand"), + ("velocity_command", ["NormalVelocityCommand", "UniformVelocityCommand"]), ) diff --git a/source/isaaclab/isaaclab/envs/ui/__init__.py b/source/isaaclab/isaaclab/envs/ui/__init__.py index b0e5782b7336..b9edb4cb8218 100644 --- a/source/isaaclab/isaaclab/envs/ui/__init__.py +++ b/source/isaaclab/isaaclab/envs/ui/__init__.py @@ -10,14 +10,11 @@ toggling different debug visualization tools, and other user-defined functionalities. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_env_window": ["BaseEnvWindow"], - "empty_window": ["EmptyWindow"], - "manager_based_rl_env_window": ["ManagerBasedRLEnvWindow"], - "viewport_camera_controller": ["ViewportCameraController"], - }, +lazy_export( + ("base_env_window", "BaseEnvWindow"), + ("empty_window", "EmptyWindow"), + ("manager_based_rl_env_window", "ManagerBasedRLEnvWindow"), + ("viewport_camera_controller", "ViewportCameraController"), ) diff --git a/source/isaaclab/isaaclab/managers/__init__.py b/source/isaaclab/isaaclab/managers/__init__.py index 08b57527322b..fac9440e4a86 100644 --- a/source/isaaclab/isaaclab/managers/__init__.py +++ b/source/isaaclab/isaaclab/managers/__init__.py @@ -10,34 +10,31 @@ designed to be modular and can be easily extended to support new functionality. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - # Term cfg classes — pure dataclasses, no heavy imports - "manager_term_cfg": [ - "ActionTermCfg", - "CommandTermCfg", - "CurriculumTermCfg", - "EventTermCfg", - "ManagerTermBaseCfg", - "ObservationGroupCfg", - "ObservationTermCfg", - "RecorderTermCfg", - "RewardTermCfg", - "TerminationTermCfg", - ], - # Manager implementations — deferred - "manager_base": ["ManagerBase", "ManagerTermBase"], - "action_manager": ["ActionManager", "ActionTerm"], - "command_manager": ["CommandManager", "CommandTerm"], - "curriculum_manager": ["CurriculumManager"], - "event_manager": ["EventManager"], - "observation_manager": ["ObservationManager"], - "recorder_manager": ["DatasetExportMode", "RecorderManager", "RecorderManagerBaseCfg", "RecorderTerm"], - "reward_manager": ["RewardManager"], - "scene_entity_cfg": ["SceneEntityCfg"], - "termination_manager": ["TerminationManager"], - }, +lazy_export( + # Term cfg classes — pure dataclasses, no heavy imports + ("manager_term_cfg", [ + "ActionTermCfg", + "CommandTermCfg", + "CurriculumTermCfg", + "EventTermCfg", + "ManagerTermBaseCfg", + "ObservationGroupCfg", + "ObservationTermCfg", + "RecorderTermCfg", + "RewardTermCfg", + "TerminationTermCfg", + ]), + # Manager implementations — deferred + ("manager_base", ["ManagerBase", "ManagerTermBase"]), + ("action_manager", ["ActionManager", "ActionTerm"]), + ("command_manager", ["CommandManager", "CommandTerm"]), + ("curriculum_manager", "CurriculumManager"), + ("event_manager", "EventManager"), + ("observation_manager", "ObservationManager"), + ("recorder_manager", ["DatasetExportMode", "RecorderManager", "RecorderManagerBaseCfg", "RecorderTerm"]), + ("reward_manager", "RewardManager"), + ("scene_entity_cfg", "SceneEntityCfg"), + ("termination_manager", "TerminationManager"), ) diff --git a/source/isaaclab/isaaclab/markers/__init__.py b/source/isaaclab/isaaclab/markers/__init__.py index ffa7d54420ec..73cde3f3bf15 100644 --- a/source/isaaclab/isaaclab/markers/__init__.py +++ b/source/isaaclab/isaaclab/markers/__init__.py @@ -21,13 +21,10 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, +lazy_export( + ("visualization_markers", "VisualizationMarkers"), + ("visualization_markers_cfg", "VisualizationMarkersCfg"), submodules=["config"], - submod_attrs={ - "visualization_markers": ["VisualizationMarkers"], - "visualization_markers_cfg": ["VisualizationMarkersCfg"], - }, ) diff --git a/source/isaaclab/isaaclab/scene/__init__.py b/source/isaaclab/isaaclab/scene/__init__.py index 99eb75d795b9..95bf3b43f287 100644 --- a/source/isaaclab/isaaclab/scene/__init__.py +++ b/source/isaaclab/isaaclab/scene/__init__.py @@ -25,12 +25,9 @@ :mod:`isaaclab.managers` sub-package for more details. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "interactive_scene": ["InteractiveScene"], - "interactive_scene_cfg": ["InteractiveSceneCfg"], - }, +lazy_export( + ("interactive_scene", "InteractiveScene"), + ("interactive_scene_cfg", "InteractiveSceneCfg"), ) diff --git a/source/isaaclab/isaaclab/sensors/camera/__init__.py b/source/isaaclab/isaaclab/sensors/camera/__init__.py index 7f0f1eb2cfac..1d518ea22f4a 100644 --- a/source/isaaclab/isaaclab/sensors/camera/__init__.py +++ b/source/isaaclab/isaaclab/sensors/camera/__init__.py @@ -5,21 +5,13 @@ """Sub-module for camera wrapper around USD camera prim.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "camera": ["Camera"], - "camera_cfg": ["CameraCfg"], - "camera_data": ["CameraData"], - "tiled_camera": ["TiledCamera"], - "tiled_camera_cfg": ["TiledCameraCfg"], - "utils": [ - "create_pointcloud_from_depth", - "create_pointcloud_from_rgbd", - "save_images_to_file", - "transform_points", - ], - }, +lazy_export( + ("camera", "Camera"), + ("camera_cfg", "CameraCfg"), + ("camera_data", "CameraData"), + ("tiled_camera", "TiledCamera"), + ("tiled_camera_cfg", "TiledCameraCfg"), + ("utils", ["create_pointcloud_from_depth", "create_pointcloud_from_rgbd", "save_images_to_file", "transform_points"]), ) diff --git a/source/isaaclab/isaaclab/sensors/contact_sensor/__init__.py b/source/isaaclab/isaaclab/sensors/contact_sensor/__init__.py index c0d18f9a3ddd..e3c5e1bfe17c 100644 --- a/source/isaaclab/isaaclab/sensors/contact_sensor/__init__.py +++ b/source/isaaclab/isaaclab/sensors/contact_sensor/__init__.py @@ -5,15 +5,12 @@ """Sub-module for rigid contact sensor.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_contact_sensor": ["BaseContactSensor"], - "base_contact_sensor_data": ["BaseContactSensorData"], - "contact_sensor": ["ContactSensor"], - "contact_sensor_cfg": ["ContactSensorCfg"], - "contact_sensor_data": ["ContactSensorData"], - }, +lazy_export( + ("base_contact_sensor", "BaseContactSensor"), + ("base_contact_sensor_data", "BaseContactSensorData"), + ("contact_sensor", "ContactSensor"), + ("contact_sensor_cfg", "ContactSensorCfg"), + ("contact_sensor_data", "ContactSensorData"), ) diff --git a/source/isaaclab/isaaclab/sensors/frame_transformer/__init__.py b/source/isaaclab/isaaclab/sensors/frame_transformer/__init__.py index a9827e9b830d..33f2bfac969e 100644 --- a/source/isaaclab/isaaclab/sensors/frame_transformer/__init__.py +++ b/source/isaaclab/isaaclab/sensors/frame_transformer/__init__.py @@ -5,15 +5,12 @@ """Sub-module for frame transformer sensor.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_frame_transformer": ["BaseFrameTransformer"], - "base_frame_transformer_data": ["BaseFrameTransformerData"], - "frame_transformer": ["FrameTransformer"], - "frame_transformer_cfg": ["FrameTransformerCfg", "OffsetCfg"], - "frame_transformer_data": ["FrameTransformerData"], - }, +lazy_export( + ("base_frame_transformer", "BaseFrameTransformer"), + ("base_frame_transformer_data", "BaseFrameTransformerData"), + ("frame_transformer", "FrameTransformer"), + ("frame_transformer_cfg", ["FrameTransformerCfg", "OffsetCfg"]), + ("frame_transformer_data", "FrameTransformerData"), ) diff --git a/source/isaaclab/isaaclab/sensors/imu/__init__.py b/source/isaaclab/isaaclab/sensors/imu/__init__.py index eec5be6cc0a1..675a30486667 100644 --- a/source/isaaclab/isaaclab/sensors/imu/__init__.py +++ b/source/isaaclab/isaaclab/sensors/imu/__init__.py @@ -7,15 +7,12 @@ Imu Sensor """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "base_imu": ["BaseImu"], - "base_imu_data": ["BaseImuData"], - "imu": ["Imu"], - "imu_cfg": ["ImuCfg"], - "imu_data": ["ImuData"], - }, +lazy_export( + ("base_imu", "BaseImu"), + ("base_imu_data", "BaseImuData"), + ("imu", "Imu"), + ("imu_cfg", "ImuCfg"), + ("imu_data", "ImuData"), ) diff --git a/source/isaaclab/isaaclab/sensors/ray_caster/__init__.py b/source/isaaclab/isaaclab/sensors/ray_caster/__init__.py index 55d5b3085b63..2f23d8c081ec 100644 --- a/source/isaaclab/isaaclab/sensors/ray_caster/__init__.py +++ b/source/isaaclab/isaaclab/sensors/ray_caster/__init__.py @@ -15,22 +15,19 @@ the same ray-casting operations as the sensor implementations, but return the results as images. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, +lazy_export( + ("multi_mesh_ray_caster", "MultiMeshRayCaster"), + ("multi_mesh_ray_caster_camera", "MultiMeshRayCasterCamera"), + ("multi_mesh_ray_caster_camera_cfg", "MultiMeshRayCasterCameraCfg"), + ("multi_mesh_ray_caster_camera_data", "MultiMeshRayCasterCameraData"), + ("multi_mesh_ray_caster_cfg", "MultiMeshRayCasterCfg"), + ("multi_mesh_ray_caster_data", "MultiMeshRayCasterData"), + ("ray_caster", "RayCaster"), + ("ray_caster_camera", "RayCasterCamera"), + ("ray_caster_camera_cfg", "RayCasterCameraCfg"), + ("ray_caster_cfg", "RayCasterCfg"), + ("ray_caster_data", "RayCasterData"), submodules=["patterns"], - submod_attrs={ - "multi_mesh_ray_caster": ["MultiMeshRayCaster"], - "multi_mesh_ray_caster_camera": ["MultiMeshRayCasterCamera"], - "multi_mesh_ray_caster_camera_cfg": ["MultiMeshRayCasterCameraCfg"], - "multi_mesh_ray_caster_camera_data": ["MultiMeshRayCasterCameraData"], - "multi_mesh_ray_caster_cfg": ["MultiMeshRayCasterCfg"], - "multi_mesh_ray_caster_data": ["MultiMeshRayCasterData"], - "ray_caster": ["RayCaster"], - "ray_caster_camera": ["RayCasterCamera"], - "ray_caster_camera_cfg": ["RayCasterCameraCfg"], - "ray_caster_cfg": ["RayCasterCfg"], - "ray_caster_data": ["RayCasterData"], - }, ) diff --git a/source/isaaclab/isaaclab/sim/converters/__init__.py b/source/isaaclab/isaaclab/sim/converters/__init__.py index 126f1d1eb820..f3059feb0a4d 100644 --- a/source/isaaclab/isaaclab/sim/converters/__init__.py +++ b/source/isaaclab/isaaclab/sim/converters/__init__.py @@ -16,18 +16,15 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "asset_converter_base": ["AssetConverterBase"], - "asset_converter_base_cfg": ["AssetConverterBaseCfg"], - "mesh_converter": ["MeshConverter"], - "mesh_converter_cfg": ["MeshConverterCfg"], - "mjcf_converter": ["MjcfConverter"], - "mjcf_converter_cfg": ["MjcfConverterCfg"], - "urdf_converter": ["UrdfConverter"], - "urdf_converter_cfg": ["UrdfConverterCfg"], - }, +lazy_export( + ("asset_converter_base", "AssetConverterBase"), + ("asset_converter_base_cfg", "AssetConverterBaseCfg"), + ("mesh_converter", "MeshConverter"), + ("mesh_converter_cfg", "MeshConverterCfg"), + ("mjcf_converter", "MjcfConverter"), + ("mjcf_converter_cfg", "MjcfConverterCfg"), + ("urdf_converter", "UrdfConverter"), + ("urdf_converter_cfg", "UrdfConverterCfg"), ) diff --git a/source/isaaclab/isaaclab/sim/schemas/__init__.py b/source/isaaclab/isaaclab/sim/schemas/__init__.py index b5e810cd3bed..5d508cfa8ce5 100644 --- a/source/isaaclab/isaaclab/sim/schemas/__init__.py +++ b/source/isaaclab/isaaclab/sim/schemas/__init__.py @@ -32,49 +32,46 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "schemas": [ - "MESH_APPROXIMATION_TOKENS", - "PHYSX_MESH_COLLISION_CFGS", - "USD_MESH_COLLISION_CFGS", - "activate_contact_sensors", - "define_articulation_root_properties", - "define_collision_properties", - "define_deformable_body_properties", - "define_mass_properties", - "define_mesh_collision_properties", - "define_rigid_body_properties", - "modify_articulation_root_properties", - "modify_collision_properties", - "modify_deformable_body_properties", - "modify_fixed_tendon_properties", - "modify_joint_drive_properties", - "modify_mass_properties", - "modify_mesh_collision_properties", - "modify_rigid_body_properties", - "modify_spatial_tendon_properties", - ], - "schemas_cfg": [ - "ArticulationRootPropertiesCfg", - "BoundingCubePropertiesCfg", - "BoundingSpherePropertiesCfg", - "CollisionPropertiesCfg", - "ConvexDecompositionPropertiesCfg", - "ConvexHullPropertiesCfg", - "DeformableBodyPropertiesCfg", - "FixedTendonPropertiesCfg", - "JointDrivePropertiesCfg", - "MassPropertiesCfg", - "MeshCollisionPropertiesCfg", - "RigidBodyPropertiesCfg", - "SDFMeshPropertiesCfg", - "SpatialTendonPropertiesCfg", - "TriangleMeshPropertiesCfg", - "TriangleMeshSimplificationPropertiesCfg", - ], - }, +lazy_export( + ("schemas", [ + "MESH_APPROXIMATION_TOKENS", + "PHYSX_MESH_COLLISION_CFGS", + "USD_MESH_COLLISION_CFGS", + "activate_contact_sensors", + "define_articulation_root_properties", + "define_collision_properties", + "define_deformable_body_properties", + "define_mass_properties", + "define_mesh_collision_properties", + "define_rigid_body_properties", + "modify_articulation_root_properties", + "modify_collision_properties", + "modify_deformable_body_properties", + "modify_fixed_tendon_properties", + "modify_joint_drive_properties", + "modify_mass_properties", + "modify_mesh_collision_properties", + "modify_rigid_body_properties", + "modify_spatial_tendon_properties", + ]), + ("schemas_cfg", [ + "ArticulationRootPropertiesCfg", + "BoundingCubePropertiesCfg", + "BoundingSpherePropertiesCfg", + "CollisionPropertiesCfg", + "ConvexDecompositionPropertiesCfg", + "ConvexHullPropertiesCfg", + "DeformableBodyPropertiesCfg", + "FixedTendonPropertiesCfg", + "JointDrivePropertiesCfg", + "MassPropertiesCfg", + "MeshCollisionPropertiesCfg", + "RigidBodyPropertiesCfg", + "SDFMeshPropertiesCfg", + "SpatialTendonPropertiesCfg", + "TriangleMeshPropertiesCfg", + "TriangleMeshSimplificationPropertiesCfg", + ]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/__init__.py b/source/isaaclab/isaaclab/sim/spawners/__init__.py index ef33624d4cf3..93007a2d4e62 100644 --- a/source/isaaclab/isaaclab/sim/spawners/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/__init__.py @@ -54,81 +54,78 @@ class and the function call in a single line of code. """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - # spawner base cfg classes - "spawner_cfg": ["SpawnerCfg", "RigidObjectSpawnerCfg", "DeformableObjectSpawnerCfg"], - # from_files - "from_files": [ - "spawn_from_mjcf", - "spawn_from_urdf", - "spawn_from_usd", - "spawn_from_usd_with_compliant_contact_material", - "spawn_ground_plane", - "GroundPlaneCfg", - "MjcfFileCfg", - "UrdfFileCfg", - "UsdFileCfg", - "UsdFileWithCompliantContactCfg", - ], - # lights - "lights": [ - "spawn_light", - "CylinderLightCfg", - "DiskLightCfg", - "DistantLightCfg", - "DomeLightCfg", - "LightCfg", - "SphereLightCfg", - ], - # materials - "materials": [ - "spawn_deformable_body_material", - "spawn_rigid_body_material", - "DeformableBodyMaterialCfg", - "PhysicsMaterialCfg", - "RigidBodyMaterialCfg", - "spawn_from_mdl_file", - "spawn_preview_surface", - "GlassMdlCfg", - "MdlFileCfg", - "PreviewSurfaceCfg", - "VisualMaterialCfg", - ], - # meshes - "meshes": [ - "spawn_mesh_capsule", - "spawn_mesh_cone", - "spawn_mesh_cuboid", - "spawn_mesh_cylinder", - "spawn_mesh_sphere", - "MeshCapsuleCfg", - "MeshCfg", - "MeshConeCfg", - "MeshCuboidCfg", - "MeshCylinderCfg", - "MeshSphereCfg", - ], - # sensors - "sensors": ["spawn_camera", "FisheyeCameraCfg", "PinholeCameraCfg"], - # shapes - "shapes": [ - "spawn_capsule", - "spawn_cone", - "spawn_cuboid", - "spawn_cylinder", - "spawn_sphere", - "CapsuleCfg", - "ConeCfg", - "CuboidCfg", - "CylinderCfg", - "ShapeCfg", - "SphereCfg", - ], - # wrappers - "wrappers": ["spawn_multi_asset", "spawn_multi_usd_file", "MultiAssetSpawnerCfg", "MultiUsdFileCfg"], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + # spawner base cfg classes + ("spawner_cfg", ["SpawnerCfg", "RigidObjectSpawnerCfg", "DeformableObjectSpawnerCfg"]), + # from_files + ("from_files", [ + "spawn_from_mjcf", + "spawn_from_urdf", + "spawn_from_usd", + "spawn_from_usd_with_compliant_contact_material", + "spawn_ground_plane", + "GroundPlaneCfg", + "MjcfFileCfg", + "UrdfFileCfg", + "UsdFileCfg", + "UsdFileWithCompliantContactCfg", + ]), + # lights + ("lights", [ + "spawn_light", + "CylinderLightCfg", + "DiskLightCfg", + "DistantLightCfg", + "DomeLightCfg", + "LightCfg", + "SphereLightCfg", + ]), + # materials + ("materials", [ + "spawn_deformable_body_material", + "spawn_rigid_body_material", + "DeformableBodyMaterialCfg", + "PhysicsMaterialCfg", + "RigidBodyMaterialCfg", + "spawn_from_mdl_file", + "spawn_preview_surface", + "GlassMdlCfg", + "MdlFileCfg", + "PreviewSurfaceCfg", + "VisualMaterialCfg", + ]), + # meshes + ("meshes", [ + "spawn_mesh_capsule", + "spawn_mesh_cone", + "spawn_mesh_cuboid", + "spawn_mesh_cylinder", + "spawn_mesh_sphere", + "MeshCapsuleCfg", + "MeshCfg", + "MeshConeCfg", + "MeshCuboidCfg", + "MeshCylinderCfg", + "MeshSphereCfg", + ]), + # sensors + ("sensors", ["spawn_camera", "FisheyeCameraCfg", "PinholeCameraCfg"]), + # shapes + ("shapes", [ + "spawn_capsule", + "spawn_cone", + "spawn_cuboid", + "spawn_cylinder", + "spawn_sphere", + "CapsuleCfg", + "ConeCfg", + "CuboidCfg", + "CylinderCfg", + "ShapeCfg", + "SphereCfg", + ]), + # wrappers + ("wrappers", ["spawn_multi_asset", "spawn_multi_usd_file", "MultiAssetSpawnerCfg", "MultiUsdFileCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/from_files/__init__.py b/source/isaaclab/isaaclab/sim/spawners/from_files/__init__.py index 9e6dc994bae6..8bc60bc49ad6 100644 --- a/source/isaaclab/isaaclab/sim/spawners/from_files/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/from_files/__init__.py @@ -13,24 +13,21 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "from_files": [ - "spawn_from_mjcf", - "spawn_from_urdf", - "spawn_from_usd", - "spawn_from_usd_with_compliant_contact_material", - "spawn_ground_plane", - ], - "from_files_cfg": [ - "GroundPlaneCfg", - "MjcfFileCfg", - "UrdfFileCfg", - "UsdFileCfg", - "UsdFileWithCompliantContactCfg", - ], - }, +lazy_export( + ("from_files", [ + "spawn_from_mjcf", + "spawn_from_urdf", + "spawn_from_usd", + "spawn_from_usd_with_compliant_contact_material", + "spawn_ground_plane", + ]), + ("from_files_cfg", [ + "GroundPlaneCfg", + "MjcfFileCfg", + "UrdfFileCfg", + "UsdFileCfg", + "UsdFileWithCompliantContactCfg", + ]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/lights/__init__.py b/source/isaaclab/isaaclab/sim/spawners/lights/__init__.py index 193f1e839e50..7e70045a1540 100644 --- a/source/isaaclab/isaaclab/sim/spawners/lights/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/lights/__init__.py @@ -10,12 +10,9 @@ `_. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "lights": ["spawn_light"], - "lights_cfg": ["CylinderLightCfg", "DiskLightCfg", "DistantLightCfg", "DomeLightCfg", "LightCfg", "SphereLightCfg"], - }, +lazy_export( + ("lights", "spawn_light"), + ("lights_cfg", ["CylinderLightCfg", "DiskLightCfg", "DistantLightCfg", "DomeLightCfg", "LightCfg", "SphereLightCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/materials/__init__.py b/source/isaaclab/isaaclab/sim/spawners/materials/__init__.py index 048024a4bca3..cda614aa2bc2 100644 --- a/source/isaaclab/isaaclab/sim/spawners/materials/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/materials/__init__.py @@ -52,14 +52,11 @@ .. _Physics Scene: https://openusd.org/dev/api/usd_physics_page_front.html """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "physics_materials": ["spawn_deformable_body_material", "spawn_rigid_body_material"], - "physics_materials_cfg": ["DeformableBodyMaterialCfg", "PhysicsMaterialCfg", "RigidBodyMaterialCfg"], - "visual_materials": ["spawn_from_mdl_file", "spawn_preview_surface"], - "visual_materials_cfg": ["GlassMdlCfg", "MdlFileCfg", "PreviewSurfaceCfg", "VisualMaterialCfg"], - }, +lazy_export( + ("physics_materials", ["spawn_deformable_body_material", "spawn_rigid_body_material"]), + ("physics_materials_cfg", ["DeformableBodyMaterialCfg", "PhysicsMaterialCfg", "RigidBodyMaterialCfg"]), + ("visual_materials", ["spawn_from_mdl_file", "spawn_preview_surface"]), + ("visual_materials_cfg", ["GlassMdlCfg", "MdlFileCfg", "PreviewSurfaceCfg", "VisualMaterialCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/meshes/__init__.py b/source/isaaclab/isaaclab/sim/spawners/meshes/__init__.py index 313816d445a7..109e22a079fe 100644 --- a/source/isaaclab/isaaclab/sim/spawners/meshes/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/meshes/__init__.py @@ -20,18 +20,15 @@ .. _USDGeomMesh: https://openusd.org/release/api/class_usd_geom_mesh.html """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "meshes": [ - "spawn_mesh_capsule", - "spawn_mesh_cone", - "spawn_mesh_cuboid", - "spawn_mesh_cylinder", - "spawn_mesh_sphere", - ], - "meshes_cfg": ["MeshCapsuleCfg", "MeshCfg", "MeshConeCfg", "MeshCuboidCfg", "MeshCylinderCfg", "MeshSphereCfg"], - }, +lazy_export( + ("meshes", [ + "spawn_mesh_capsule", + "spawn_mesh_cone", + "spawn_mesh_cuboid", + "spawn_mesh_cylinder", + "spawn_mesh_sphere", + ]), + ("meshes_cfg", ["MeshCapsuleCfg", "MeshCfg", "MeshConeCfg", "MeshCuboidCfg", "MeshCylinderCfg", "MeshSphereCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/sensors/__init__.py b/source/isaaclab/isaaclab/sim/spawners/sensors/__init__.py index 6583ae01ec06..62429f1de6c4 100644 --- a/source/isaaclab/isaaclab/sim/spawners/sensors/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/sensors/__init__.py @@ -11,12 +11,9 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "sensors": ["spawn_camera"], - "sensors_cfg": ["FisheyeCameraCfg", "PinholeCameraCfg"], - }, +lazy_export( + ("sensors", "spawn_camera"), + ("sensors_cfg", ["FisheyeCameraCfg", "PinholeCameraCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/shapes/__init__.py b/source/isaaclab/isaaclab/sim/spawners/shapes/__init__.py index 97cd6dcf9f06..127192530342 100644 --- a/source/isaaclab/isaaclab/sim/spawners/shapes/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/shapes/__init__.py @@ -14,12 +14,9 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "shapes": ["spawn_capsule", "spawn_cone", "spawn_cuboid", "spawn_cylinder", "spawn_sphere"], - "shapes_cfg": ["CapsuleCfg", "ConeCfg", "CuboidCfg", "CylinderCfg", "ShapeCfg", "SphereCfg"], - }, +lazy_export( + ("shapes", ["spawn_capsule", "spawn_cone", "spawn_cuboid", "spawn_cylinder", "spawn_sphere"]), + ("shapes_cfg", ["CapsuleCfg", "ConeCfg", "CuboidCfg", "CylinderCfg", "ShapeCfg", "SphereCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/spawners/wrappers/__init__.py b/source/isaaclab/isaaclab/sim/spawners/wrappers/__init__.py index 3b37134df75c..97b0320e89fe 100644 --- a/source/isaaclab/isaaclab/sim/spawners/wrappers/__init__.py +++ b/source/isaaclab/isaaclab/sim/spawners/wrappers/__init__.py @@ -10,12 +10,9 @@ different configurations. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "wrappers": ["spawn_multi_asset", "spawn_multi_usd_file"], - "wrappers_cfg": ["MultiAssetSpawnerCfg", "MultiUsdFileCfg"], - }, +lazy_export( + ("wrappers", ["spawn_multi_asset", "spawn_multi_usd_file"]), + ("wrappers_cfg", ["MultiAssetSpawnerCfg", "MultiUsdFileCfg"]), ) diff --git a/source/isaaclab/isaaclab/sim/views/__init__.py b/source/isaaclab/isaaclab/sim/views/__init__.py index b3139c5cd580..da0daa7a64ad 100644 --- a/source/isaaclab/isaaclab/sim/views/__init__.py +++ b/source/isaaclab/isaaclab/sim/views/__init__.py @@ -5,11 +5,8 @@ """Views for manipulating USD prims.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "xform_prim_view": ["XformPrimView"], - }, +lazy_export( + ("xform_prim_view", "XformPrimView"), ) diff --git a/source/isaaclab/isaaclab/terrains/__init__.py b/source/isaaclab/isaaclab/terrains/__init__.py index 1022b30c3e11..b6cede6689ab 100644 --- a/source/isaaclab/isaaclab/terrains/__init__.py +++ b/source/isaaclab/isaaclab/terrains/__init__.py @@ -20,17 +20,17 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - # cfg classes - "sub_terrain_cfg": ["FlatPatchSamplingCfg", "SubTerrainBaseCfg"], - "terrain_generator_cfg": ["TerrainGeneratorCfg"], - "terrain_importer_cfg": ["TerrainImporterCfg"], - # height field cfg classes (re-exported from sub-package) - "height_field": [ +lazy_export( + # cfg classes + ("sub_terrain_cfg", ["FlatPatchSamplingCfg", "SubTerrainBaseCfg"]), + ("terrain_generator_cfg", "TerrainGeneratorCfg"), + ("terrain_importer_cfg", "TerrainImporterCfg"), + # height field cfg classes (re-exported from sub-package) + ( + "height_field", + [ "HfDiscreteObstaclesTerrainCfg", "HfInvertedPyramidSlopedTerrainCfg", "HfInvertedPyramidStairsTerrainCfg", @@ -41,8 +41,11 @@ "HfTerrainBaseCfg", "HfWaveTerrainCfg", ], - # trimesh cfg classes (re-exported from sub-package) - "trimesh": [ + ), + # trimesh cfg classes (re-exported from sub-package) + ( + "trimesh", + [ "MeshBoxTerrainCfg", "MeshFloatingRingTerrainCfg", "MeshGapTerrainCfg", @@ -57,9 +60,9 @@ "MeshRepeatedPyramidsTerrainCfg", "MeshStarTerrainCfg", ], - # impl classes — deferred - "terrain_generator": ["TerrainGenerator"], - "terrain_importer": ["TerrainImporter"], - "utils": ["color_meshes_by_height", "create_prim_from_mesh", "find_flat_patches"], - }, + ), + # impl classes — deferred + ("terrain_generator", "TerrainGenerator"), + ("terrain_importer", "TerrainImporter"), + ("utils", ["color_meshes_by_height", "create_prim_from_mesh", "find_flat_patches"]), ) diff --git a/source/isaaclab/isaaclab/terrains/height_field/__init__.py b/source/isaaclab/isaaclab/terrains/height_field/__init__.py index b27946baa8fc..6f84b765abea 100644 --- a/source/isaaclab/isaaclab/terrains/height_field/__init__.py +++ b/source/isaaclab/isaaclab/terrains/height_field/__init__.py @@ -25,12 +25,12 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "hf_terrains_cfg": [ +lazy_export( + ( + "hf_terrains_cfg", + [ "HfDiscreteObstaclesTerrainCfg", "HfInvertedPyramidSlopedTerrainCfg", "HfInvertedPyramidStairsTerrainCfg", @@ -41,7 +41,10 @@ "HfTerrainBaseCfg", "HfWaveTerrainCfg", ], - "hf_terrains": [ + ), + ( + "hf_terrains", + [ "hf_discrete_obstacles_terrain", "hf_inverted_pyramid_sloped_terrain", "hf_inverted_pyramid_stairs_terrain", @@ -51,5 +54,5 @@ "hf_stepping_stones_terrain", "hf_wave_terrain", ], - }, + ), ) diff --git a/source/isaaclab/isaaclab/terrains/trimesh/__init__.py b/source/isaaclab/isaaclab/terrains/trimesh/__init__.py index 79df46a84991..eac7f1545e3a 100644 --- a/source/isaaclab/isaaclab/terrains/trimesh/__init__.py +++ b/source/isaaclab/isaaclab/terrains/trimesh/__init__.py @@ -12,12 +12,12 @@ efficient than the height-field representation, but it is not as flexible. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "mesh_terrains_cfg": [ +lazy_export( + ( + "mesh_terrains_cfg", + [ "MeshBoxTerrainCfg", "MeshFloatingRingTerrainCfg", "MeshGapTerrainCfg", @@ -32,7 +32,10 @@ "MeshRepeatedPyramidsTerrainCfg", "MeshStarTerrainCfg", ], - "mesh_terrains": [ + ), + ( + "mesh_terrains", + [ "flat_terrain", "pyramid_stairs_terrain", "inverted_pyramid_stairs_terrain", @@ -45,5 +48,5 @@ "star_terrain", "repeated_objects_terrain", ], - }, + ), ) diff --git a/source/isaaclab/isaaclab/ui/widgets/__init__.py b/source/isaaclab/isaaclab/ui/widgets/__init__.py index abea530ad585..68c55d0f57f0 100644 --- a/source/isaaclab/isaaclab/ui/widgets/__init__.py +++ b/source/isaaclab/isaaclab/ui/widgets/__init__.py @@ -3,14 +3,11 @@ # # SPDX-License-Identifier: BSD-3-Clause -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "image_plot": ["ImagePlot"], - "line_plot": ["LiveLinePlot"], - "manager_live_visualizer": ["ManagerLiveVisualizer"], - "ui_visualizer_base": ["UiVisualizerBase"], - }, +lazy_export( + ("image_plot", "ImagePlot"), + ("line_plot", "LiveLinePlot"), + ("manager_live_visualizer", "ManagerLiveVisualizer"), + ("ui_visualizer_base", "UiVisualizerBase"), ) diff --git a/source/isaaclab/isaaclab/utils/__init__.py b/source/isaaclab/isaaclab/utils/__init__.py index fe85c791ebf7..4dbeb4e3e354 100644 --- a/source/isaaclab/isaaclab/utils/__init__.py +++ b/source/isaaclab/isaaclab/utils/__init__.py @@ -91,5 +91,8 @@ "module": [ "attach_cascading", ], + "lazy_imports": [ + "lazy_export", + ], }, ) diff --git a/source/isaaclab/isaaclab/utils/lazy_imports.py b/source/isaaclab/isaaclab/utils/lazy_imports.py new file mode 100644 index 000000000000..ba1173542a8d --- /dev/null +++ b/source/isaaclab/isaaclab/utils/lazy_imports.py @@ -0,0 +1,57 @@ +# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause + +"""Helper for declaring lazy imports in ``__init__.py`` files.""" + +from __future__ import annotations + +import sys +from collections.abc import Iterable + +import lazy_loader as lazy + + +def lazy_export(*imports: tuple[str, str | Iterable[str]], submodules: list[str] | None = None) -> None: + """Register lazy imports for the calling package's ``__init__.py``. + + This replaces the common boilerplate:: + + import lazy_loader as lazy + + __getattr__, __dir__, __all__ = lazy.attach( + __name__, + submod_attrs={ + "my_module": ["MyClass", "my_func"], + }, + ) + + with a more concise form:: + + from isaaclab.utils.lazy_imports import lazy_export + + lazy_export( + ("my_module", ["MyClass", "my_func"]), + ) + + Args: + *imports: Each element is a ``(submodule, names)`` pair where *submodule* + is the module file (without ``.py``) and *names* is either a single + string or an iterable of strings to re-export from that submodule. + submodules: Optional list of sub-packages to expose as direct attributes + (e.g. ``submodules=["converters", "schemas"]``). + """ + caller_globals = sys._getframe(1).f_globals + package_name = caller_globals["__name__"] + + submod_attrs: dict[str, list[str]] = {} + for submod, names in imports: + submod_attrs[submod] = [names] if isinstance(names, str) else list(names) + + __getattr__, __dir__, __all__ = lazy.attach(package_name, submodules=submodules or [], submod_attrs=submod_attrs) + + mod = sys.modules[package_name] + mod.__getattr__ = __getattr__ + mod.__dir__ = __dir__ + mod.__all__ = __all__ diff --git a/source/isaaclab_assets/isaaclab_assets/sensors/__init__.py b/source/isaaclab_assets/isaaclab_assets/sensors/__init__.py index e35eea41f465..1d284200d144 100644 --- a/source/isaaclab_assets/isaaclab_assets/sensors/__init__.py +++ b/source/isaaclab_assets/isaaclab_assets/sensors/__init__.py @@ -5,12 +5,9 @@ """Configuration for different assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "gelsight": ["GELSIGHT_R15_CFG", "GELSIGHT_MINI_CFG"], - "velodyne": ["VELODYNE_VLP_16_RAYCASTER_CFG"], - }, +lazy_export( + ("gelsight", ["GELSIGHT_R15_CFG", "GELSIGHT_MINI_CFG"]), + ("velodyne", "VELODYNE_VLP_16_RAYCASTER_CFG"), ) diff --git a/source/isaaclab_contrib/isaaclab_contrib/assets/__init__.py b/source/isaaclab_contrib/isaaclab_contrib/assets/__init__.py index f5808759e83b..bb549069d9d7 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/assets/__init__.py +++ b/source/isaaclab_contrib/isaaclab_contrib/assets/__init__.py @@ -11,11 +11,8 @@ contributed by the community to extend the capabilities of Isaac Lab. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "multirotor": ["Multirotor", "MultirotorCfg", "MultirotorData"], - }, +lazy_export( + ("multirotor", ["Multirotor", "MultirotorCfg", "MultirotorData"]), ) diff --git a/source/isaaclab_contrib/isaaclab_contrib/assets/multirotor/__init__.py b/source/isaaclab_contrib/isaaclab_contrib/assets/multirotor/__init__.py index 20be241fca1c..452e63d0fc23 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/assets/multirotor/__init__.py +++ b/source/isaaclab_contrib/isaaclab_contrib/assets/multirotor/__init__.py @@ -41,13 +41,10 @@ - :mod:`isaaclab_contrib.mdp.actions`: Thrust action terms for RL """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "multirotor": ["Multirotor"], - "multirotor_cfg": ["MultirotorCfg"], - "multirotor_data": ["MultirotorData"], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("multirotor", "Multirotor"), + ("multirotor_cfg", "MultirotorCfg"), + ("multirotor_data", "MultirotorData"), ) diff --git a/source/isaaclab_contrib/isaaclab_contrib/sensors/__init__.py b/source/isaaclab_contrib/isaaclab_contrib/sensors/__init__.py index b00e24fbacdc..d4d164f2daea 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/sensors/__init__.py +++ b/source/isaaclab_contrib/isaaclab_contrib/sensors/__init__.py @@ -22,11 +22,8 @@ """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "tacsl_sensor": ["VisuoTactileSensor", "GelSightRenderCfg", "VisuoTactileSensorCfg", "VisuoTactileSensorData"], - }, +lazy_export( + ("tacsl_sensor", ["VisuoTactileSensor", "GelSightRenderCfg", "VisuoTactileSensorCfg", "VisuoTactileSensorData"]), ) diff --git a/source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/__init__.py b/source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/__init__.py index 3058a26201a3..8b3624327d19 100644 --- a/source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/__init__.py +++ b/source/isaaclab_contrib/isaaclab_contrib/sensors/tacsl_sensor/__init__.py @@ -5,13 +5,10 @@ """TacSL Tactile Sensor implementation for IsaacLab.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "visuotactile_sensor": ["VisuoTactileSensor"], - "visuotactile_sensor_cfg": ["GelSightRenderCfg", "VisuoTactileSensorCfg"], - "visuotactile_sensor_data": ["VisuoTactileSensorData"], - }, +lazy_export( + ("visuotactile_sensor", "VisuoTactileSensor"), + ("visuotactile_sensor_cfg", ["GelSightRenderCfg", "VisuoTactileSensorCfg"]), + ("visuotactile_sensor_data", "VisuoTactileSensorData"), ) diff --git a/source/isaaclab_newton/isaaclab_newton/cloner/__init__.py b/source/isaaclab_newton/isaaclab_newton/cloner/__init__.py index 4dbd1a105ac5..d386331b2f5f 100644 --- a/source/isaaclab_newton/isaaclab_newton/cloner/__init__.py +++ b/source/isaaclab_newton/isaaclab_newton/cloner/__init__.py @@ -5,11 +5,8 @@ """Newton cloner utilities.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "newton_replicate": ["newton_replicate"], - }, +lazy_export( + ("newton_replicate", "newton_replicate"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/__init__.py index 47497c4b5825..16a14eb7b03c 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/__init__.py @@ -38,15 +38,12 @@ the corresponding actuator torques. """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "articulation": ["Articulation", "ArticulationData"], - "deformable_object": ["DeformableObject", "DeformableObjectCfg", "DeformableObjectData"], - "rigid_object": ["RigidObject", "RigidObjectData"], - "rigid_object_collection": ["RigidObjectCollection", "RigidObjectCollectionData"], - "surface_gripper": ["SurfaceGripper", "SurfaceGripperCfg"], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("articulation", ["Articulation", "ArticulationData"]), + ("deformable_object", ["DeformableObject", "DeformableObjectCfg", "DeformableObjectData"]), + ("rigid_object", ["RigidObject", "RigidObjectData"]), + ("rigid_object_collection", ["RigidObjectCollection", "RigidObjectCollectionData"]), + ("surface_gripper", ["SurfaceGripper", "SurfaceGripperCfg"]), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/articulation/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/articulation/__init__.py index c8a01a32cb6b..84cc27efd66b 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/articulation/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/articulation/__init__.py @@ -5,12 +5,9 @@ """Sub-module for rigid articulated assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "articulation": ["Articulation"], - "articulation_data": ["ArticulationData"], - }, +lazy_export( + ("articulation", "Articulation"), + ("articulation_data", "ArticulationData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/deformable_object/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/deformable_object/__init__.py index 4bd285da8351..9029f04d7d7b 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/deformable_object/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/deformable_object/__init__.py @@ -5,13 +5,10 @@ """Sub-module for deformable object assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "deformable_object": ["DeformableObject"], - "deformable_object_cfg": ["DeformableObjectCfg"], - "deformable_object_data": ["DeformableObjectData"], - }, +lazy_export( + ("deformable_object", "DeformableObject"), + ("deformable_object_cfg", "DeformableObjectCfg"), + ("deformable_object_data", "DeformableObjectData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/rigid_object/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/rigid_object/__init__.py index cb36cbfc7105..e82f6bf588ad 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/rigid_object/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/rigid_object/__init__.py @@ -5,12 +5,9 @@ """Sub-module for rigid object assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "rigid_object": ["RigidObject"], - "rigid_object_data": ["RigidObjectData"], - }, +lazy_export( + ("rigid_object", "RigidObject"), + ("rigid_object_data", "RigidObjectData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/rigid_object_collection/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/rigid_object_collection/__init__.py index bf1414538e33..33584f638594 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/rigid_object_collection/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/rigid_object_collection/__init__.py @@ -5,12 +5,9 @@ """Sub-module for rigid object collection.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "rigid_object_collection": ["RigidObjectCollection"], - "rigid_object_collection_data": ["RigidObjectCollectionData"], - }, +lazy_export( + ("rigid_object_collection", "RigidObjectCollection"), + ("rigid_object_collection_data", "RigidObjectCollectionData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/assets/surface_gripper/__init__.py b/source/isaaclab_physx/isaaclab_physx/assets/surface_gripper/__init__.py index e269687dc2e7..8ddf3f6db0ae 100644 --- a/source/isaaclab_physx/isaaclab_physx/assets/surface_gripper/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/assets/surface_gripper/__init__.py @@ -5,12 +5,9 @@ """Sub-module for surface_gripper assets.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "surface_gripper": ["SurfaceGripper"], - "surface_gripper_cfg": ["SurfaceGripperCfg"], - }, +lazy_export( + ("surface_gripper", "SurfaceGripper"), + ("surface_gripper_cfg", "SurfaceGripperCfg"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/cloner/__init__.py b/source/isaaclab_physx/isaaclab_physx/cloner/__init__.py index f68ac6318685..f5c694e29f09 100644 --- a/source/isaaclab_physx/isaaclab_physx/cloner/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/cloner/__init__.py @@ -5,11 +5,8 @@ """PhysX cloner utilities.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "physx_replicate": ["physx_replicate"], - }, +lazy_export( + ("physx_replicate", "physx_replicate"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/physics/__init__.py b/source/isaaclab_physx/isaaclab_physx/physics/__init__.py index f898071af817..7b5c4a1fe008 100644 --- a/source/isaaclab_physx/isaaclab_physx/physics/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/physics/__init__.py @@ -5,12 +5,9 @@ """Implementation backends for simulation interfaces.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "physx_manager": ["PhysxManager", "IsaacEvents"], - "physx_manager_cfg": ["PhysxCfg"], - }, +lazy_export( + ("physx_manager", ["PhysxManager", "IsaacEvents"]), + ("physx_manager_cfg", "PhysxCfg"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/sensors/__init__.py b/source/isaaclab_physx/isaaclab_physx/sensors/__init__.py index 83bde4c1a09f..1c49f2f3ca08 100644 --- a/source/isaaclab_physx/isaaclab_physx/sensors/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/sensors/__init__.py @@ -5,13 +5,10 @@ """Sub-package containing PhysX-specific sensor implementations.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "contact_sensor": ["ContactSensor", "ContactSensorData"], - "frame_transformer": ["FrameTransformer", "FrameTransformerData"], - "imu": ["Imu", "ImuData"], - }, +lazy_export( + ("contact_sensor", ["ContactSensor", "ContactSensorData"]), + ("frame_transformer", ["FrameTransformer", "FrameTransformerData"]), + ("imu", ["Imu", "ImuData"]), ) diff --git a/source/isaaclab_physx/isaaclab_physx/sensors/contact_sensor/__init__.py b/source/isaaclab_physx/isaaclab_physx/sensors/contact_sensor/__init__.py index 27057d9db809..8645068bb1bf 100644 --- a/source/isaaclab_physx/isaaclab_physx/sensors/contact_sensor/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/sensors/contact_sensor/__init__.py @@ -5,12 +5,9 @@ """Sub-module for PhysX rigid contact sensor.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "contact_sensor": ["ContactSensor"], - "contact_sensor_data": ["ContactSensorData"], - }, +lazy_export( + ("contact_sensor", "ContactSensor"), + ("contact_sensor_data", "ContactSensorData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/__init__.py b/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/__init__.py index 12930145e773..a553721481b6 100644 --- a/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/__init__.py @@ -5,12 +5,9 @@ """Sub-module for PhysX frame transformer sensor.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "frame_transformer": ["FrameTransformer"], - "frame_transformer_data": ["FrameTransformerData"], - }, +lazy_export( + ("frame_transformer", "FrameTransformer"), + ("frame_transformer_data", "FrameTransformerData"), ) diff --git a/source/isaaclab_physx/isaaclab_physx/sensors/imu/__init__.py b/source/isaaclab_physx/isaaclab_physx/sensors/imu/__init__.py index 843b92727b9c..06e119b5a79a 100644 --- a/source/isaaclab_physx/isaaclab_physx/sensors/imu/__init__.py +++ b/source/isaaclab_physx/isaaclab_physx/sensors/imu/__init__.py @@ -5,12 +5,9 @@ """Sub-module for PhysX IMU sensor.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "imu": ["Imu"], - "imu_data": ["ImuData"], - }, +lazy_export( + ("imu", "Imu"), + ("imu_data", "ImuData"), ) diff --git a/source/isaaclab_rl/isaaclab_rl/rsl_rl/__init__.py b/source/isaaclab_rl/isaaclab_rl/rsl_rl/__init__.py index 2f2fd30ca634..7be9a7d6f10b 100644 --- a/source/isaaclab_rl/isaaclab_rl/rsl_rl/__init__.py +++ b/source/isaaclab_rl/isaaclab_rl/rsl_rl/__init__.py @@ -15,27 +15,24 @@ """ -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "rl_cfg": [ - "RslRlPpoActorCriticCfg", - "RslRlPpoActorCriticRecurrentCfg", - "RslRlPpoAlgorithmCfg", - "RslRlBaseRunnerCfg", - "RslRlOnPolicyRunnerCfg", - ], - "distillation_cfg": [ - "RslRlDistillationStudentTeacherCfg", - "RslRlDistillationStudentTeacherRecurrentCfg", - "RslRlDistillationAlgorithmCfg", - "RslRlDistillationRunnerCfg", - ], - "rnd_cfg": ["RslRlRndCfg"], - "symmetry_cfg": ["RslRlSymmetryCfg"], - "exporter": ["export_policy_as_jit", "export_policy_as_onnx"], - "vecenv_wrapper": ["RslRlVecEnvWrapper"], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("rl_cfg", [ + "RslRlPpoActorCriticCfg", + "RslRlPpoActorCriticRecurrentCfg", + "RslRlPpoAlgorithmCfg", + "RslRlBaseRunnerCfg", + "RslRlOnPolicyRunnerCfg", + ]), + ("distillation_cfg", [ + "RslRlDistillationStudentTeacherCfg", + "RslRlDistillationStudentTeacherRecurrentCfg", + "RslRlDistillationAlgorithmCfg", + "RslRlDistillationRunnerCfg", + ]), + ("rnd_cfg", "RslRlRndCfg"), + ("symmetry_cfg", "RslRlSymmetryCfg"), + ("exporter", ["export_policy_as_jit", "export_policy_as_onnx"]), + ("vecenv_wrapper", "RslRlVecEnvWrapper"), ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/drone_arl/mdp/commands/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/drone_arl/mdp/commands/__init__.py index e9e82a916347..142bd68965c0 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/drone_arl/mdp/commands/__init__.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/drone_arl/mdp/commands/__init__.py @@ -5,12 +5,9 @@ """Various command terms that can be used in the environment.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "commands_cfg": ["DroneUniformPoseCommandCfg"], - "drone_pose_command": ["DroneUniformPoseCommand"], - }, +lazy_export( + ("commands_cfg", "DroneUniformPoseCommandCfg"), + ("drone_pose_command", "DroneUniformPoseCommand"), ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/inhand/mdp/commands/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/inhand/mdp/commands/__init__.py index 7aad16f4cfe5..3d4fc118edee 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/inhand/mdp/commands/__init__.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/inhand/mdp/commands/__init__.py @@ -5,12 +5,9 @@ """Sub-module containing command terms for 3D orientation goals.""" -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "commands_cfg": ["InHandReOrientationCommandCfg"], - "orientation_command": ["InHandReOrientationCommand"], - }, +lazy_export( + ("commands_cfg", "InHandReOrientationCommandCfg"), + ("orientation_command", "InHandReOrientationCommand"), ) diff --git a/source/isaaclab_teleop/isaaclab_teleop/__init__.py b/source/isaaclab_teleop/isaaclab_teleop/__init__.py index 1164127e2016..c63c60e61a81 100644 --- a/source/isaaclab_teleop/isaaclab_teleop/__init__.py +++ b/source/isaaclab_teleop/isaaclab_teleop/__init__.py @@ -19,14 +19,11 @@ # Configure the module-level variables __version__ = ISAACLAB_TELEOP_METADATA["package"]["version"] -import lazy_loader as lazy - -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "isaac_teleop_cfg": ["IsaacTeleopCfg"], - "isaac_teleop_device": ["IsaacTeleopDevice", "create_isaac_teleop_device"], - "xr_anchor_utils": ["XrAnchorSynchronizer"], - "xr_cfg": ["XrAnchorRotationMode", "XrCfg", "remove_camera_configs"], - }, +from isaaclab.utils.lazy_imports import lazy_export + +lazy_export( + ("isaac_teleop_cfg", "IsaacTeleopCfg"), + ("isaac_teleop_device", ["IsaacTeleopDevice", "create_isaac_teleop_device"]), + ("xr_anchor_utils", "XrAnchorSynchronizer"), + ("xr_cfg", ["XrAnchorRotationMode", "XrCfg", "remove_camera_configs"]), ) diff --git a/source/isaaclab_teleop/isaaclab_teleop/deprecated/openxr/__init__.py b/source/isaaclab_teleop/isaaclab_teleop/deprecated/openxr/__init__.py index b5cfe4d60210..a97c43315b1c 100644 --- a/source/isaaclab_teleop/isaaclab_teleop/deprecated/openxr/__init__.py +++ b/source/isaaclab_teleop/isaaclab_teleop/deprecated/openxr/__init__.py @@ -16,13 +16,10 @@ :mod:`isaaclab_teleop.xr_anchor_utils`. """ -import lazy_loader as lazy +from isaaclab.utils.lazy_imports import lazy_export -__getattr__, __dir__, __all__ = lazy.attach( - __name__, - submod_attrs={ - "manus_vive": ["ManusVive", "ManusViveCfg"], - "openxr_device": ["OpenXRDevice", "OpenXRDeviceCfg"], - "xr_cfg": ["XrAnchorRotationMode", "XrCfg", "remove_camera_configs"], - }, +lazy_export( + ("manus_vive", ["ManusVive", "ManusViveCfg"]), + ("openxr_device", ["OpenXRDevice", "OpenXRDeviceCfg"]), + ("xr_cfg", ["XrAnchorRotationMode", "XrCfg", "remove_camera_configs"]), )