Skip to content

Commit a1b175f

Browse files
authored
refactor(tasks): seed-contract for the 4 maniskill leaf reset() overrides (#794)
draw_svg/draw_triangle/lift_peg_upright carried the byte-identical 'skip checker reset' override (jumping to BaseTaskEnv.reset, dropping seed); roll_ball overrode reset to clear cached reached-status, also without seed. Add skip_checker_reset (default False) to ManiskillBaseTask (mirrors the libero_90 fix) and collapse the 3 skip-leaves to the flag; seed-forward roll_ball's override. Behaviour preserved. Shrinks the reset(seed) conformance allowlist by 4.
1 parent 64effaa commit a1b175f

6 files changed

Lines changed: 19 additions & 21 deletions

File tree

roboverse_pack/tasks/maniskill/draw_svg.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,4 @@ def _terminated(self, states: TensorState) -> torch.Tensor:
2727
return torch.zeros(self.num_envs, dtype=torch.bool, device=self.device)
2828

2929
# rewrite checker
30-
def reset(self, states=None, env_ids=None):
31-
"""Skip checker reset."""
32-
states = super(ManiskillBaseTask, self).reset(states, env_ids)
33-
return states
30+
skip_checker_reset = True # inherit BaseTaskEnv.reset(seed=); skip per-reset checker reset

roboverse_pack/tasks/maniskill/draw_triangle.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,4 @@ def _terminated(self, states: TensorState) -> torch.Tensor:
2727
return torch.zeros(self.num_envs, dtype=torch.bool, device=self.device)
2828

2929
# rewrite checker
30-
def reset(self, states=None, env_ids=None):
31-
"""Skip checker reset."""
32-
states = super(ManiskillBaseTask, self).reset(states, env_ids)
33-
return states
30+
skip_checker_reset = True # inherit BaseTaskEnv.reset(seed=); skip per-reset checker reset

roboverse_pack/tasks/maniskill/lift_peg_upright.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,7 @@ def _terminated(self, states: TensorState) -> torch.Tensor:
5252
return pos_condition & quat_condition
5353

5454
# rewrite checker
55-
def reset(self, states=None, env_ids=None):
56-
"""Skip checker reset."""
57-
states = super(ManiskillBaseTask, self).reset(states, env_ids)
58-
return states
55+
skip_checker_reset = True # inherit BaseTaskEnv.reset(seed=); skip per-reset checker reset
5956

6057

6158
# ---------------------------------------------------------------------------

roboverse_pack/tasks/maniskill/maniskill_base.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ class ManiskillBaseTask(BaseTaskEnv):
1616
max_episode_steps = 250
1717
checker = None
1818
traj_filepath = None
19+
# Some leaves (draw_svg/draw_triangle/lift_peg_upright) intentionally skip the
20+
# per-reset checker reset. Set this True on a leaf instead of overriding reset,
21+
# so the seed-aware base reset() is inherited unchanged.
22+
skip_checker_reset = False
1923

2024
def __init__(self, scenario: ScenarioCfg, device: str | torch.device | None = None) -> None:
2125
check_and_download_single(self.traj_filepath)
@@ -27,9 +31,13 @@ def _terminated(self, states: TensorState) -> torch.Tensor:
2731
return self.checker.check(self.handler, states)
2832

2933
def reset(self, states=None, env_ids=None, seed=None):
30-
"""Reset the checker. ``seed`` is forwarded to ``super().reset``."""
34+
"""Reset the env; reset the checker unless ``skip_checker_reset`` is set.
35+
36+
``seed`` is forwarded to ``super().reset``.
37+
"""
3138
states = super().reset(states, env_ids, seed)
32-
self.checker.reset(self.handler, env_ids=env_ids)
39+
if self.checker is not None and not self.skip_checker_reset:
40+
self.checker.reset(self.handler, env_ids=env_ids)
3341
return states
3442

3543
def _get_initial_states(self) -> list[dict] | None:

roboverse_pack/tasks/maniskill/roll_ball.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,12 @@ def _ensure_status(self, n: int, device) -> None:
120120
if getattr(self, "_reached_status", None) is None or self._reached_status.shape[0] != n:
121121
self._reached_status = torch.zeros(n, device=device)
122122

123-
def reset(self, states=None, env_ids=None):
124-
"""Reset the env and clear cached reached status for the given env ids."""
125-
out = super().reset(states, env_ids)
123+
def reset(self, states=None, env_ids=None, seed=None):
124+
"""Reset the env and clear cached reached status for the given env ids.
125+
126+
``seed`` is forwarded to ``super().reset``.
127+
"""
128+
out = super().reset(states, env_ids, seed)
126129
if getattr(self, "_reached_status", None) is not None:
127130
if env_ids is None:
128131
self._reached_status.zero_()

tests/test_task_reset_seed_contract.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@
4646
"beyondmimic/metasim/envs/base_legged_robot.py",
4747
"beyondmimic/metasim/mdp/commands.py",
4848
"libero/native_libero.py",
49-
"maniskill/draw_svg.py",
50-
"maniskill/draw_triangle.py",
51-
"maniskill/lift_peg_upright.py",
52-
"maniskill/roll_ball.py",
5349
"mjlab/cartpole_train.py",
5450
"mjlab/mdp/commands.py",
5551
"mjlab/mdp/sensors.py",

0 commit comments

Comments
 (0)