> But I see that you do arbitrary decisions for no reasons.

Truth to be told, I am a newbie to here. Don't think me as a genius. Please be bit specific to the issue you point. Anyway I admit that I was bit arbitrary. 

> I don't understand what you mean by "the implementation needs this".

Simply take the following example I checked with ```master```.
```
In [0]: h = Poly(x**2 + y**3, x, y)

In [1]: h.gens
Out[0]: (x, y)

In [2]: degree(h) # Note that degree is calculated on x but not y
Out[1]: 2

In [3]: degree(h, x)
Out[2]: 2

In [4]: degree(h, y)
Out[3]: 3
```
Therefore my algorithm needed a way to handle the ```Poly``` functions and went with the way which raised the first ```gen``` of available ```gens```. Do you have a better alternative for this?