Skip to content

Commit fd19114

Browse files
committed
Defer cfg-class imports in cartpole shims to avoid AppLauncher import-state leak
Importing the historical per-variant cfg classes at the top of each cartpole task ``__init__.py`` (so ``cfg_factory=lambda: SomeClass()`` could close over them) pulled ``isaaclab.envs``, ``isaaclab.scene``, and their downstream modules into ``sys.modules`` *during* ``isaaclab_tasks.direct.cartpole``'s package import. That happens before ``AppLauncher._create_app`` runs, and AppLauncher's mod-cache cycle ``del sys.modules[key]`` + ``sys.modules[key] = value`` only restores the ``sys.modules`` entries -- it never re-binds the submodules as attributes on the parent ``isaaclab`` package. After the cycle, ``isaaclab.scene`` lives in ``sys.modules`` but ``isaaclab.scene`` ``getattr`` on the ``isaaclab`` module raises ``AttributeError``, which breaks any unrelated test that walks a dotted string path like ``monkeypatch.setattr("isaaclab.scene.interactive_scene.cloner.X", Y)``. Concretely on this PR, both ``test_clone_environments_executes_*`` cases in ``source/isaaclab/test/scene/test_interactive_scene.py`` started failing once the eager imports landed. The same tests pass on develop because there the cfg classes are only referenced via lazy ``"module:Class"`` strings in the gym entry points, so nothing imports them before ``AppLauncher`` runs. Fix: introduce a tiny ``_lazy_cfg(class_name, module=...)`` helper in each of the four cartpole ``__init__.py`` files. The helper returns a zero-arg callable that imports the cfg class via ``importlib`` only when invoked. ``deprecated_task_alias`` still calls ``cfg_factory()`` exactly once per ``gym.make()``, so the deferred import path runs at the same moment the eager-import path would have triggered (the shim's factory body), just without the side effect of pre-loading the cfg module before ``AppLauncher``. Local verification: * ``test_clone_environments_executes_env_root_plan_with_positions``: PASS * ``test_clone_environments_executes_asset_level_plan_without_usd_positions``: PASS * 73 cartpole-deprecation tests + 5 preset-kit-decision tests: all pass.
1 parent 26b2e62 commit fd19114

4 files changed

Lines changed: 113 additions & 78 deletions

File tree

source/isaaclab_tasks/isaaclab_tasks/direct/cartpole/__init__.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,27 @@
1212
from isaaclab_tasks.utils import deprecated_task_alias
1313

1414
from . import agents
15-
from .cartpole_camera_env_cfg import (
16-
CartpoleAlbedoCameraEnvCfg,
17-
CartpoleDepthCameraEnvCfg,
18-
CartpoleRGBCameraEnvCfg,
19-
CartpoleSimpleShadingConstantCameraEnvCfg,
20-
CartpoleSimpleShadingDiffuseCameraEnvCfg,
21-
CartpoleSimpleShadingFullCameraEnvCfg,
22-
)
23-
from .cartpole_camera_presets_env_cfg import CartpoleCameraPresetsEnvCfg
15+
16+
17+
def _lazy_cfg(class_name: str, module: str = "cartpole_camera_env_cfg"):
18+
"""Return a zero-arg callable that lazily imports the named cfg class.
19+
20+
Deferring the cfg-class import to ``gym.make()`` time keeps the
21+
eager-import surface of this ``__init__.py`` minimal. Importing the cfg
22+
classes at module top pulls ``isaaclab.scene`` and friends into
23+
``sys.modules`` *before* an ``AppLauncher`` cycle clears and restores
24+
them, which leaves ``isaaclab.scene`` in ``sys.modules`` but no longer
25+
bound as an attribute of the ``isaaclab`` package -- breaking string
26+
``monkeypatch.setattr("isaaclab.scene...")`` calls in unrelated tests.
27+
"""
28+
29+
def factory():
30+
from importlib import import_module
31+
32+
return getattr(import_module(f"{__name__}.{module}"), class_name)()
33+
34+
return factory
35+
2436

2537
##
2638
# Register Gym environments.
@@ -68,7 +80,7 @@
6880
"env_cfg_entry_point": deprecated_task_alias(
6981
old_task_id="Isaac-Cartpole-RGB-Camera-Direct-v0",
7082
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=rgb"],
71-
cfg_factory=lambda: CartpoleRGBCameraEnvCfg(),
83+
cfg_factory=_lazy_cfg("CartpoleRGBCameraEnvCfg"),
7284
),
7385
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
7486
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -83,7 +95,7 @@
8395
"env_cfg_entry_point": deprecated_task_alias(
8496
old_task_id="Isaac-Cartpole-Albedo-Camera-Direct-v0",
8597
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=albedo"],
86-
cfg_factory=lambda: CartpoleAlbedoCameraEnvCfg(),
98+
cfg_factory=_lazy_cfg("CartpoleAlbedoCameraEnvCfg"),
8799
),
88100
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
89101
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -98,7 +110,7 @@
98110
"env_cfg_entry_point": deprecated_task_alias(
99111
old_task_id="Isaac-Cartpole-SimpleShading-Constant-Camera-Direct-v0",
100112
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=simple_shading_constant_diffuse"],
101-
cfg_factory=lambda: CartpoleSimpleShadingConstantCameraEnvCfg(),
113+
cfg_factory=_lazy_cfg("CartpoleSimpleShadingConstantCameraEnvCfg"),
102114
),
103115
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
104116
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -113,7 +125,7 @@
113125
"env_cfg_entry_point": deprecated_task_alias(
114126
old_task_id="Isaac-Cartpole-SimpleShading-Diffuse-Camera-Direct-v0",
115127
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=simple_shading_diffuse_mdl"],
116-
cfg_factory=lambda: CartpoleSimpleShadingDiffuseCameraEnvCfg(),
128+
cfg_factory=_lazy_cfg("CartpoleSimpleShadingDiffuseCameraEnvCfg"),
117129
),
118130
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
119131
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -128,7 +140,7 @@
128140
"env_cfg_entry_point": deprecated_task_alias(
129141
old_task_id="Isaac-Cartpole-SimpleShading-Full-Camera-Direct-v0",
130142
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=simple_shading_full_mdl"],
131-
cfg_factory=lambda: CartpoleSimpleShadingFullCameraEnvCfg(),
143+
cfg_factory=_lazy_cfg("CartpoleSimpleShadingFullCameraEnvCfg"),
132144
),
133145
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
134146
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -143,7 +155,7 @@
143155
"env_cfg_entry_point": deprecated_task_alias(
144156
old_task_id="Isaac-Cartpole-Depth-Camera-Direct-v0",
145157
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0", "presets=depth"],
146-
cfg_factory=lambda: CartpoleDepthCameraEnvCfg(),
158+
cfg_factory=_lazy_cfg("CartpoleDepthCameraEnvCfg"),
147159
),
148160
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
149161
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",
@@ -161,7 +173,7 @@
161173
"env_cfg_entry_point": deprecated_task_alias(
162174
old_task_id="Isaac-Cartpole-Camera-Presets-Direct-v0",
163175
new_command=["--task=Isaac-Cartpole-Camera-Direct-v0"],
164-
cfg_factory=lambda: CartpoleCameraPresetsEnvCfg(),
176+
cfg_factory=_lazy_cfg("CartpoleCameraPresetsEnvCfg", module="cartpole_camera_presets_env_cfg"),
165177
),
166178
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_camera_ppo_cfg.yaml",
167179
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_camera_ppo_cfg.yaml",

source/isaaclab_tasks/isaaclab_tasks/direct/cartpole_showcase/cartpole/__init__.py

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,25 @@
1212
from isaaclab_tasks.utils import deprecated_task_alias
1313

1414
from . import agents
15-
from .cartpole_env_cfg import (
16-
BoxBoxEnvCfg,
17-
BoxDiscreteEnvCfg,
18-
BoxMultiDiscreteEnvCfg,
19-
DictBoxEnvCfg,
20-
DictDiscreteEnvCfg,
21-
DictMultiDiscreteEnvCfg,
22-
DiscreteBoxEnvCfg,
23-
DiscreteDiscreteEnvCfg,
24-
DiscreteMultiDiscreteEnvCfg,
25-
MultiDiscreteBoxEnvCfg,
26-
MultiDiscreteDiscreteEnvCfg,
27-
MultiDiscreteMultiDiscreteEnvCfg,
28-
TupleBoxEnvCfg,
29-
TupleDiscreteEnvCfg,
30-
TupleMultiDiscreteEnvCfg,
31-
)
15+
16+
17+
def _lazy_cfg(class_name: str, module: str = "cartpole_env_cfg"):
18+
"""Return a zero-arg callable that lazily imports the named cfg class.
19+
20+
Deferring the cfg-class import to ``gym.make()`` time avoids pulling
21+
``isaaclab.scene`` (and other heavy modules) into ``sys.modules`` *before*
22+
an ``AppLauncher`` cycle clears and restores them, which would leave
23+
``isaaclab.scene`` in ``sys.modules`` but no longer bound as an attribute
24+
of the ``isaaclab`` package -- breaking string
25+
``monkeypatch.setattr("isaaclab.scene...")`` calls in unrelated tests.
26+
"""
27+
28+
def factory():
29+
from importlib import import_module
30+
31+
return getattr(import_module(f"{__name__}.{module}"), class_name)()
32+
33+
return factory
3234

3335
###########################
3436
# Register Gym environments
@@ -80,7 +82,7 @@
8082
"env_cfg_entry_point": deprecated_task_alias(
8183
old_task_id="Isaac-Cartpole-Showcase-Box-Box-Direct-v0",
8284
new_command=["--task=Isaac-Cartpole-Showcase-Direct-v0", "presets=box_box"],
83-
cfg_factory=lambda: BoxBoxEnvCfg(),
85+
cfg_factory=_lazy_cfg("BoxBoxEnvCfg"),
8486
),
8587
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_box_ppo_cfg.yaml",
8688
},
@@ -98,7 +100,7 @@
98100
"--agent=skrl_box_discrete_cfg_entry_point",
99101
"presets=box_discrete",
100102
],
101-
cfg_factory=lambda: BoxDiscreteEnvCfg(),
103+
cfg_factory=_lazy_cfg("BoxDiscreteEnvCfg"),
102104
),
103105
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_discrete_ppo_cfg.yaml",
104106
},
@@ -116,7 +118,7 @@
116118
"--agent=skrl_box_multidiscrete_cfg_entry_point",
117119
"presets=box_multidiscrete",
118120
],
119-
cfg_factory=lambda: BoxMultiDiscreteEnvCfg(),
121+
cfg_factory=_lazy_cfg("BoxMultiDiscreteEnvCfg"),
120122
),
121123
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_multidiscrete_ppo_cfg.yaml",
122124
},
@@ -138,7 +140,7 @@
138140
"--agent=skrl_discrete_box_cfg_entry_point",
139141
"presets=discrete_box",
140142
],
141-
cfg_factory=lambda: DiscreteBoxEnvCfg(),
143+
cfg_factory=_lazy_cfg("DiscreteBoxEnvCfg"),
142144
),
143145
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_discrete_box_ppo_cfg.yaml",
144146
},
@@ -156,7 +158,7 @@
156158
"--agent=skrl_discrete_discrete_cfg_entry_point",
157159
"presets=discrete_discrete",
158160
],
159-
cfg_factory=lambda: DiscreteDiscreteEnvCfg(),
161+
cfg_factory=_lazy_cfg("DiscreteDiscreteEnvCfg"),
160162
),
161163
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_discrete_discrete_ppo_cfg.yaml",
162164
},
@@ -174,7 +176,7 @@
174176
"--agent=skrl_discrete_multidiscrete_cfg_entry_point",
175177
"presets=discrete_multidiscrete",
176178
],
177-
cfg_factory=lambda: DiscreteMultiDiscreteEnvCfg(),
179+
cfg_factory=_lazy_cfg("DiscreteMultiDiscreteEnvCfg"),
178180
),
179181
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_discrete_multidiscrete_ppo_cfg.yaml",
180182
},
@@ -196,7 +198,7 @@
196198
"--agent=skrl_multidiscrete_box_cfg_entry_point",
197199
"presets=multidiscrete_box",
198200
],
199-
cfg_factory=lambda: MultiDiscreteBoxEnvCfg(),
201+
cfg_factory=_lazy_cfg("MultiDiscreteBoxEnvCfg"),
200202
),
201203
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_multidiscrete_box_ppo_cfg.yaml",
202204
},
@@ -214,7 +216,7 @@
214216
"--agent=skrl_multidiscrete_discrete_cfg_entry_point",
215217
"presets=multidiscrete_discrete",
216218
],
217-
cfg_factory=lambda: MultiDiscreteDiscreteEnvCfg(),
219+
cfg_factory=_lazy_cfg("MultiDiscreteDiscreteEnvCfg"),
218220
),
219221
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_multidiscrete_discrete_ppo_cfg.yaml",
220222
},
@@ -232,7 +234,7 @@
232234
"--agent=skrl_multidiscrete_multidiscrete_cfg_entry_point",
233235
"presets=multidiscrete_multidiscrete",
234236
],
235-
cfg_factory=lambda: MultiDiscreteMultiDiscreteEnvCfg(),
237+
cfg_factory=_lazy_cfg("MultiDiscreteMultiDiscreteEnvCfg"),
236238
),
237239
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_multidiscrete_multidiscrete_ppo_cfg.yaml",
238240
},
@@ -254,7 +256,7 @@
254256
"--agent=skrl_dict_box_cfg_entry_point",
255257
"presets=dict_box",
256258
],
257-
cfg_factory=lambda: DictBoxEnvCfg(),
259+
cfg_factory=_lazy_cfg("DictBoxEnvCfg"),
258260
),
259261
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_box_ppo_cfg.yaml",
260262
},
@@ -272,7 +274,7 @@
272274
"--agent=skrl_dict_discrete_cfg_entry_point",
273275
"presets=dict_discrete",
274276
],
275-
cfg_factory=lambda: DictDiscreteEnvCfg(),
277+
cfg_factory=_lazy_cfg("DictDiscreteEnvCfg"),
276278
),
277279
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_discrete_ppo_cfg.yaml",
278280
},
@@ -290,7 +292,7 @@
290292
"--agent=skrl_dict_multidiscrete_cfg_entry_point",
291293
"presets=dict_multidiscrete",
292294
],
293-
cfg_factory=lambda: DictMultiDiscreteEnvCfg(),
295+
cfg_factory=_lazy_cfg("DictMultiDiscreteEnvCfg"),
294296
),
295297
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_multidiscrete_ppo_cfg.yaml",
296298
},
@@ -312,7 +314,7 @@
312314
"--agent=skrl_tuple_box_cfg_entry_point",
313315
"presets=tuple_box",
314316
],
315-
cfg_factory=lambda: TupleBoxEnvCfg(),
317+
cfg_factory=_lazy_cfg("TupleBoxEnvCfg"),
316318
),
317319
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_box_ppo_cfg.yaml",
318320
},
@@ -330,7 +332,7 @@
330332
"--agent=skrl_tuple_discrete_cfg_entry_point",
331333
"presets=tuple_discrete",
332334
],
333-
cfg_factory=lambda: TupleDiscreteEnvCfg(),
335+
cfg_factory=_lazy_cfg("TupleDiscreteEnvCfg"),
334336
),
335337
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_discrete_ppo_cfg.yaml",
336338
},
@@ -348,7 +350,7 @@
348350
"--agent=skrl_tuple_multidiscrete_cfg_entry_point",
349351
"presets=tuple_multidiscrete",
350352
],
351-
cfg_factory=lambda: TupleMultiDiscreteEnvCfg(),
353+
cfg_factory=_lazy_cfg("TupleMultiDiscreteEnvCfg"),
352354
),
353355
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_multidiscrete_ppo_cfg.yaml",
354356
},

