On Friday, April 25, 2014 1:16:19 AM UTC+2, Aaron Meurer wrote: > > If we override _eval_derivative on MatrixElement can we make it do the > right thing? >
No. Because in the case that fails, MatrixElement._eval_derivative is never called. That's the whole point of the existing _diff_wrt interface: Derivative.__new__ will try to replace the instances of the MatrixElement we differentiate wrt in the expression so we can differentiate wrt an ordinary symbol. I've now written a patch and created a pull request that adds a _eval_derivative_wrt interface that can be used to address that issue. https://github.com/sympy/sympy/pull/7437 I preserved the current behavior of the other classes with _diff_wrt=True, but I think the is room for improvement there as well. For example should the following code really return "x"? from sympy import * x = Symbol('x') f = Function('f') diff(x*f(x), f(x)) With the new interface Function._eval_derivative_wrt could detect that even after substituting f(x) in x*f(x), the resulting term x*xi_1 still contains members of f(x).free_symbols and thus make diff() return "Derivative(x*f(x), f(x))" instead. Please comment on the pull request if you disagree with the approach I chose. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/177e7ddd-655e-46bf-a64d-a2aae98d5aae%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
