code: def test_batch_update(self):
      inputs1 = [
          {"answers": ["big moose", "hippo"]},
          {"answers": ["correct1"]},
      ]
      inputs2 = [
          {"answers": ["correct2.1", "correct2.2"]},
          {"answers": ["a", "b"]},
      ]
  
      with mock.patch.object(
          seqio.test_utils.MockVocabulary, "decode", new=mock_decode
      ):
          vocabulary = seqio.test_utils.MockVocabulary(
              {
                  "‘a": 2,
                  "big": 3,
                  "Moose!‘": 4,
                  "wrong": 5,
                  "correct2.2": 6,
                  "c": 7,
              },
              vocab_size=10,
          )
  
          model_output1 = np.array([[2, 3, 4], [5, 0, 0]])
          model_output2 = np.array([[6], [7]])
          features = {"targets": seqio.Feature(vocabulary)}
          metric1 = metrics.ShardedSquad.from_model_output(
              inputs1, model_output1, features
          )
          metric2 = metrics.ShardedSquad.from_model_output(
              inputs2, model_output2, features
          )
          metric = metric1.merge(metric2)
          self.assertDictClose(
              metric.compute(), {"em": 25.0, "f1": 35.0}, places=2
          )
  
imports: from unittest import mock
  from absl.testing import absltest
  import numpy
  import seqio
  import sklearn.metrics
  from t5.evaluation import metrics
  from t5.evaluation import test_utils
label_desc: Use image node_id 5 for calling the ShardedSquadTest obj's underlying member method code with example usage: obj.test_batch_update() without return types