Your definition of up projection in clifford.gac is following:
def up(x):
a = x[e1]
b = x[e2]
return a*e1 + b*e2 + 0.5*a**2*n1 + n1b + 0.5*b**2*n2 + n2b + a*b*n3
But this is according to some articles wrong (and it also doesn't work on some basic examples).
I'm referring to these papers: https://link.springer.com/chapter/10.1007/978-3-030-61864-3_41, https://link.springer.com/chapter/10.1007/978-3-030-22514-8_57.
In language of these papers, what you are using is:

but it should be this:

nx = e5+e8
nxb = 0.5*(-e5+e8)
nm = e4+e7
nmb = 0.5*(-e4+e7)
n = e3+e6
nb = 0.5*(-e3+e6)
def up(x):
a = x[e1]
b = x[e2]
return nb + a*e1 + b*e2 + 1/2 * (a**2 + b**2)*n + 1/2 * (a**2 - b**2)*nm + a*b*nx
Your definition of up projection in clifford.gac is following:
But this is according to some articles wrong (and it also doesn't work on some basic examples).


I'm referring to these papers: https://link.springer.com/chapter/10.1007/978-3-030-61864-3_41, https://link.springer.com/chapter/10.1007/978-3-030-22514-8_57.
In language of these papers, what you are using is:
but it should be this: