# Order of variables in partial derivative expressions

I want to sort a set of homogenous partial derivatives lexigraphically , e.g.

```
d²x dy > dxd²y > d³y
```

because it is more often differentiated in the first term than in the second, and so on. It is assumed that x > y. I implemented a function which just generates tuples of integers which can be sorted easily, analoguos to term ordering im multivariate polynomials. So the function returns, for the example given, the tuples:

```
(2,1), (1,2),(0,3)
```

which can easily be sorted in whatever way I want. When I switched to more complicated expression I stumbled over the follwing problem:

```
P.<x,y,z, t> = PolynomialRing(QQ, 4, order='lex')
print(x>y>z>t)
u = function("u")(x,y,z,t)
v = function("v")(x,y,z,t)
w = function("w")(x,y,z,t)
d1 = diff(u(x,y,z,t), x, t, t, z)
d2 = diff(v(x,y,z,t), z,z,t,t)
print (pylie.order_of_derivative(d1))
print (pylie.order_of_derivative(d2))
print (u.variables())
print (u)
print (d1)
```

gives the output (my function is called 'order_of_derivative')

```
True
[0, 1, 2, 1]
[0, 2, 2, 0]
(t, x, y, z)
u(x, y, z, t)
diff(u(y, z, t, x), z, t, t, x)
```

So one can see that we have given an order to the variables which seems to work). But the two tuples don't behave like expected: *d1* 1st index is 0, though I expected 1 because the is a derivaton for x. When I look at the variables I can see the order *(t, x, y, z)*, the function shows *u( x, y, z, t)*, and the derivative shows *u(y,z,t,x)*, which is yet another order. Here is my function:

```
def order_of_derivative (e):
opr = e.operator ()
opd = e.operands ()
if not isinstance(opr, sage.symbolic.operators.FDerivativeOperator):
return [0] * len (e.variables())
res = [opr.parameter_set().count(i) for i in range (len(opd))]
return res
```

so the internal sort order seems to be lexicographicallly *t,x,y,z*. Of course I can build some complex workarounds, but my question is if there is a **simple** solution for that problem.