code: def testDenseNesterov(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, use_nesterov=True
      )
      # Step 1 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[0.05, 1.05], [2.43, 3.43]], [x.numpy() for x in parameters]
      )
      # Step 2 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-1.305, -0.305], [1.617, 2.617]],
          [x.numpy() for x in parameters],
      )
      # Step 3 of Momentum
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-3.0245, -2.0245], [0.5853, 1.5853]],
          [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 3 for calling the MomentumTest obj's underlying member method code with example usage: obj.testDenseNesterov() without return types