If you remember, in my first proposal each unit contained an attribute giving the system where it was defined, and all the computations where done using this information.
I decided to remove this because I was not sure it was the best approach for the following reason:
As I explain in the documentation, you *have to* decide some conventions when you define units, which means that you need to define some base units, and then use them to define the rest. On another side you also need to decide in which system you want to work. But since the system base units and the conventionnal units are different, and you are mainly interested in the first, it is not necessary to keep track of the conventions. But I agree that keeping track of the system may be useful.
This is the reason why a system should be used to get all units and dimensions you are using: you will be certain that they are defined with the same conventions.
Another reason not to keep track of the conventional unit is that it is impossible if you want to define these very units with the same class: when you define them you don't have any conventional units!

I mean it is not usual to think that we can not define everything in the program, but this is due to the very fact that units are human conventions at the end: you can not define everything without ending with recursion, and so you can rely on the fact that the system is defined coherently; if not you can not assume a computer will be able to fix it because it is only humans that can start with the convention.

I think the last example you give is just wrong and can not work in general for all these reasons; I don't know if I'm very clear, but I really feel that it it not possible.

Furthermore I used string to define my dimension dict, but you could also defined them using sympy Symbol since they are converted on the way:
```
>>> type(time.args[0].keys()[0])
sympy.core.symbol.Symbol
```
So it is not necessary to define a DimensionSymbol, which would be redundant.