In the generated Python code for 3D-CGA or actually in the template and also in the cga.cpp the variable definitions for "no" (origin) and "ni" (point at infinity) seem to be switched and so the "up"-function shouldn't work as expected as it uses "no" and "ni" as usual (in the right way)!
In the generated Python code for 3D-CGA or actually in the template and also in the cga.cpp the variable definitions for "no" (origin) and "ni" (point at infinity) seem to be switched and so the "up"-function shouldn't work as expected as it uses "no" and "ni" as usual (in the right way)!
The correct definitions can be seen in the Cheatsheet at ObservableHQ or at Wikipedia and should just be switched.