code: def _generate_dense_data(seed, num_steps):
      """Generates deterministic random parameters and gradients."""
      # Use numpy random since it is deterministic (unlike TF).
      np.random.seed(seed=seed)
      params = [
          np.random.normal(size=(10, 10, 10)).astype(np.float32),
          np.random.normal(size=(10, 10)).astype(np.float32),
          np.random.normal(size=(10,)).astype(np.float32),
      ]
      per_step_grads = []
      for _ in range(num_steps):
          per_step_grads.append(
              [
                  np.random.normal(size=(10, 10, 10)).astype(
                      np.float32
                  ),
                  np.random.normal(size=(10, 10)).astype(np.float32),
                  np.random.normal(size=(10,)).astype(np.float32),
              ]
          )
      return params, per_step_grads
  
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 2 for calling a global function with example usage: _generate_dense_data(seed, num_steps) and returns: params,  per_step_grads