Most of the calculation text is just generated with sympy+some text processing, so I'm not afraid of typos :)
The calculation could be organized better resulting with much less terms if I move the origin to overlap with one of the SphereND points. Also I like very much the idea of having an immutable type, of course most of the calculations could be prepared once and reused many times... Thanks for the idea, I'll do this