88import gymnasium as gym
99import numpy as np
1010from greenlet import getcurrent , greenlet
11+ from gymnasium .utils import seeding
1112from rcs ._core .common import Hand , RobotPlatform
1213from rcs .camera .interface import BaseCameraSet
1314from rcs .envs .space_utils import (
@@ -242,16 +243,18 @@ def step_sim(self):
242243 self .sim .step_until_convergence ()
243244
244245 def apply_sim_state (self ):
246+ # TODO: would a mj.forward be good enough here or even cleaner?
245247 self .sim .step (2 )
246248
247249 def reset (
248250 self , * , seed : int | None = None , options : dict [str , Any ] | None = None
249251 ) -> tuple [dict [str , Any ], dict [str , Any ]]:
252+ assert seed is None , "seed should never arrive here, did you forget to add the CoverWrapper?"
250253 if self .main_greenlet is not None :
251254 self .main_greenlet .switch ()
252255 else :
253256 self .apply_sim_state ()
254- return super ().reset (seed = seed , options = options )
257+ return super ().reset (seed = None , options = options )
255258
256259 def observation (self , observation : dict [str , Any ], info : dict [str , Any ]) -> tuple [dict [str , Any ], dict [str , Any ]]:
257260 sim_state = self .sim .get_state ()
@@ -274,7 +277,10 @@ def reset(
274277 if self .env .get_wrapper_attr ("PLATFORM" ) == RobotPlatform .SIMULATION :
275278 sim = cast (simulation .Sim , self .get_wrapper_attr ("sim" ))
276279 sim .reset ()
277- return super ().reset (seed = seed , options = options )
280+ if seed is not None :
281+ # seed only once at the top of the stack
282+ self .np_random , _ = seeding .np_random (seed )
283+ return super ().reset (seed = None , options = options )
278284
279285
280286class RobotWrapper (ActObsInfoWrapper ):
0 commit comments