code: def testShapesAndValues(self):
      agent = self._create_test_agent()
      self.assertEqual(agent._support.shape[0], self._num_atoms)
      self.assertEqual(jnp.min(agent._support), -self._vmax)
      self.assertEqual(jnp.max(agent._support), self._vmax)
      state = onp.ones((1, 28224))
      net_output = agent.network_def.apply(
          agent.online_params, state, agent._support
      )
      self.assertEqual(
          net_output.logits.shape, (self._num_actions, self._num_atoms)
      )
      self.assertEqual(
          net_output.probabilities.shape, net_output.logits.shape
      )
      self.assertEqual(net_output.logits.shape[0], self._num_actions)
      self.assertEqual(net_output.logits.shape[1], self._num_atoms)
      self.assertEqual(net_output.q_values.shape, (self._num_actions,))
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import absltest
  from dopamine.discrete_domains import atari_lib
  from dopamine.jax.agents.dqn import dqn_agent
  from dopamine.jax.agents.rainbow import rainbow_agent
  from dopamine.utils import test_utils
  from flax import linen
  import gin
  import jax
  import jax.numpy
  import numpy
label_desc: Use image node_id 4 for calling the RainbowAgentTest obj's underlying member method code with example usage: obj.testShapesAndValues() without return types