class_docstr: Memory-requiring Env: Best sequence of actions depends on prev. states.
  
  Optimal behavior:
      0) a=0 -> observe next state (s'), which is the "hidden" state.
          If a=1 here, the hidden state is not observed.
      1) a=1 to always jump to s=2 (not matter what the prev. state was).
      2) a=1 to move to s=3.
      3) a=1 to move to s=4.
      4) a=0 OR 1 depending on s' observed after 0): +10 reward and done.
          otherwise: -10 reward and done.
class_docstr_tok: ["Memory-requiring","Env",":","Best","sequence","of","actions","depends","on","prev",".","states",".","Optimal","behavior",":","0",")","a=0","-",">","observe","next","state","(","s","'",")",",","which","is","the","``","hidden","''","state",".","If","a=1","here",",","the","hidden","state","is","not","observed",".","1",")","a=1","to","always","jump","to","s=2","(","not","matter","what","the","prev",".","state","was",")",".","2",")","a=1","to","move","to","s=3",".","3",")","a=1","to","move","to","s=4",".","4",")","a=0","OR","1","depending","on","s","'","observed","after","0",")",":","+10","reward","and","done",".","otherwise",":","-10","reward","and","done","."]
code: def step(self, action):
      assert self.action_space.contains(action)
  
      if self._state == 4:
          if action and self._case:
              return self._state, 10.0, True, {}
          else:
              return self._state, -10, True, {}
      else:
          if action:
              if self._state == 0:
                  self._state = 2
              else:
                  self._state += 1
          elif self._state == 2:
              self._state = self._case
  
      return self._state, -1, False, False, {}
  
file_path: ray/rllib/examples/env/look_and_push.py
imports: import gymnasium
  import numpy
label_desc: Use image node_id 3 for calling the LookAndPush obj's underlying member method code with example usage: obj.step(action) and returns: self,  unknown,  False,  False,  dict, self,  int,  True,  dict, self,  unknown,  True,  dict