class_docstr: Tests TF and Sonnet run concurrently produce equivalent output.
code: def assertParametersRemainClose(
      self, seed, config, num_steps=100, atol=1e-4
  ):
      tf_opt = self._make_tf(**config)
      snt_opt = self._make_snt(**config)
  
      # TODO(tomhennigan) Add sparse data.
      data = _generate_dense_data(seed, num_steps)
      tf_params = _apply_optimizer(data, tf_opt)
      snt_params = _apply_optimizer(data, snt_opt)
      assert tf_params and len(tf_params) == len(snt_params)
  
      for step, (tf_param, snt_param) in enumerate(
          zip(tf_params, snt_params)
      ):
          msg = "TF and Sonnet diverged at step {}".format(step)
          for tf_p, snt_p in zip(tf_param, snt_param):
              self.assertEqual(tf_p.shape, snt_p.shape)
              self.assertEqual(tf_p.dtype, snt_p.dtype)
              self.assertAllClose(tf_p, snt_p, atol=atol, msg=msg)
  
imports: import itertools
  from absl.testing import parameterized
  import numpy
  from sonnet.src import base
  from sonnet.src import test_utils
  import tensorflow
  import tree
label_desc: Use image node_id 3 for calling the AbstractFuzzTest obj's underlying member method code with example usage: obj.assertParametersRemainClose(seed, config, num_steps, atol) without return types