source/isaaclab_tasks/isaaclab_tasks/direct/cartpole_showcase/cartpole_camera/__init__.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,25 @@
1212
from isaaclab_tasks.utils import deprecated_task_alias
1313

1414
from . import agents
15-
from .cartpole_camera_env_cfg import (
16-
BoxBoxEnvCfg,
17-
BoxDiscreteEnvCfg,
18-
BoxMultiDiscreteEnvCfg,
19-
DictBoxEnvCfg,
20-
DictDiscreteEnvCfg,
21-
DictMultiDiscreteEnvCfg,
22-
TupleBoxEnvCfg,
23-
TupleDiscreteEnvCfg,
24-
TupleMultiDiscreteEnvCfg,
25-
)
15+
16+
17+
def _lazy_cfg(class_name: str, module: str = "cartpole_camera_env_cfg"):
18+
"""Return a zero-arg callable that lazily imports the named cfg class.
19+
20+
Deferring the cfg-class import to ``gym.make()`` time avoids pulling
21+
``isaaclab.scene`` (and other heavy modules) into ``sys.modules`` *before*
22+
an ``AppLauncher`` cycle clears and restores them, which would leave
23+
``isaaclab.scene`` in ``sys.modules`` but no longer bound as an attribute
24+
of the ``isaaclab`` package -- breaking string
25+
``monkeypatch.setattr("isaaclab.scene...")`` calls in unrelated tests.
26+
"""
27+
28+
def factory():
29+
from importlib import import_module
30+
31+
return getattr(import_module(f"{__name__}.{module}"), class_name)()
32+
33+
return factory
2634

