@asmeurer  This code from `sympy/core/tests/test_function.py` is the reason for the `new_name` parameter:

    def test_unhandled():
        class MyExpr(Expr):
            def _eval_derivative(self, s):
                if not s.name.startswith('xi'):
                    return self
                else:
                    return None
    
        expr = MyExpr(x, y, z)
        assert diff(expr, x, y, f(x), z) == Derivative(expr, f(x), z)
        assert diff(expr, f(x), x) == Derivative(expr, f(x), x)

Tell me what to do with it and I happily remove the `new_name` parameter from the API.

Should I just use `Dummy('xi')` in the `_eval_derivative_wrt` function? There is no test case case that actually checks for the index, just that it starts with `'xi'` ...