code: def testDense(self):
      parameters = [tf.Variable([1.0, 2.0]), tf.Variable([3.0, 4.0])]
      updates = [tf.constant([5.0, 5.0]), tf.constant([3.0, 3.0])]
      optimizer = self.make_optimizer(learning_rate=0.1, momentum=0.9)
      # Step 1 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[0.5, 1.5], [2.7, 3.7]], [x.numpy() for x in parameters]
      )
      # Step 2 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-0.45, 0.55], [2.13, 3.13]], [x.numpy() for x in parameters]
      )
      # Step 3 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-1.805, -0.805], [1.317, 2.317]],
          [x.numpy() for x in parameters],
      )
  
imports: from sonnet.src import test_utils
  from sonnet.src.optimizers import momentum
  from sonnet.src.optimizers import optimizer_tests
  import tensorflow
label_desc: Use image node_id 2 for calling the MomentumTest obj's underlying member method code with example usage: obj.testDense() without return types