code: def testBundling(self):
      agent = self._create_test_agent()
      # These values don't reflect the actual types of these attributes, but are
      # used merely for facility of testing.
      agent.state = "state"
      agent._replay = mock.Mock()
      agent.training_steps = "training_steps"
      iteration_number = 1729
      bundle = agent.bundle_and_checkpoint(
          self._test_subdir, iteration_number
      )
      keys = [
          "state",
          "training_steps",
          "online_params",
          "target_params",
      ]
      for key in keys:
          self.assertIn(key, bundle)
          if "params" not in key:
              self.assertEqual(key, bundle[key])
  
      agent.unbundle(self._test_subdir, iteration_number, bundle)
      for key in keys:
          if "params" not in key:
              self.assertEqual(key, agent.__dict__[key])
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import shutil
  from absl import flags
  from absl.testing import absltest
  from dopamine.discrete_domains import atari_lib
  from dopamine.jax.agents.dqn import dqn_agent
  from dopamine.utils import test_utils
  from flax import linen
  import gin
  import jax.numpy
  import mock
  import numpy
label_desc: Use image node_id 17 for calling the DQNAgentTest obj's underlying member method code with example usage: obj.testBundling() without return types