code: def test_train_process_soft(self):
      self._metric.train()
      soft_targets = torch.FloatTensor(
          [
              [0.98, 0.01, 0.01],  # Correct
              [0.01, 0.98, 0.01],  # Correct
              [0.01, 0.01, 0.98],  # Correct
              [0.01, 0.01, 0.98],  # Incorrect
              [0.01, 0.98, 0.01],  # Incorrect
          ]
      )
      state = self._state.copy()
      state[torchbearer.Y_TRUE] = soft_targets
      result = self._metric.process(state)
      for i in range(0, len(self._targets)):
          self.assertEqual(
              result[i],
              self._targets[i],
              msg="returned: "
              + str(result[i])
              + " expected: "
              + str(self._targets[i])
              + " in: "
              + str(result),
          )
  
imports: import unittest
  import torch
  from torch.autograd import Variable
  import torchbearer
  from torchbearer.metrics import Loss, Epoch, CategoricalAccuracy, TopKCategoricalAccuracy, BinaryAccuracy, MeanSquaredError
label_desc: Use image node_id 4 for calling the TestCategoricalAccuracy obj's underlying member method code with example usage: obj.test_train_process_soft() without return types