def METHOD_NAME(self, opt, tol):
    """Tests whether separating the args into different inputs affects their
    optimization step. Assumes single argument optimization is correct, as tested elsewhere."""
    def func1(x, y, z):
        return x[0] * y[0] * z[0]
    def func2(args):
        return args[0][0] * args[1][0] * args[2][0]
    x = np.array([1.0], requires_grad=True)
    y = np.array([2.0], requires_grad=True)
    z = np.array([3.0], requires_grad=True)
    args = np.array((x, y, z), requires_grad=True)
    x_seperate, y_seperate, z_seperate = opt.step(func1, x, y, z)
    self.reset(opt)
    args_new = opt.step(func2, args)
    self.reset(opt)
    assert np.allclose(x_seperate, args_new[0], atol=tol)
    assert np.allclose(y_seperate, args_new[1], atol=tol)
    assert np.allclose(z_seperate, args_new[2], atol=tol)