class_docstr: Mock PyEnvironment with rewards that are nested dicts.
class_docstr_tok: ["Mock","PyEnvironment","with","rewards","that","are","nested","dicts","."]
code: def _step(self, action):
      self._state = (self._state + 1) % 3
      self.last_call_thread_id = threading.current_thread().ident
  
      observation = [self._state]
      reward = {
          "constraint": 2.0,
          "reward": 1.0,
      }
      if self._state == 0:
          return ts.restart(
              observation, batch_size=1, reward_spec=self._reward_spec
          )  # pytype: disable=wrong-arg-types
      elif self._state == 2:
          return ts.termination(
              observation, reward=reward
          )  # pytype: disable=wrong-arg-types
      return ts.transition(observation, reward=reward)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import threading
  from typing import Text
  from absl.testing import parameterized
  from absl.testing.absltest import mock
  import numpy
  import tensorflow
  from tf_agents import specs
  from tf_agents.environments import batched_py_environment
  from tf_agents.environments import py_environment
  from tf_agents.environments import suite_gym
  from tf_agents.environments import tf_py_environment
  from tf_agents.trajectories import time_step
  from tf_agents.utils import common
label_desc: Use image node_id 6 for calling the PYEnvironmentMockNestedRewards obj's underlying member method code with example usage: obj._step(action) and returns: ts, ts, ts