class_docstr: This is an abstract base class.
  Don't inherit from unittest.TestCase, and don't name it 'Test*'.
  Do, however, do these things in classes which inherit from this.
code: def testSparse(self):
      # to test duplicated indices we assign two indices to each weight and
      # thus each weight might count once or twice
      DUPLICATION = 2
      perfect_model = np.array([2, 6, 5, 0, 1]).astype(np.float32)
      np.random.seed(123)  # make test deterministic
      data = np.random.randint(
          2, size=(20, perfect_model.size * DUPLICATION)
      ).astype(np.float32)
      label = np.dot(data, np.repeat(perfect_model, DUPLICATION))
  
      model = cnn.CNNModelHelper("NCHW", name="test")
      # imitate what model wrapper does
      w = model.param_init_net.ConstantFill(
          [], "w", shape=[perfect_model.size], value=0.0
      )
      model.params.append(w)
      picked = model.net.Gather([w, "indices"], "gather")
      out = model.ReduceFrontSum(picked, "sum")
  
      sq = model.SquaredL2Distance([out, "label"])
      loss = model.AveragedLoss(sq, "avg_loss")
      grad_map = model.AddGradientOperators([loss])
      self.assertIsInstance(grad_map["w"], core.GradientSlice)
      optimizer = self.build_optimizer(model)
  
      workspace.CreateBlob("indices")
      workspace.CreateBlob("label")
  
      for indices_type in [np.int32, np.int64]:
          workspace.RunNetOnce(model.param_init_net)
          workspace.CreateNet(model.net, True)
          for _ in range(2000):
              idx = np.random.randint(data.shape[0])
              # transform into indices of binary features
              indices = np.repeat(
                  np.arange(perfect_model.size), DUPLICATION
              )[data[idx] == 1]
              if indices.size == 0:
                  continue
              workspace.FeedBlob(
                  "indices",
                  indices.reshape((indices.size,)).astype(indices_type),
              )
              workspace.FeedBlob(
                  "label", np.array(label[idx]).astype(np.float32)
              )
              workspace.RunNet(model.net.Proto().name)
  
          np.testing.assert_allclose(
              perfect_model, workspace.FetchBlob("w"), atol=1e-2
          )
      self.check_optimizer(optimizer)
  
file_path: pytorch/caffe2/python/optimizer_test_util.py
imports: import unittest
  import numpy
  from caffe2.python import brew, core, workspace, cnn, optimizer
  from caffe2.python.modeling.initializers import Initializer, PseudoFP16Initializer
  from caffe2.python.model_helper import ModelHelper
label_desc: Use image node_id 4 for calling the OptimizerTestBase obj's underlying member method code with example usage: obj.testSparse() without return types