def METHOD_NAME(self):
    # Tests the derivatives are returned correctly.
    # Single output
    model = pints.toy.ConstantModel(1)
    times = [0, 1, 2, 1000]
    x = [3]
    y, dy = model.simulateS1(x, times)
    self.assertEqual(dy.shape, (4, ))
    self.assertTrue(np.all(dy == 1))
    self.assertTrue(np.all(y == model.simulate(x, times)))
    # Multi-output with only 1 output
    model = pints.toy.ConstantModel(1, force_multi_output=True)
    times = [0, 1, 2, 1000]
    x = [3]
    y, dy = model.simulateS1(x, times)
    self.assertEqual(dy.shape, (4, 1, 1))
    self.assertTrue(np.all(dy == 1))
    self.assertTrue(np.all(y == model.simulate(x, times)))
    # Multi-output
    model = pints.toy.ConstantModel(2)
    times = [0, 1, 2]
    x = [1, 2]
    # Check model output
    y, dy = model.simulateS1(x, times)
    # Shape is (times, outputs)
    self.assertEqual(y.shape, (3, 2))
    mx = np.array(
        [[1, 4],
         [1, 4],
         [1, 4]]
    )
    self.assertTrue(np.all(y == mx))
    self.assertTrue(np.all(y == model.simulate(x, times)))
    # Shape is (times, outputs, parameters)
    self.assertEqual(dy.shape, (3, 2, 2))
    dmx = np.array(
        [[[1, 0],   # dx1/dp1 = 1, dx1/dp2 = 0
          [0, 2]],  # dx2/dp2 = 0, dx2/dp2 = 2
         [[1, 0],
          [0, 2]],
         [[1, 0],
          [0, 2]]]
    )
    self.assertTrue(np.all(dy == dmx))