code: def step(self, action):
      assert self._norm_action_space.contains(action)
      action = self._convert_action(action)
      assert self._true_action_space.contains(action)
      reward = 0.0
      extra = {"internal_state": self._env.physics.get_state().copy()}
  
      terminated = truncated = False
      for _ in range(self._frame_skip):
          time_step = self._env.step(action)
          reward += time_step.reward or 0.0
          terminated = False
          truncated = time_step.last()
          if terminated or truncated:
              break
      obs = self._get_obs(time_step)
      self.current_state = _flatten_obs(time_step.observation)
      extra["discount"] = time_step.discount
      return obs, reward, terminated, truncated, extra
  
file_path: ray/rllib/env/wrappers/dm_control_wrapper.py
imports: from gymnasium import core, spaces
  import numpy
  from ray.rllib.utils.annotations import PublicAPI
label_desc: Use image node_id 8 for calling the DMCEnv obj's underlying member method code with example usage: obj.step(action) and returns: obs,  reward,  terminated,  truncated,  extra