@@ -150,24 +150,6 @@ def _make_lifecycle(
150150 )
151151
152152
153- def _make_supported_tsm_module () -> ModuleType :
154- """Build a fake ``teleop_session_manager`` with the new execution config API."""
155-
156- @dataclass
157- class DeadlinePacingConfig :
158- safety_margin_s : float = 0.025
159-
160- @dataclass
161- class RetargetingExecutionConfig :
162- mode : str = "sync"
163- pacing : DeadlinePacingConfig | None = None
164-
165- tsm = ModuleType ("isaacteleop.teleop_session_manager" )
166- tsm .DeadlinePacingConfig = DeadlinePacingConfig # type: ignore[attr-defined]
167- tsm .RetargetingExecutionConfig = RetargetingExecutionConfig # type: ignore[attr-defined]
168- return tsm
169-
170-
171153# ============================================================================
172154# Shipped .env profile paths
173155# ============================================================================
@@ -206,48 +188,14 @@ def test_profiles_are_in_same_directory(self):
206188class TestRetargetingExecutionConfig :
207189 """Tests for Isaac Lab's IsaacTeleop retargeting execution defaults."""
208190
209- def test_cfg_defaults_to_deadline_paced_pipelined_retargeting (self ):
210- """Isaac Lab defaults to deadline-paced pipelined retargeting."""
211- import isaaclab_teleop .isaac_teleop_cfg as cfg_module
212-
213- with (
214- patch .object (cfg_module , "_RETARGETING_EXECUTION_SUPPORTED" , True ),
215- patch .object (cfg_module , "_tsm" , _make_supported_tsm_module ()),
216- ):
217- cfg = _make_cfg ()
191+ def test_session_config_receives_deadline_paced_pipelined_retargeting (self ):
192+ """The default retargeting execution config is passed into TeleopSession."""
193+ cfg = _make_cfg ()
218194
219195 assert cfg .retargeting_execution .mode == "pipelined"
220196 assert cfg .retargeting_execution .pacing .safety_margin_s == 0.025
221197
222- def test_cfg_defaults_to_none_with_legacy_isaacteleop (self ):
223- """Older IsaacTeleop releases can still construct IsaacTeleopCfg."""
224- import isaaclab_teleop .isaac_teleop_cfg as cfg_module
225-
226- with patch .object (cfg_module , "_RETARGETING_EXECUTION_SUPPORTED" , False ):
227- cfg = _make_cfg ()
228-
229- assert cfg .retargeting_execution is None
230-
231- def test_retargeting_execution_support_requires_new_config_classes (self ):
232- """IsaacTeleop must expose both execution config classes to enable the default."""
233- import isaaclab_teleop .isaac_teleop_cfg as cfg_module
234-
235- legacy_tsm = ModuleType ("isaacteleop.teleop_session_manager" )
236- assert not cfg_module ._retargeting_execution_is_supported (legacy_tsm )
237-
238- legacy_tsm .RetargetingExecutionConfig = object
239- assert not cfg_module ._retargeting_execution_is_supported (legacy_tsm )
240-
241- legacy_tsm .DeadlinePacingConfig = object
242- assert cfg_module ._retargeting_execution_is_supported (legacy_tsm )
243-
244- def test_session_config_receives_cfg_retargeting_execution (self ):
245- """The configured IsaacTeleop execution mode is passed into TeleopSession."""
246- import isaaclab_teleop .session_lifecycle as lifecycle_module
247-
248- cfg = _make_cfg ()
249- sentinel_execution = object ()
250- cfg .retargeting_execution = sentinel_execution
198+ sentinel_execution = cfg .retargeting_execution
251199
252200 lifecycle = TeleopSessionLifecycle (cfg )
253201 lifecycle ._pipeline = MagicMock ()
@@ -258,7 +206,6 @@ def test_session_config_receives_cfg_retargeting_execution(self):
258206 fake_tsm_module = sys .modules ["isaacteleop.teleop_session_manager" ]
259207
260208 with (
261- patch .object (lifecycle_module , "_RETARGETING_EXECUTION_SUPPORTED" , True ),
262209 patch .object (fake_tsm_module , "TeleopSessionConfig" , session_config_cls ),
263210 patch .object (fake_tsm_module , "TeleopSession" , session_cls ),
264211 patch .object (lifecycle , "_ensure_xr_ar_profile_enabled" ),
@@ -268,64 +215,6 @@ def test_session_config_receives_cfg_retargeting_execution(self):
268215
269216 assert session_config_cls .call_args .kwargs ["retargeting_execution" ] is sentinel_execution
270217
271- def test_session_config_omits_retargeting_execution_for_legacy_isaacteleop (self , caplog ):
272- """When IsaacTeleop lacks the new API, the kwarg is never passed."""
273- import isaaclab_teleop .isaac_teleop_cfg as cfg_module
274- import isaaclab_teleop .session_lifecycle as lifecycle_module
275-
276- with patch .object (cfg_module , "_RETARGETING_EXECUTION_SUPPORTED" , False ):
277- cfg = _make_cfg ()
278-
279- cfg .retargeting_execution = object ()
280-
281- lifecycle = TeleopSessionLifecycle (cfg )
282- lifecycle ._pipeline = MagicMock ()
283- lifecycle ._teleop_control_pipeline = None
284-
285- session_config_cls = MagicMock (return_value = MagicMock ())
286- session_cls = MagicMock ()
287- fake_tsm_module = sys .modules ["isaacteleop.teleop_session_manager" ]
288-
289- with (
290- patch .object (lifecycle_module , "_RETARGETING_EXECUTION_SUPPORTED" , False ),
291- patch .object (fake_tsm_module , "TeleopSessionConfig" , session_config_cls ),
292- patch .object (fake_tsm_module , "TeleopSession" , session_cls ),
293- patch .object (lifecycle , "_ensure_xr_ar_profile_enabled" ),
294- patch .object (lifecycle , "_acquire_kit_oxr_handles" , return_value = object ()),
295- caplog .at_level ("WARNING" , logger = "isaaclab_teleop.session_lifecycle" ),
296- ):
297- assert lifecycle .try_start_session () is True
298-
299- assert "retargeting_execution" not in session_config_cls .call_args .kwargs
300- assert session_config_cls .call_args .kwargs ["app_name" ] == cfg .app_name
301- assert "does not support retargeting_execution" in caplog .text
302-
303- def test_session_config_propagates_typeerror_from_supported_isaacteleop (self ):
304- """A TypeError from a supported IsaacTeleop must surface, not be swallowed."""
305- import isaaclab_teleop .session_lifecycle as lifecycle_module
306-
307- cfg = _make_cfg ()
308- cfg .retargeting_execution = object ()
309-
310- lifecycle = TeleopSessionLifecycle (cfg )
311- lifecycle ._pipeline = MagicMock ()
312- lifecycle ._teleop_control_pipeline = None
313-
314- def raising_session_config (** kwargs ):
315- raise TypeError ("invalid value for retargeting_execution" )
316-
317- fake_tsm_module = sys .modules ["isaacteleop.teleop_session_manager" ]
318-
319- with (
320- patch .object (lifecycle_module , "_RETARGETING_EXECUTION_SUPPORTED" , True ),
321- patch .object (fake_tsm_module , "TeleopSessionConfig" , raising_session_config ),
322- patch .object (fake_tsm_module , "TeleopSession" , MagicMock ()),
323- patch .object (lifecycle , "_ensure_xr_ar_profile_enabled" ),
324- patch .object (lifecycle , "_acquire_kit_oxr_handles" , return_value = object ()),
325- ):
326- with pytest .raises (TypeError , match = "retargeting_execution" ):
327- lifecycle .try_start_session ()
328-
329218
330219# ============================================================================
331220# _ensure_cloudxr_runtime
0 commit comments