class_docstr: Base wrapper implementing PyEnvironmentBaseWrapper interface for Gymnasium envs.
  
  Action and observation specs are automatically generated from the action and
  observation spaces. See base class for py_environment.Base details.
class_docstr_tok: ["Base","wrapper","implementing","PyEnvironmentBaseWrapper","interface","for","Gymnasium","envs",".","Action","and","observation","specs","are","automatically","generated","from","the","action","and","observation","spaces",".","See","base","class","for","py_environment.Base","details","."]
code: def _step(self, action):
      # Some environments (e.g. FrozenLake) use the action as a key to the
      # transition probability, so it has to be hashable. In the case of discrete
      # actions we have a numpy scalar (e.g array(2)) which is not hashable
      # in this case, we simply pull out the scalar value which will be hashable.
      if self._action_is_discrete and isinstance(action, np.ndarray):
          action = action.item()
  
      # Figure out how tuple or dict actions will be generated by the
      # agents and if we can pass them through directly to gym.
      (
          observation,
          reward,
          self._terminated,
          self._truncated,
          self._info,
      ) = self._gym_env.step(action)
  
      if self._terminated:
          return ts.termination(observation, reward)
      elif self._truncated:
          return ts.truncation(observation, reward, self._discount)
      else:
          return ts.transition(observation, reward, self._discount)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  from typing import Any, Optional, Text, Union
  import gymnasium
  from gymnasium.utils import seeding
  import numpy
  import tensorflow
  from tf_agents import specs
  from tf_agents.environments import py_environment
  from tf_agents.trajectories import time_step
  from tf_agents.typing import types
label_desc: Use image node_id 8 for calling the GymnasiumWrapper obj's underlying member method code with example usage: obj._step(action) and returns: ts, ts, ts