code: def test_specs(self):
      original_env = FakeNonZeroObservationEnvironment()
      env = wrappers.FrameStackingWrapper(original_env, 2)
  
      original_observation_spec = original_env.observation_spec()
      expected_shape = original_observation_spec.shape + (2,)
      observation_spec = env.observation_spec()
      self.assertEqual(expected_shape, observation_spec.shape)
  
      expected_action_spec = original_env.action_spec()
      action_spec = env.action_spec()
      self.assertEqual(expected_action_spec, action_spec)
  
      expected_reward_spec = original_env.reward_spec()
      reward_spec = env.reward_spec()
      self.assertEqual(expected_reward_spec, reward_spec)
  
      expected_discount_spec = original_env.discount_spec()
      discount_spec = env.discount_spec()
      self.assertEqual(expected_discount_spec, discount_spec)
  
file_path: acme/acme/wrappers/frame_stacking_test.py
imports: from acme import wrappers
  from acme.testing import fakes
  import numpy
  import tree
  from absl.testing import absltest
label_desc: Use image node_id 1 for calling the FrameStackingTest obj's underlying member method code with example usage: obj.test_specs() without return types