# Detecting highest order derivative of a function in an equation

I am working with some code that generates an equation with a number of derivatives. I do not know the order of the derivatives or the order. If I was working with something algebraic, for example:

a, b, c = var('a,b,c')
eqn = a**2 + 3*b + c


I could use something like

coeffs = eqn.coefficients(a)
highest_order = coeffs[-1][1]


to find out the highest order of a. It would also be okay if i could figure out the order of every derivative of a given function in an equation. I can do this if I know before-hand what the order of the derivative is

function('f')
eqn += f(a,b,c).diff(a,b)
eqn.find(f(a,b,c).diff(a,b))


and see that in fact that derivative is there somewhere. But what I really want, is for

eqn = f(a,b,c).diff(a,b) + b*f(a,b,c).diff(b,3) + c


to have something that (a) tells me 'eqn has [D[0,1](f)(a,b,c), D[1,1,1](f)(a,b,c)]' or, (b) 'the highest order derivative of eqn is D[1,1,1](f)(a,b,c)'.

edit retag close merge delete

eqn.operands() comes close to (a). But, it will still take some work to get what you want.