2735
###########################
2836
# Register Gym environments
@@ -68,7 +76,7 @@
6876
"env_cfg_entry_point": deprecated_task_alias(
6977
old_task_id="Isaac-Cartpole-Camera-Showcase-Box-Box-Direct-v0",
7078
new_command=["--task=Isaac-Cartpole-Camera-Showcase-Direct-v0", "presets=box_box"],
71-
cfg_factory=lambda: BoxBoxEnvCfg(),
79+
cfg_factory=_lazy_cfg("BoxBoxEnvCfg"),
7280
),
7381
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_box_ppo_cfg.yaml",
7482
},
@@ -86,7 +94,7 @@
8694
"--agent=skrl_box_discrete_cfg_entry_point",
8795
"presets=box_discrete",
8896
],
89-
cfg_factory=lambda: BoxDiscreteEnvCfg(),
97+
cfg_factory=_lazy_cfg("BoxDiscreteEnvCfg"),
9098
),
9199
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_discrete_ppo_cfg.yaml",
92100
},
@@ -104,7 +112,7 @@
104112
"--agent=skrl_box_multidiscrete_cfg_entry_point",
105113
"presets=box_multidiscrete",
106114
],
107-
cfg_factory=lambda: BoxMultiDiscreteEnvCfg(),
115+
cfg_factory=_lazy_cfg("BoxMultiDiscreteEnvCfg"),
108116
),
109117
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_box_multidiscrete_ppo_cfg.yaml",
110118
},
@@ -126,7 +134,7 @@
126134
"--agent=skrl_dict_box_cfg_entry_point",
127135
"presets=dict_box",
128136
],
129-
cfg_factory=lambda: DictBoxEnvCfg(),
137+
cfg_factory=_lazy_cfg("DictBoxEnvCfg"),
130138
),
131139
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_box_ppo_cfg.yaml",
132140
},
@@ -144,7 +152,7 @@
144152
"--agent=skrl_dict_discrete_cfg_entry_point",
145153
"presets=dict_discrete",
146154
],
147-
cfg_factory=lambda: DictDiscreteEnvCfg(),
155+
cfg_factory=_lazy_cfg("DictDiscreteEnvCfg"),
148156
),
149157
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_discrete_ppo_cfg.yaml",
150158
},
@@ -162,7 +170,7 @@
162170
"--agent=skrl_dict_multidiscrete_cfg_entry_point",
163171
"presets=dict_multidiscrete",
164172
],
165-
cfg_factory=lambda: DictMultiDiscreteEnvCfg(),
173+
cfg_factory=_lazy_cfg("DictMultiDiscreteEnvCfg"),
166174
),
167175
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_dict_multidiscrete_ppo_cfg.yaml",
168176
},
@@ -184,7 +192,7 @@
184192
"--agent=skrl_tuple_box_cfg_entry_point",
185193
"presets=tuple_box",
186194
],
187-
cfg_factory=lambda: TupleBoxEnvCfg(),
195+
cfg_factory=_lazy_cfg("TupleBoxEnvCfg"),
188196
),
189197
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_box_ppo_cfg.yaml",
190198
},
@@ -202,7 +210,7 @@
202210
"--agent=skrl_tuple_discrete_cfg_entry_point",
203211
"presets=tuple_discrete",
204212
],
205-
cfg_factory=lambda: TupleDiscreteEnvCfg(),
213+
cfg_factory=_lazy_cfg("TupleDiscreteEnvCfg"),
206214
),
207215
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_discrete_ppo_cfg.yaml",
208216
},
@@ -220,7 +228,7 @@
220228
"--agent=skrl_tuple_multidiscrete_cfg_entry_point",
221229
"presets=tuple_multidiscrete",
222230
],
223-
cfg_factory=lambda: TupleMultiDiscreteEnvCfg(),
231+
cfg_factory=_lazy_cfg("TupleMultiDiscreteEnvCfg"),
224232
),
225233
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_tuple_multidiscrete_ppo_cfg.yaml",
226234
},

0 commit comments

Comments
 (0)