Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions docs/source/api/lab/isaaclab.app.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

add_launcher_args
launch_simulation
make_physics_cfg
report_activity
scan

Expand All @@ -36,8 +35,6 @@ Simulation Launcher
.. autoclass:: AppLauncher
:members:

.. autofunction:: make_physics_cfg

.. autofunction:: scan

.. autoclass:: Scan
Expand Down
25 changes: 25 additions & 0 deletions source/isaaclab/changelog.d/launch-helper-cleanup.major.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Changed
^^^^^^^

* **Breaking:** Changed ``--viz none`` to parse to an empty list instead of ``None``, so ``args_cli.visualizer is None``
means no ``--viz`` was passed and ``[]`` means all visualizers are disabled. The ``visualizer_explicit`` and
``visualizer_disable_all`` launcher arguments are removed; check ``args_cli.visualizer`` instead.
* Changed :func:`~isaaclab.app.launch_simulation` to also detect a ``newton_rtx`` visualizer listed in
``visualizer_cfgs``, so the OVRTX runtime starts and the Kit conflict check applies.

Added
^^^^^

* Added ``launcher_type`` to :class:`~isaaclab.physics.PhysicsCfg` and :class:`~isaaclab.renderers.RendererCfg`,
defaulting to ``None`` for configs whose runtime needs no launcher.

Removed
^^^^^^^

* **Breaking:** Removed ``SettingsManager.instance()``. Use :func:`~isaaclab.app.get_settings_manager`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Warning · Api — Public symbols removed without deprecation window

SettingsManager.instance, the typed set_bool/set_int/set_float/set_string setters, isaaclab.app.make_physics_cfg, and logging_utils.resolve_python_logging_level are deleted outright, and sim_launcher.fuse_kit_args loses its old import path. Repository rules require a prior deprecation and migration path before removing a public API. Keep thin forwarders that emit DeprecationWarning for one release, then delete.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Intentional, per the maintainer's policy for this refactor series: APIs outside public config and MDP terms are removed without a deprecation window, and each removal is listed as Breaking with its replacement in the changelog.

* **Breaking:** Removed ``SettingsManager.set_bool``, ``set_int``, ``set_float``, and ``set_string``. Use
:meth:`~isaaclab.app.SettingsManager.set`, which dispatches on the value type.
* **Breaking:** Removed ``isaaclab.app.make_physics_cfg``. Select the backend with the ``physics`` launcher
argument of :func:`~isaaclab.app.launch_simulation`, or construct the physics config directly.
* **Breaking:** Removed ``isaaclab.app.logging_utils.resolve_python_logging_level``.
:func:`~isaaclab.app.launch_simulation` applies the ``--verbose`` / ``--info`` level itself.
2 changes: 0 additions & 2 deletions source/isaaclab/isaaclab/app/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ __all__ = [
"get_settings_manager",
"add_launcher_args",
"launch_simulation",
"make_physics_cfg",
"scan",
"Scan",
"LoadingScreen",
Expand All @@ -25,6 +24,5 @@ from .sim_launcher import (
SimulationLauncher,
add_launcher_args,
launch_simulation,
make_physics_cfg,
scan,
)
36 changes: 2 additions & 34 deletions source/isaaclab/isaaclab/app/logging_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,20 @@
#
# SPDX-License-Identifier: BSD-3-Clause

"""Backend-agnostic resolution and application of the Python logging level.
"""Backend-agnostic application of the Python logging level.

The logging intent expressed by the ``--verbose`` / ``--info`` CLI arguments must be
honored by every simulation backend, not just the Kit-based one. Keeping the resolution
honored by every simulation backend, not just the Kit-based one. Keeping the application
here (rather than inside :class:`~isaaclab_physx.app.KitLauncher`) lets the kitless launch path
apply the same level without constructing Kit.
"""

from __future__ import annotations

import argparse
import logging
import sys
from contextlib import contextmanager


def resolve_python_logging_level(launcher_args: argparse.Namespace | dict | None = None) -> int:
"""Resolve the intended Python logging level from launcher args and ``sys.argv``.

``--verbose`` maps to :data:`logging.DEBUG` and ``--info`` to :data:`logging.INFO`.
When neither is requested, the current effective level of the root logger is kept
(falling back to :data:`logging.WARNING` when unset).

Args:
launcher_args: Parsed launcher arguments as a namespace or dict. Defaults to None,
which is treated as an empty set of arguments.

Returns:
The resolved logging level.
"""
if launcher_args is None:
args = {}
elif isinstance(launcher_args, argparse.Namespace):
args = launcher_args.__dict__
else:
args = launcher_args

if args.get("verbose", False) or "--verbose" in sys.argv:
return logging.DEBUG
if args.get("info", False) or "--info" in sys.argv:
return logging.INFO

level = logging.getLogger().getEffectiveLevel()
return logging.WARNING if level == logging.NOTSET else level


@contextmanager
def force_log_level(level: int):
"""Context manager that temporarily lowers the root logger and its handlers to *level*, then restores them.
Expand Down
51 changes: 0 additions & 51 deletions source/isaaclab/isaaclab/app/settings_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,6 @@ def __init__(self):
self._backend = None
self._needs_init = False

@classmethod
def instance(cls) -> "SettingsManager":
"""Get the singleton instance of the settings manager.

Returns:
The singleton SettingsManager instance
"""
# Get instance from sys.modules (survives module reloads)
instance = sys.modules.get(_SINGLETON_KEY)

if instance is None:
instance = cls()

return instance

def set_backend(self, backend: Any) -> None:
"""Delegate all settings to *backend* from now on.

Expand Down Expand Up @@ -124,42 +109,6 @@ def get(self, path: str, default: Any = None) -> Any:
# Standalone mode - use dictionary
return self._standalone_settings.get(path, default)

def set_bool(self, path: str, value: bool) -> None:
"""Set a boolean setting value.

Args:
path: The settings path
value: The boolean value to set
"""
self.set(path, value)

def set_int(self, path: str, value: int) -> None:
"""Set an integer setting value.

Args:
path: The settings path
value: The integer value to set
"""
self.set(path, value)

def set_float(self, path: str, value: float) -> None:
"""Set a float setting value.

Args:
path: The settings path
value: The float value to set
"""
self.set(path, value)

def set_string(self, path: str, value: str) -> None:
"""Set a string setting value.

Args:
path: The settings path
value: The string value to set
"""
self.set(path, value)


def get_settings_manager() -> SettingsManager:
"""Get the global settings manager instance.
Expand Down
Loading
Loading