# Here we aim to give a supply of maps EX^* -> S^1 with interesting properties.
# The most efficient way to encode such a map is to give a quotient of
# polynomials, which determines a map from an open subset of EX^* to R.
# In good cases this will extend to give a continuous function from all of
# EX^* to R u {infinity}, and then we can identify R u {infinity} with
# S^1 by the map t |-> (1-t^2,2t)/(1+t^2), with inverse (u,v) |-> v/(1+u).
# However, it is often delicate to ensure that such an extension exists.
#
# Note that the above identification relates multiplication on S^1 to the
# operation (s,t) |-> (s+t)/(1-st) = tan_sum(s,t) on R u {infinity}.
# We use several different models for the circle and the torus, indicated
# by the notation T, TA, TC and TP. These are explained in the file
# Rn.mpl, which defines functions to convert between the models.
#@ TTC_to_TT
TTC_to_TT := (z) -> [
Re(z[1]),Im(z[1]),Re(z[2]),Im(z[2]),Re(z[3]),Im(z[3]),Re(z[4]),Im(z[4])
];
#@ TT_to_TTC
TT_to_TTC := (u) -> [seq(u[2*i-1]+I*u[2*i],i=1..4)];
######################################################################
######################################################################
# A map to the 4-torus
#@ E_to_TTC_xyr
E_to_TTC_xyr := [
( y[1]*(1-y[2]/sqrt(2))-1/sqrt(2)+I*x[1])/((1-y[1]/sqrt(2))*r[1]),
( y[1]*(1+y[2]/sqrt(2))-1/sqrt(2)+I*x[2])/((1-y[1]/sqrt(2))*r[2]),
(-y[1]*(1-y[2]/sqrt(2))-1/sqrt(2)+I*x[1])/((1+y[1]/sqrt(2))*r[1]),
(-y[1]*(1+y[2]/sqrt(2))-1/sqrt(2)+I*x[2])/((1+y[1]/sqrt(2))*r[2])
];
#@ E_to_TTP_xyr
E_to_TTP_xyr := [
(1/sqrt(2)+r[1])*(1-r[1]*y[1])/x[1],
(1/sqrt(2)+r[2])*(1-r[2]*y[1])/x[2],
(1/sqrt(2)+r[1])*(1+r[1]*y[1])/x[1],
(1/sqrt(2)+r[2])*(1+r[2]*y[1])/x[2]
];
#@ E_to_TT_xyr
E_to_TT_xyr :=
simplify(TTC_to_TT(E_to_TTC_xyr)) assuming r[1]>0 and r[2]>0;
#@ E_to_TTC
E_to_TTC := unapply(eval(subs({y=yx0,r=rx},E_to_TTC_xyr)),x);
#@ E_to_TTP
E_to_TTP := unapply(eval(subs({y=yx0,r=rx},E_to_TTP_xyr)),x);
#@ E_to_TT
E_to_TT := unapply(eval(subs({y=yx0,r=rx},E_to_TT_xyr)),x);
# A left inverse for E_to_TT
#@ TT_to_E
TT_to_E := proc(u)
local A,R,S,X,Y,Z;
A[ 1] := simplify(factor((2-u[1]*u[5]-u[2]*u[6]-u[3]*u[7]-u[4]*u[8])/4));
Z[ 1] := simplify(factor(2*A[1]/(1+A[1])));
A[ 2] := simplify(factor((u[1]^2+u[3]^2+u[5]^2+u[7]^2)/4));
A[ 3] := simplify(factor((A[2]+2*A[1])/(1+A[1])/(1+2*A[1])));
Z[ 2] := simplify(factor(2 - 1/A[3]));
S[ 1] := simplify(factor(sqrt(1 - Z[2]/2))); # r[1] * r[2]
S[ 2] := simplify(factor(sqrt(2*(1 + S[1])))); # r[1] + r[2]
A[ 4] := simplify(factor(1 - Z[2] + S[1]));
A[ 5] := simplify(factor((u[1]+u[3]-u[5]-u[7])*S[2]*S[1]/(1+A[1])/A[4]/2));
Y[ 1] := A[5];
A[ 6] := simplify(factor((u[3]*u[5]-u[1]*u[7])*S[1]*(1-Z[1]/2)/2));
A[ 7] := simplify(factor((1-Z[2]/2)*((u[1]^2-u[3]^2)*(1-Y[1]/sqrt(2))^2+
(u[5]^2-u[7]^2)*(1+Y[1]/sqrt(2))^2)));
A[ 8] := simplify(factor(((u[1]*u[5]+u[2]*u[6]-u[3]*u[7]-u[4]*u[8])/(1+A[1]))));
A[ 9] := simplify(factor((A[7]+A[8])/(1+Z[1]*Z[2])/sqrt(2)));
Y[ 2] := A[9];
R[ 1] := simplify(factor(sqrt(1 - Y[2]/sqrt(2))));
R[ 2] := simplify(factor(sqrt(1 + Y[2]/sqrt(2))));
A[10] := simplify(factor(u[2]*R[1]*(1-Y[1]/sqrt(2))));
A[11] := simplify(factor(u[4]*R[2]*(1-Y[1]/sqrt(2))));
X[ 1] := A[10];
X[ 2] := A[11];
X[ 3] := Y[1];
X[ 4] := simplify(-Y[1]*Y[2]);
return [X[1],X[2],X[3],X[4]];
end:
#@ TTC_to_E
TTC_to_E := (z) -> TT_to_E(TTC_to_TT(z));
#@ TT_to_E_generic
TT_to_E_generic := proc(u)
local X,a,b;
X[1] := -sqrt(2)*u[2]*u[6]/(u[1]*u[6]+u[2]*u[5]);
X[2] := -sqrt(2)*u[4]*u[8]/(u[3]*u[8]+u[4]*u[7]);
X[3] := sqrt(2)*(u[2]-u[6])/(u[2]+u[6]);
a := ((u[1]-u[5])*(1-u[3]*u[7]-u[4]*u[8]))^2;
b := ((u[3]-u[7])*(1-u[1]*u[5]-u[2]*u[6]))^2;
X[4] := -sqrt(2)*X[3]*(a-b)/(a+b);
return [X[1],X[2],X[3],X[4]];
end:
#@ TTC_to_E_generic
TTC_to_E_generic := (z) -> TT_to_E_generic(TTC_to_TT(z));
#@ TTP_to_E_generic
TTP_to_E_generic := (t) -> [
2*sqrt(2)*t[3]*t[1]/((t[1]*t[3]-1)*(t[1]+t[3])),
2*sqrt(2)*t[4]*t[2]/((t[2]*t[4]-1)*(t[2]+t[4])),
-sqrt(2)*(t[1]-t[3])*(t[1]*t[3]-1)/((t[1]+t[3])*(t[1]*t[3]+1)),
-(4*t[1]-4*t[3])*(t[1]*t[3]-1)*(t[1]*t[4]-t[2]*t[3])*(t[1]*t[2]-t[3]*t[4])/
((t[1]+t[3])*(t[1]*t[3]+1)*(t[1]^2*t[2]^2+t[1]^2*t[4]^2-4*t[1]*t[2]*t[3]*t[4]+t[2]^2*t[3]^2+t[3]^2*t[4]^2))
]:
#@ act_TTP
act_TTP[1] := (t) -> [ t[1], t[2], t[3], t[4]];
act_TTP[L] := (t) -> [-t[2], t[1],-t[4], t[3]];
act_TTP[LL] := (t) -> [-t[1],-t[2],-t[3],-t[4]];
act_TTP[LLL] := (t) -> [ t[2],-t[1], t[4],-t[3]];
act_TTP[M] := (t) -> [ t[3],-t[4], t[1],-t[2]];
act_TTP[LM] := (t) -> [ t[4], t[3], t[2], t[1]];
act_TTP[LLM] := (t) -> [-t[3], t[4],-t[1], t[2]];
act_TTP[LLLM] := (t) -> [-t[4],-t[3],-t[2],-t[1]];
act_TTP[N] := (t) -> [ t[1],-t[2], t[3],-t[4]];
act_TTP[LN] := (t) -> [ t[2], t[1], t[4], t[3]];
act_TTP[LLN] := (t) -> [-t[1], t[2],-t[3], t[4]];
act_TTP[LLLN] := (t) -> [-t[2],-t[1],-t[4],-t[3]];
act_TTP[MN] := (t) -> [ t[3], t[4], t[1], t[2]];
act_TTP[LMN] := (t) -> [-t[4], t[3],-t[2], t[1]];
act_TTP[LLMN] := (t) -> [-t[3],-t[4],-t[1],-t[2]];
act_TTP[LLLMN]:= (t) -> [ t[4],-t[3], t[2],-t[1]];
#@ act_TTC
act_TTC[1] := (z) -> [ z[1] , z[2] , z[3] , z[4]];
act_TTC[L] := (z) -> [conjugate(z[2]), z[1] ,conjugate(z[4]), z[3]];
act_TTC[LL] := (z) -> [conjugate(z[1]),conjugate(z[2]),conjugate(z[3]),conjugate(z[4])];
act_TTC[LLL] := (z) -> [ z[2] ,conjugate(z[1]), z[4] ,conjugate(z[3])];
act_TTC[M] := (z) -> [ z[3] ,conjugate(z[4]), z[1] ,conjugate(z[2])];
act_TTC[LM] := (z) -> [ z[4] , z[3] , z[2] , z[1]];
act_TTC[LLM] := (z) -> [conjugate(z[3]), z[4] ,conjugate(z[1]), z[2]];
act_TTC[LLLM] := (z) -> [conjugate(z[4]),conjugate(z[3]),conjugate(z[2]),conjugate(z[1])];
act_TTC[N] := (z) -> [ z[1] ,conjugate(z[2]), z[3] ,conjugate(z[4])];
act_TTC[LN] := (z) -> [ z[2] , z[1] , z[4] , z[3]];
act_TTC[LLN] := (z) -> [conjugate(z[1]), z[2] ,conjugate(z[3]), z[4]];
act_TTC[LLLN] := (z) -> [conjugate(z[2]),conjugate(z[1]),conjugate(z[4]),conjugate(z[3])];
act_TTC[MN] := (z) -> [ z[3] , z[4] , z[1] , z[2]];
act_TTC[LMN] := (z) -> [conjugate(z[4]), z[3] ,conjugate(z[2]), z[1]];
act_TTC[LLMN] := (z) -> [conjugate(z[3]),conjugate(z[4]),conjugate(z[1]),conjugate(z[2])];
act_TTC[LLLMN]:= (z) -> [ z[4] ,conjugate(z[3]), z[2] ,conjugate(z[1])];
#@ act_TT
act_TT[1] := (u) -> [u[1], u[2], u[3], u[4], u[5], u[6], u[7], u[8]];
act_TT[L] := (u) -> [u[3], -u[4], u[1], u[2], u[7], -u[8], u[5], u[6]];
act_TT[LL] := (u) -> [u[1], -u[2], u[3], -u[4], u[5], -u[6], u[7], -u[8]];
act_TT[LLL] := (u) -> [u[3], u[4], u[1], -u[2], u[7], u[8], u[5], -u[6]];
act_TT[M] := (u) -> [u[5], u[6], u[7], -u[8], u[1], u[2], u[3], -u[4]];
act_TT[LM] := (u) -> [u[7], u[8], u[5], u[6], u[3], u[4], u[1], u[2]];
act_TT[LLM] := (u) -> [u[5], -u[6], u[7], u[8], u[1], -u[2], u[3], u[4]];
act_TT[LLLM] := (u) -> [u[7], -u[8], u[5], -u[6], u[3], -u[4], u[1], -u[2]];
act_TT[N] := (u) -> [u[1], u[2], u[3], -u[4], u[5], u[6], u[7], -u[8]];
act_TT[LN] := (u) -> [u[3], u[4], u[1], u[2], u[7], u[8], u[5], u[6]];
act_TT[LLN] := (u) -> [u[1], -u[2], u[3], u[4], u[5], -u[6], u[7], u[8]];
act_TT[LLLN] := (u) -> [u[3], -u[4], u[1], -u[2], u[7], -u[8], u[5], -u[6]];
act_TT[MN] := (u) -> [u[5], u[6], u[7], u[8], u[1], u[2], u[3], u[4]];
act_TT[LMN] := (u) -> [u[7], -u[8], u[5], u[6], u[3], -u[4], u[1], u[2]];
act_TT[LLMN] := (u) -> [u[5], -u[6], u[7], -u[8], u[1], -u[2], u[3], -u[4]];
act_TT[LLLMN] := (u) -> [u[7], u[8], u[5], -u[6], u[3], u[4], u[1], -u[2]];
# Images of the curves c[k] in the 4-torus
#@ c_TTP
c_TTP[ 0] := (t) -> [(1/2)*(sqrt(4*cos(t)^2+2)+sqrt(2))/cos(t),
(1/2)*(sqrt(2+4*sin(t)^2)+sqrt(2))/sin(t),
(1/2)*(sqrt(4*cos(t)^2+2)+sqrt(2))/cos(t),
(1/2)*(sqrt(2+4*sin(t)^2)+sqrt(2))/sin(t)];
c_TTP[ 1] := (t) -> (1+sqrt(2)) *~
[ (1-cos(t))/sin(t),(1-cos(t))/sin(t), (1+cos(t))/sin(t), (1+cos(t))/sin(t)];
c_TTP[ 2] := (t) -> (1+sqrt(2)) *~
[-(1-cos(t))/sin(t),(1-cos(t))/sin(t),-(1+cos(t))/sin(t), (1+cos(t))/sin(t)];
c_TTP[ 3] := (t) -> [infinity, (1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1+cos(t)),
infinity, -(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(cos(t)-1)];
c_TTP[ 4] := (t) -> [-(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1+cos(t)), infinity,
(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(cos(t)-1), infinity];
c_TTP[ 5] := (t) -> [sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)-1)*
(sqrt(2-sin(t/2)^2)+1)-cos(t/2)^2),0,
sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)+1)*
(sqrt(2-sin(t/2)^2)+1)+cos(t/2)^2),infinity];
c_TTP[ 6] := unapply(subs(-infinity = infinity,act_TTP[ L](c_TTP[5](t))),t):
c_TTP[ 7] := unapply(subs(-infinity = infinity,act_TTP[ M](c_TTP[5](t))),t):
c_TTP[ 8] := unapply(subs(-infinity = infinity,act_TTP[LM](c_TTP[5](t))),t):
c_TTP[ 9] := unapply([(sqrt(3)-1)*(sqrt(2-cos(t))+1)-(1-cos(t)),
(sqrt(3)-1)*(sqrt(2+cos(t))+1)-(1+cos(t)),
(sqrt(3)+1)*(sqrt(2-cos(t))+1)+(1-cos(t)),
(sqrt(3)+1)*(sqrt(2+cos(t))+1)+(1+cos(t))] /~ sin(t),t);
c_TTP[10] := unapply(act_TTP[ L](c_TTP[9](t)),t):
c_TTP[11] := unapply(act_TTP[ M](c_TTP[9](t)),t):
c_TTP[12] := unapply(act_TTP[LM](c_TTP[9](t)),t):
c_TTP[13] := unapply([
(sqrt(3)-sin(t))*sqrt(6)/9*(sqrt(3+sin(t)^2)+sin(t))*(3+sin(t)^2)^(1/4)*
sqrt(sqrt(3+sin(t)^2)-sin(t))+(sqrt(3)-sin(t))^2/3+sin(t)/3*sqrt(3+sin(t)^2),
(sqrt(3)-sin(t))*sqrt(6)/9*(sqrt(3+sin(t)^2)-sin(t))*(3+sin(t)^2)^(1/4)*
sqrt(sqrt(3+sin(t)^2)+sin(t))+(sqrt(3)-sin(t))^2/3-sin(t)/3*sqrt(3+sin(t)^2),
(sqrt(3)+sin(t))*sqrt(6)/9*(sqrt(3+sin(t)^2)+sin(t))*(3+sin(t)^2)^(1/4)*
sqrt(sqrt(3+sin(t)^2)-sin(t))+(sqrt(3)+sin(t))^2/3+sin(t)/3*sqrt(3+sin(t)^2),
(sqrt(3)+sin(t))*sqrt(6)/9*(sqrt(3+sin(t)^2)-sin(t))*(3+sin(t)^2)^(1/4)*
sqrt(sqrt(3+sin(t)^2)+sin(t))+(sqrt(3)+sin(t))^2/3-sin(t)/3*sqrt(3+sin(t)^2)
] /~ cos(t),t);
c_TTP[14] := unapply(act_TTP[ L](c_TTP[13](t)),t):
c_TTP[15] := unapply(act_TTP[ N](c_TTP[13](t)),t):
c_TTP[16] := unapply(act_TTP[LN](c_TTP[13](t)),t):
#@ c_TTC
c_TTC[ 0] := (t) -> [(sqrt(2)*I*cos(t)-1)/sqrt(2+cos(2*t)),
(sqrt(2)*I*sin(t)-1)/sqrt(2-cos(2*t)),
(sqrt(2)*I*cos(t)-1)/sqrt(2+cos(2*t)),
(sqrt(2)*I*sin(t)-1)/sqrt(2-cos(2*t))];
c_TTC[ 1] := (t) -> [( I*sin(t)+sqrt(2)*cos(t)-1)/(sqrt(2)-cos(t)),
( I*sin(t)+sqrt(2)*cos(t)-1)/(sqrt(2)-cos(t)),
( I*sin(t)-sqrt(2)*cos(t)-1)/(sqrt(2)+cos(t)),
( I*sin(t)-sqrt(2)*cos(t)-1)/(sqrt(2)+cos(t))];
c_TTC[ 2] := (t) -> [(-I*sin(t)+sqrt(2)*cos(t)-1)/(sqrt(2)-cos(t)),
( I*sin(t)+sqrt(2)*cos(t)-1)/(sqrt(2)-cos(t)),
(-I*sin(t)-sqrt(2)*cos(t)-1)/(sqrt(2)+cos(t)),
( I*sin(t)-sqrt(2)*cos(t)-1)/(sqrt(2)+cos(t))];
c_TTC[ 3] := (t) -> [-1,(2+I*sqrt(2)*sin(t))/(sqrt(3)-cos(t)) - sqrt(3),
-1,(2+I*sqrt(2)*sin(t))/(sqrt(3)+cos(t)) - sqrt(3)];
c_TTC[ 4] := (t) -> [(2-I*sqrt(2)*sin(t))/(sqrt(3)-cos(t)) - sqrt(3),-1,
(2-I*sqrt(2)*sin(t))/(sqrt(3)+cos(t)) - sqrt(3),-1];
c_TTC[ 5] := (t) -> [-(1/2)*sqrt(2)*(I*sqrt(5-cos(t))*sin(t)*sqrt(2)+2*sqrt(2)*cos(t)+
(2*I)*sin(t)+sqrt(5-cos(t))*cos(t)-2*sqrt(2)+
sqrt(5-cos(t)))*sqrt(2*cos(t)+6)/
((-3+cos(t))*(cos(t)+3)), 1,
-(1/2)*sqrt(2)*(I*sqrt(5-cos(t))*sin(t)*sqrt(2)+2*sqrt(2)*cos(t)-
(2*I)*sin(t)-sqrt(5-cos(t))*cos(t)-2*sqrt(2)-
sqrt(5-cos(t)))*sqrt(2*cos(t)+6)/
((-3+cos(t))*(cos(t)+3)), -1];
c_TTC[ 6] := unapply(act_TTC[ L](c_TTC[5](t)),t):
c_TTC[ 7] := unapply(act_TTC[ M](c_TTC[5](t)),t):
c_TTC[ 8] := unapply(act_TTC[LM](c_TTC[5](t)),t):
c_TTC[ 9] := (t) -> [( sqrt(3)-1 - (sqrt(3)+1)*(cos(t)-I*sin(t)))/(2*sqrt(2-cos(t))),
( sqrt(3)-1 + (sqrt(3)+1)*(cos(t)+I*sin(t)))/(2*sqrt(2+cos(t))),
(-sqrt(3)-1 + (sqrt(3)-1)*(cos(t)+I*sin(t)))/(2*sqrt(2-cos(t))),
(-sqrt(3)-1 - (sqrt(3)-1)*(cos(t)-I*sin(t)))/(2*sqrt(2+cos(t)))];
c_TTC[10] := unapply(act_TTC[ L](c_TTC[9](t)),t):
c_TTC[11] := unapply(act_TTC[ M](c_TTC[9](t)),t):
c_TTC[12] := unapply(act_TTC[LM](c_TTC[9](t)),t):
c_TTC[13] := unapply(map(s -> RP1_to_SC1([s,cos(t)]),c_TTP[13](t) *~ cos(t)),t);
c_TTC[14] := unapply(act_TTC[ L](c_TTC[13](t)),t):
c_TTC[15] := unapply(act_TTC[ N](c_TTC[13](t)),t):
c_TTC[16] := unapply(act_TTC[LN](c_TTC[13](t)),t):
# Images of the vertices v[i] in the 4-torus
#@ v_TTC
#@ v_TTP
for i from 0 to 20 do
v_TTC[i] := combine(simplify(expand(E_to_TC ( v_E0[i]))));
v_TTP[i] := combine(simplify(expand(rationalize(map(SC1_to_R,v_TC[i])))));
od:
##################################################
##################################################
# A map to the 2-torus, invariant under M = mu
#@ E_to_TPp_xyr
E_to_TPp_xyr := [sqrt(2)*x[1]/(1-sqrt(2)*y[2]),2*x[2]/y[1]/(1+sqrt(2)*y[2])];
#@ E_to_TCp_xyr
E_to_TCp_xyr := [
(2*I*x[1] + y[1]^2*(1-sqrt(2)*y[2])/sqrt(2) - y[2]*(1-y[1]^2/2))/
(sqrt(2)*(1-y[1]^2/2)*(1-y[2]/sqrt(2))),
(2*I*x[2]*y[1] + y[1]^2*(1+sqrt(2)*y[2]) - (1-y[1]^2/2))/
(1-y[1]^2/2)
];
E_to_TPp := unapply(eval(subs({y=yx0,r=rx},E_to_TPp_xyr)),x); #@ E_to_TPp
E_to_TCp := unapply(eval(subs({y=yx0,r=rx},E_to_TCp_xyr)),x); #@ E_to_TCp
#@ E_to_TPp_jacobian
E_to_TPp_jacobian :=
4*sqrt(2)*(1-x[1]^2)/(1-y[1]^2/2)/(1-y[2]/sqrt(2));
#@ TTP_to_TPp
TTP_to_TPp := (t) -> [(t[1]*t[3]-1)/(t[1]+t[3]),(t[2]*t[4]+1)/(t[4]-t[2])];
#@ TTC_to_TCp
TTC_to_TCp := (z) -> [-z[1]*z[3],-z[2]/z[4]];
#@ TPp_p
TPp_p[0] := (a) -> 1+a[2]^2/2+a[1]^2*(a[2]^2+3/2);
TPp_p[1] := (a) -> 1+a[2]^2/2-a[1]^2*(a[2]^2+3/2);
TPp_p[2] := (a) -> 3/4*a[2]^2+1;
TPp_p[3] := (a) -> TPp_p[1](a)^2 + 4*a[1]^2*TPp_p[2](a);
TPp_p[4] := (a) -> sqrt((sqrt(TPp_p[3](a))+TPp_p[1](a))/TPp_p[2](a)/2);
#@ TPp_to_E
TPp_to_E := (a) ->
[a[1]/sqrt(2)*(2+(1-2/TPp_p[4](a)^2)/(1+a[2]^2)),
a[2]/2*(2/TPp_p[4](a)-TPp_p[4](a))/(1+a[2]^2),
TPp_p[4](a),
sqrt(2)*((1+a[2]^2/2)*TPp_p[4](a)-1/TPp_p[4](a))/(1+a[2]^2)];
Tp_p[0] := (s) -> sqrt(9*s[1]^2-2*s[1]*s[3]+s[3]^2-8*s[1]+8*s[3]+8);
Tp_p[1] := (s) -> sqrt((s[1]*s[3]+4*s[1]-1+Tp_p[0](s))/(s[1]+1));
#@ Tp_to_E
Tp_to_E := (s) -> [
sqrt(8)*s[2]/(4-s[1]+s[3]+Tp_p[0](s)),
sqrt(8)*sqrt(7+s[3])*s[4]/(8+3*s[1]+s[3]+Tp_p[0](s))/Tp_p[1](s),
sqrt(2)*Tp_p[1](s)/sqrt(7+s[3]),
-2*sqrt(7+s[3])*(1+s[3])*(1-2*s[1]+s[3])/(10+9*s[3]-5*s[1]+s[1]*s[3]+s[3]^2+(3+s[3])*Tp_p[0](s))/Tp_p[1](s)
];
#@ TCp_to_E
TCp_to_E := (z) -> Tp_to_E(TC_to_T(z));
# The definitions below give an action of a group generated by L,M,N
# with M=1 and so LM = ML; this is not an action of the usual group G
#@ act_TPp
act_TPp[1] := (a) -> [ a[1], a[2]]:
act_TPp[LL] := (a) -> [-a[1],-a[2]]:
act_TPp[M] := (a) -> [ a[1], a[2]]:
act_TPp[LLM] := (a) -> [-a[1],-a[2]]:
act_TPp[N] := (a) -> [ a[1],-a[2]]:
act_TPp[LLN] := (a) -> [-a[1], a[2]]:
act_TPp[MN] := (a) -> [ a[1],-a[2]]:
act_TPp[LLMN] := (a) -> [-a[1], a[2]]:
act_TPp[L] := (a) -> [-a[2]*TPp_p[4](a)/sqrt(2), a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LLL] := (a) -> [ a[2]*TPp_p[4](a)/sqrt(2),-a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LM] := (a) -> [-a[2]*TPp_p[4](a)/sqrt(2), a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LLLM] := (a) -> [ a[2]*TPp_p[4](a)/sqrt(2),-a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LN] := (a) -> [ a[2]*TPp_p[4](a)/sqrt(2), a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LLLN] := (a) -> [-a[2]*TPp_p[4](a)/sqrt(2),-a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LMN] := (a) -> [ a[2]*TPp_p[4](a)/sqrt(2), a[1]/TPp_p[4](a)*sqrt(2)];
act_TPp[LLLMN] := (a) -> [-a[2]*TPp_p[4](a)/sqrt(2),-a[1]/TPp_p[4](a)*sqrt(2)];
# Images of curves
#@ c_TPp
c_TPp[ 0] := (t) -> [1/cos(t)/sqrt(2),infinity];
c_TPp[ 1] := (t) -> [ sin(t),tan(t)*sqrt(2)];
c_TPp[ 2] := (t) -> [-sin(t),tan(t)*sqrt(2)];
c_TPp[ 3] := (t) -> [infinity,sqrt(3/2) * tan(t)];
c_TPp[ 4] := (t) -> [-sin(t)/sqrt(2),infinity];
c_TPp[ 5] := (t) -> [sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2),0];
c_TPp[ 6] := (t) -> [0, tan(t/2)*sqrt(2)];
c_TPp[ 7] := (t) -> [sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2),0];
c_TPp[ 8] := (t) -> [0,-tan(t/2)*sqrt(2)];
c_TPp[ 9] := (t) -> [ 1/sqrt(3)/tan(t/2), tan(t/2)];
c_TPp[10] := (t) -> [-1/sqrt(3)*tan(t/2), 1/tan(t/2)];
c_TPp[11] := (t) -> [ 1/sqrt(3)/tan(t/2), tan(t/2)];
c_TPp[12] := (t) -> [ 1/sqrt(3)*tan(t/2),-1/tan(t/2)];
c_TPp[13] := (t) -> [ (1/3)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/3)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPp[14] := (t) -> [-(1/3)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/3)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPp[15] := (t) -> [ (1/3)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
-(1/3)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPp[16] := (t) -> [ (1/3)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/3)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
#@ c_TCp
c_TCp[ 0] := (t) -> [(cos(t) + I/sqrt(2))/(cos(t) - I/sqrt(2)),-1];
c_TCp[ 1] := (t) -> [(I - sin(t))/(I + sin(t)),
(I*cos(t)/sqrt(2)-sin(t))/(I*cos(t)/sqrt(2)+sin(t))];
c_TCp[ 2] := (t) -> [(I + sin(t))/(I - sin(t)),
(I*cos(t)/sqrt(2)-sin(t))/(I*cos(t)/sqrt(2)+sin(t))];
c_TCp[ 3] := (t) -> [-1,(cos(t) + I * sqrt(3/2) * sin(t))/
(cos(t) - I * sqrt(3/2) * sin(t))];
c_TCp[ 4] := (t) -> [(I*sqrt(2) + sin(t))/(I*sqrt(2) - sin(t)),-1];
c_TCp[ 5] := (t) -> [(1+8*cos(t)-cos(t)^2+4*sqrt(2)*I*sin(t)*sqrt(2+sin(t/2)^2))/
(9-cos(t)^2),1];
c_TCp[ 6] := (t) -> [1,(I*sin(t)/sqrt(2)+cos(t)-1)/(I*sin(t)/sqrt(2)-cos(t)+1)];
c_TCp[ 7] := (t) -> [(1+8*cos(t)-cos(t)^2+4*sqrt(2)*I*sin(t)*sqrt(2+sin(t/2)^2))/
(9-cos(t)^2),1];
c_TCp[ 8] := (t) -> [1,(I*sin(t)/sqrt(2)-cos(t)+1)/(I*sin(t)/sqrt(2)+cos(t)-1)];
c_TCp[ 9] := (t) -> [(cos(t)-1-I*sin(t)/sqrt(3))/(cos(t)-1+I*sin(t)/sqrt(3)),
(cos(t)-1+I*sin(t))/(-cos(t)+1+I*sin(t))];
c_TCp[10] := (t) -> [(cos(t)-1-I*sin(t)*sqrt(3))/(-cos(t)+1-I*sin(t)*sqrt(3)),
(cos(t)-1-I*sin(t))/(cos(t)-1+I*sin(t))];
c_TCp[11] := (t) -> [(cos(t)-1-I*sin(t)/sqrt(3))/(cos(t)-1+I*sin(t)/sqrt(3)),
(cos(t)-1+I*sin(t))/(-cos(t)+1+I*sin(t))];
c_TCp[12] := (t) -> [(cos(t)-1+I*sin(t)*sqrt(3))/(-cos(t)+1+I*sin(t)*sqrt(3)),
(cos(t)-1+I*sin(t))/(cos(t)-1-I*sin(t))];
for i from 13 to 16 do
c_TCp[i] := unapply(simplify(TP_to_TC(c_TPp[i](t))),t);
od:
# Images of vertices
#@ v_TCp
#@ v_TPp
for i from 0 to 20 do
v_TCp[i] := combine(simplify(expand(E_to_TCp( v_E0[i]))));
v_TPp[i] := combine(simplify(expand(rationalize(map(SC1_to_R,v_TCp[i])))));
od:
##################################################
##################################################
# The map E_to_TPpa is the composite of E_to_TPp with the automorphism
# a |-> [a[1]/sqrt(2),a[2]/2] of (R u {infinity})^2. Some formulae
# for TPpa are tidier than the analogous formulae for TPp.
#@ E_to_TPpa_xyr
E_to_TPpa_xyr := [x[1]/(1-y[2]*sqrt(2)),x[2]/y[1]/(1+y[2]*sqrt(2))];
#@ E_to_TCpa_xyr
E_to_TCpa_xyr := [(2*y[1]^2*y[2]+8*y[2]-2*sqrt(2)*y[1]^2-2*sqrt(2)-(8*I)*sqrt(2)*x[1])/
(2*sqrt(2)*y[1]^2-2*y[1]^2*y[2]-6*sqrt(2)+8*y[2]),
(10*y[1]^2*y[2]+6*sqrt(2)*y[1]^2+(8*I)*sqrt(2)*x[2]*y[1]-2*sqrt(2))/
(6*y[1]^2*y[2]+2*sqrt(2)*y[1]^2+2*sqrt(2))];
#@ E_to_TPpa
E_to_TPpa := unapply(eval(subs({y=yx0,r=rx},E_to_TPpa_xyr)),x);
#@ E_to_TCpa
E_to_TCpa := unapply(eval(subs({y=yx0,r=rx},E_to_TCpa_xyr)),x);
#@ E_to_TPpa_jacobian
E_to_TPpa_jacobian :=
64*(1-x[1]^2)*(1-y[1]^2/2)/
((-y[1]^2*sqrt(2)+y[1]^2*y[2]+3*sqrt(2)-4*y[2])*(y[1]^2*sqrt(2)+3*y[1]^2*y[2]+sqrt(2)));
#@ TPp_to_TPpa
TPp_to_TPpa := (t) -> [t[1]/sqrt(2),t[2]/2];
#@ TCp_to_TCpa
TCp_to_TCpa := (z) -> [-mob(-z[1],3-2*sqrt(2)),-mob(-z[2],1/3)];
#@ TPpa_to_TPp
TPpa_to_TPp := (t) -> [t[1]*sqrt(2),t[2]*2];
#@ TCpa_to_TCp
TCpa_to_TCp := (z) -> [-mob(-z[1],-3+2*sqrt(2)),-mob(-z[2],-1/3)];
#@ TTP_to_TPpa
TTP_to_TPpa := (t) -> [(t[1]*t[3]-1)/(t[1]+t[3])/sqrt(2),(t[2]*t[4]+1)/(t[4]-t[2])/2];
#@ TTC_to_TCpa
TTC_to_TCpa := (z) -> [-mob(z[1]*z[3],3-2*sqrt(2)),-mob(z[2]/z[4],1/3)];
#@ TPpa_p
TPpa_p[0] := (a) -> 1 + 2*a[2]^2 + a[1]^2*(3 + 8*a[2]^2);
TPpa_p[1] := (a) -> 1 + 2*a[2]^2 - a[1]^2*(3 + 8*a[2]^2);
TPpa_p[2] := (a) -> 1 + 3*a[2]^2;
TPpa_p[3] := (a) -> TPpa_p[1](a)^2 + 8*a[1]^2*TPpa_p[2](a);
TPpa_p[4] := (a) -> sqrt((sqrt(TPpa_p[3](a))+TPpa_p[1](a))/TPpa_p[2](a)/2);
# A (discontinuous) section of the map E_to_TPpa
#@ TPpa_to_E
TPpa_to_E := (a) ->
[a[1]*(2+(1-2/TPpa_p[4](a)^2)/(1+4*a[2]^2)),
a[2]*(2/TPpa_p[4](a)-TPpa_p[4](a))/(1+4*a[2]^2),
TPpa_p[4](a),
sqrt(2)*((1+2*a[2]^2)*TPpa_p[4](a)-1/TPpa_p[4](a))/(1+4*a[2]^2)];
#@ Tpa_p
Tpa_p[0] := (s) -> (4*s[1]*s[3]- 8*s[1]-6*s[3]+14)/((1+s[3])*(1+s[1]));
Tpa_p[1] := (s) -> -(6*s[1]*s[3]-14*s[1]-4*s[3]+ 8)/((1+s[3])*(1+s[1]));
Tpa_p[2] := (s) -> (4-2*s[3])/(1+s[3]);
Tpa_p[3] := (s) -> (4*(3*s[1]*s[3]-7*s[1]-2*s[3]+4)^2+16*(1-s[1]^2)*(2-s[3])*(1+s[3]))/((1+s[1])^2*(1+s[3])^2);
Tpa_p[4] := (s) -> sqrt((13*s[1]*s[3]^2-46*s[1]*s[3]-25*s[3]^2+41*s[1]+98*s[3]-97)/2/(2-s[3])/(sqrt((3*s[1]*s[3]-7*s[1]-2*s[3]+4)^2+4*(1-s[1]^2)*(2-s[3])*(s[3]+1))+11-5*s[3]) + (7-3*s[3])/2/(2-s[3]));
#@ Tpa_to_E
Tpa_to_E := (s) -> [
s[2]*(2 + (1-2/Tpa_p[4](s)^2)*(1+s[3])/(5-3*s[3]))/(1+s[1]),
s[4]*(2/Tpa_p[4](s)-Tpa_p[4](s))/(5-3*s[3]),
Tpa_p[4](s),
sqrt(2)*((3-s[3])*Tpa_p[4](s)-(1+s[3])/Tpa_p[4](s))/(5-3*s[3])
];
#@ TCpa_to_E
TCpa_to_E := (z) -> Tpa_to_E(TC_to_T(z));
# The definitions below give an action of a group generated by L,M,N
# with M=1 and so LM = ML; this is not an action of the usual group G
#@ act_TPpa
act_TPpa[1] := (a) -> [ a[1], a[2]]:
act_TPpa[LL] := (a) -> [-a[1],-a[2]]:
act_TPpa[M] := (a) -> [ a[1], a[2]]:
act_TPpa[LLM] := (a) -> [-a[1],-a[2]]:
act_TPpa[N] := (a) -> [ a[1],-a[2]]:
act_TPpa[LLN] := (a) -> [-a[1], a[2]]:
act_TPpa[MN] := (a) -> [ a[1],-a[2]]:
act_TPpa[LLMN] := (a) -> [-a[1], a[2]]:
act_TPpa[L] := (a) -> [-a[2]*TPpa_p[4](a), a[1]/TPpa_p[4](a)];
act_TPpa[LLL] := (a) -> [ a[2]*TPpa_p[4](a),-a[1]/TPpa_p[4](a)];
act_TPpa[LM] := (a) -> [-a[2]*TPpa_p[4](a), a[1]/TPpa_p[4](a)];
act_TPpa[LLLM] := (a) -> [ a[2]*TPpa_p[4](a),-a[1]/TPpa_p[4](a)];
act_TPpa[LN] := (a) -> [ a[2]*TPpa_p[4](a), a[1]/TPpa_p[4](a)];
act_TPpa[LLLN] := (a) -> [-a[2]*TPpa_p[4](a),-a[1]/TPpa_p[4](a)];
act_TPpa[LMN] := (a) -> [ a[2]*TPpa_p[4](a), a[1]/TPpa_p[4](a)];
act_TPpa[LLLMN] := (a) -> [-a[2]*TPpa_p[4](a),-a[1]/TPpa_p[4](a)];
# Images of curves
#@ c_TPpa
c_TPpa[ 0] := (t) -> [1/cos(t)/2,infinity];
c_TPpa[ 1] := (t) -> [ sin(t)/sqrt(2),tan(t)/sqrt(2)];
c_TPpa[ 2] := (t) -> [-sin(t)/sqrt(2),tan(t)/sqrt(2)];
c_TPpa[ 3] := (t) -> [infinity,sqrt(3/8) * tan(t)];
c_TPpa[ 4] := (t) -> [-sin(t)/2,infinity];
c_TPpa[ 5] := (t) -> [tan(t/2)/sqrt(2+sin(t/2)^2),0];
c_TPpa[ 6] := (t) -> [0, tan(t/2)/sqrt(2)];
c_TPpa[ 7] := (t) -> [tan(t/2)/sqrt(2+sin(t/2)^2),0];
c_TPpa[ 8] := (t) -> [0,-tan(t/2)/sqrt(2)];
c_TPpa[ 9] := (t) -> [ 1/sqrt(6)/tan(t/2), tan(t/2)/2];
c_TPpa[10] := (t) -> [-1/sqrt(6)*tan(t/2), 1/tan(t/2)/2];
c_TPpa[11] := (t) -> [ 1/sqrt(6)/tan(t/2), tan(t/2)/2];
c_TPpa[12] := (t) -> [ 1/sqrt(6)*tan(t/2),-1/tan(t/2)/2];
c_TPpa[13] := (t) -> [ (1/3/sqrt(2))*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/6)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPpa[14] := (t) -> [-(1/3/sqrt(2))*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/6)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPpa[15] := (t) -> [ (1/3/sqrt(2))*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
-(1/6)*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
c_TPpa[16] := (t) -> [ (1/3/sqrt(2))*(cos(t)^2-sin(t)*sqrt(4-cos(t)^2)+2)/cos(t),
(1/6)*(cos(t)^2+sin(t)*sqrt(4-cos(t)^2)+2)*sqrt(3)/(cos(t)*sin(t))];
#@ c_TCpa
c_TCpa[ 0] := (t) -> [(cos(t) + I/2)/(cos(t) - I/2),-1];
c_TCpa[ 1] := (t) -> [(1 + I*sin(t)/sqrt(2))/(1 - I*sin(t)/sqrt(2)),mob(exp(2*I*t),-(3-sqrt(8)))];
c_TCpa[ 2] := (t) -> [(1 - I*sin(t)/sqrt(2))/(1 + I*sin(t)/sqrt(2)),mob(exp(2*I*t),-(3-sqrt(8)))];
c_TCpa[ 3] := (t) -> [-1,mob(exp(2*I*t),-(11-sqrt(96))/5)];
c_TCpa[ 4] := (t) -> [mob(exp(I*t),2+sqrt(5))*mob(exp(I*t),2-sqrt(5)),-1];
c_TCpa[ 5] := (t) -> [-I*(I*cos(t)^2+2*sqrt(10-2*cos(t))*sin(t)-(6*I)*cos(t)-3*I)/(cos(t)^2-2*cos(t)-7), 1];
c_TCpa[ 6] := (t) -> [ 1,mob(exp(I*t),-(3-sqrt(8)))];
c_TCpa[ 7] := (t) -> [-I*(I*cos(t)^2+2*sqrt(10-2*cos(t))*sin(t)-(6*I)*cos(t)-3*I)/(cos(t)^2-2*cos(t)-7), 1];
c_TCpa[ 8] := (t) -> [ 1,mob(exp(I*t),-(3+sqrt(8)))];
c_TCpa[ 9] := (t) -> [-mob(exp(I*t), (7+2*sqrt(6))/5), mob(exp(I*t),-1/3)];
c_TCpa[10] := (t) -> [ mob(exp(I*t),-(7+2*sqrt(6))/5),-mob(exp(I*t), 3)];
c_TCpa[11] := (t) -> [-mob(exp(I*t), (7+2*sqrt(6))/5), mob(exp(I*t),-1/3)];
c_TCpa[12] := (t) -> [ mob(exp(I*t),-(7-2*sqrt(6))/5),-mob(exp(I*t), 1/3)];
for i from 13 to 16 do
c_TCpa[i] := unapply(simplify(TP_to_TC(c_TPpa[i](t))),t);
od:
# Images of vertices
#@ v_TCpa
#@ v_TPpa
for i from 0 to 20 do
v_TCpa[i] := combine(simplify(expand(E_to_TCpa( v_E0[i]))));
v_TPpa[i] := combine(simplify(expand(rationalize(map(SC1_to_R,v_TCpa[i])))));
od:
######################################################################
######################################################################
# E_to_TCm is map to the 2-torus, invariant under LM = lambda mu
#@ E_to_TPm_xyr
E_to_TPm_xyr := [
-(x[1]*y[1]*sqrt(2)*y[2]+x[2]*y[1]*sqrt(2)*y[2]+sqrt(2)*x[1]+sqrt(2)*x[2]+2*x[1]*y[1]-2*x[2]*y[1])/
(r[1]*r[2]*y[1]^2+y[1]^2*y[2]^2-2*r[1]*r[2]-2*x[1]*x[2]-2*y[1]^2+2*y[1]*y[2]+1),
(x[1]*y[1]*sqrt(2)*y[2]+x[2]*y[1]*sqrt(2)*y[2]-sqrt(2)*x[1]-sqrt(2)*x[2]+2*x[1]*y[1]-2*x[2]*y[1])/
(r[1]*r[2]*y[1]^2+y[1]^2*y[2]^2-2*r[1]*r[2]-2*x[1]*x[2]-2*y[1]^2-2*y[1]*y[2]+1)
];
#@ E_to_TCm_xyr
E_to_TCm_xyr := [
-(I*x[1] + y[1]*(1 - y[2]/sqrt(2)) - 1/sqrt(2))*
(I*x[2] - y[1]*(1 + y[2]/sqrt(2)) - 1/sqrt(2))/(r[1]*r[2]*(1-y[1]^2/2)),
-(I*x[1] - y[1]*(1 - y[2]/sqrt(2)) - 1/sqrt(2))*
(I*x[2] + y[1]*(1 + y[2]/sqrt(2)) - 1/sqrt(2))/(r[1]*r[2]*(1-y[1]^2/2))
];
#@ E_to_TPm
E_to_TPm := unapply(eval(subs({y=yx0,r=rx},E_to_TPm_xyr)),x);
#@ E_to_TCm
E_to_TCm := unapply(eval(subs({y=yx0,r=rx},E_to_TCm_xyr)),x);
#@ TTC_to_TCm
TTC_to_TCm := (z) -> [-z[1]*z[4],-z[2]*z[3]];
#@ TTP_to_TPm
TTP_to_TPm := (t) -> [(t[1]*t[4]-1)/(t[1]+t[4]),(t[2]*t[3]-1)/(t[2]+t[3])];
#@ E_to_TPm_jacobian
E_to_TPm_jacobian := 4*sqrt(2)*(3/2 - (1-y[1]^2/2)*(1-y[2]^2/2) - x[1]*x[2])/((1-y[1]^2/2)*(1-y[2]^2/2));
########################################
#@ act_TCm
act_TCm[1] := (z) -> [ z[1], z[2]];
act_TCm[LL] := (z) -> [1/z[1],1/z[2]];
act_TCm[LM] := (z) -> [ z[1], z[2]];
act_TCm[LLLM] := (z) -> [1/z[1],1/z[2]];
act_TCm[LN] := (z) -> [ z[2], z[1]];
act_TCm[LLLN] := (z) -> [1/z[2],1/z[1]];
act_TCm[MN] := (z) -> [ z[2], z[1]];
act_TCm[LLMN] := (z) -> [1/z[2],1/z[1]];
########################################
#@ v_TCm
for i from 0 to num_vertices_E-1 do
v_TCm[i] := simplify(expand(E_to_TCm( v_E0[i])));
od:
#@ v_TPm
v_TPm[ 0] := [0,0];
v_TPm[ 1] := [0,0];
v_TPm[ 2] := [ 1, 1] *~ ((1+sqrt(3))/sqrt(2));
v_TPm[ 3] := [ 1, 1] *~ ((1+sqrt(3))/sqrt(2));
v_TPm[ 4] := [-1,-1] *~ ((1+sqrt(3))/sqrt(2));
v_TPm[ 5] := [-1,-1] *~ ((1+sqrt(3))/sqrt(2));
v_TPm[ 6] := [ 1, 1];
v_TPm[ 8] := [-1,-1];
v_TPm[ 7] := [infinity,infinity];
v_TPm[ 9] := [infinity,infinity];
v_TPm[10] := [ 0,infinity];
v_TPm[13] := [ 0,infinity];
v_TPm[11] := [infinity, 0];
v_TPm[12] := [infinity, 0];
v_TPm[14] := [ 1, 1] /~ sqrt(3);
v_TPm[19] := [ 1, 1] /~ sqrt(3);
v_TPm[16] := [-1,-1] /~ sqrt(3);
v_TPm[21] := [-1,-1] /~ sqrt(3);
v_TPm[17] := [ 1,-1];
v_TPm[20] := [ 1,-1];
v_TPm[15] := [-1, 1];
v_TPm[18] := [-1, 1];
#for i from 0 to num_curves_E - 1 do
# c_TC[i] := unapply(combine(rationalize(E_to_TC( c_E0[i](t)))),t);
# c_TCp[i] := unapply(combine(rationalize(E_to_TCp( c_E0[i](t)))),t);
# c_TCm[i] := unapply(simplify(rationalize(factor(expand(combine(E_to_TCm( c_E0[i](t))))))),t);
# c_TCmq[i] := unapply(combine(factor(expand(rationalize(factor(expand(combine(E_to_TCmq(c_E0[i](t))))))))),t);
#od;
#@ c_TPm
c_TPm[ 0] := (t) -> [ 1, 1] *~ ((sqrt(sin(t-Pi/4)^4+cos(t-Pi/4)^2)+sin(t-Pi/4)^2)/cos(t-Pi/4));
c_TPm[ 1] := (t) -> [ 1, 1] *~ sin(t);
c_TPm[ 2] := (t) -> [-1, 1] *~ (sqrt(2) * tan(t));
c_TPm[ 3] := (t) -> [ (1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1-cos(t)),
(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1+cos(t))];
c_TPm[ 4] := (t) -> [-(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1+cos(t)),
-(1/2)*sqrt(2)*(1+sqrt(3))*sin(t)/(1-cos(t))];
c_TPm[ 5] := (t) -> [ sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)-1)*(sqrt(2-sin(t/2)^2)+1)-cos(t/2)^2),
-1/(sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)+1)*(sqrt(2-sin(t/2)^2)+1)+cos(t/2)^2))];
c_TPm[ 6] := (t) -> [ -1/(sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)+1)*(sqrt(2-sin(t/2)^2)+1)+cos(t/2)^2)),
sqrt(2)/sin(t)*((sqrt(2+sin(t/2)^2)-1)*(sqrt(2-sin(t/2)^2)+1)-cos(t/2)^2)];
c_TPm[ 7] := unapply(c_TPm[ 6](t),t);
c_TPm[ 8] := unapply(c_TPm[ 5](t),t);
c_TPm[ 9] := (t) -> [(sqrt(4-cos(t)^2)-sin(t)^2+sqrt(3)*cos(t))/sin(t)/(sqrt(3)+cos(t)),
(sqrt(4-cos(t)^2)-sin(t)^2-sqrt(3)*cos(t))/sin(t)/(sqrt(3)-cos(t))];
c_TPm[10] := (t) -> [(sqrt(3)*cos(t) - sqrt(4-cos(t)^2))/2/sin(t),
(sqrt(3)*cos(t) + sqrt(4-cos(t)^2))/2/sin(t)];
c_TPm[11] := unapply(c_TPm[10](t),t);
c_TPm[12] := unapply(c_TPm[ 9](t),t);
c_TPm[13] := (t) -> [sqrt(3+sin(t)^2)/cos(t)/sqrt(3),sqrt(3)*cos(t)/sqrt(3+sin(t)^2)];
c_TPm[14] := (t) -> [-cos(t)*(cos(t)^2*sqrt(3)+2*sqrt(3)+3*sqrt(4-cos(t)^2))/(sin(t)*(cos(t)^2+8)),
(1/3)*(cos(t)^2*sqrt(3)+2*sqrt(3)+3*sqrt(4-cos(t)^2))/(sin(t)*cos(t))];
c_TPm[15] := (t) -> [(1/3)*(cos(t)^2*sqrt(3)+2*sqrt(3)+3*sqrt(4-cos(t)^2))/(sin(t)*cos(t)),
-cos(t)*(cos(t)^2*sqrt(3)+2*sqrt(3)+3*sqrt(4-cos(t)^2))/(sin(t)*(cos(t)^2+8))];
c_TPm[16] := (t) -> [sqrt(3)*cos(t)/sqrt(3+sin(t)^2),sqrt(3+sin(t)^2)/cos(t)/sqrt(3)];
#@ c_TCm
c_TCm[ 0] := (t) -> [(I*sqrt(2)*sin(t)+I*sqrt(2)*cos(t)+2*sin(t)*cos(t)-1)/sqrt(4-cos(2*t)^2),
(I*sqrt(2)*sin(t)+I*sqrt(2)*cos(t)+2*sin(t)*cos(t)-1)/sqrt(4-cos(2*t)^2)];
c_TCm[ 1] := (t) -> [(I - sin(t))/(I + sin(t)),(I - sin(t))/(I + sin(t))];
c_TCm[ 2] := (t) -> [-(I*sqrt(2)*cos(t)+2*sin(t))/(-I*sqrt(2)*cos(t)+2*sin(t)),
-(-I*sqrt(2)*cos(t)+2*sin(t))/(I*sqrt(2)*cos(t)+2*sin(t))];
c_TCm[ 3] := (t) -> [(I*sqrt(2)*sin(t)-sqrt(3)*cos(t)-1)/(sqrt(3)+cos(t)),
(-sqrt(3)*cos(t)+1-I*sqrt(2)*sin(t))/(-sqrt(3)+cos(t))];
c_TCm[ 4] := (t) -> [(I*sqrt(2)*sin(t)-sqrt(3)*cos(t)+1)/(-sqrt(3)+cos(t)),
(-sqrt(3)*cos(t)-1-I*sqrt(2)*sin(t))/(sqrt(3)+cos(t))];
c_TCm[ 5] := (t) -> [(((2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)+4*cos(t)-4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2),
((-(2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)-4*cos(t)+4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2)];
c_TCm[ 6] := (t) -> [((-(2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)-4*cos(t)+4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2),
(((2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)+4*cos(t)-4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2)];
c_TCm[ 7] := (t) -> [((-(2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)-4*cos(t)+4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2),
(((2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)+4*cos(t)-4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2)];
c_TCm[ 8] := (t) -> [(((2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)+4*cos(t)-4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2),
((-(2*I)*sqrt(2)*sin(t)+2*cos(t)+2)*sqrt(2+sin((1/2)*t)^2)+(2*I)*sqrt(2)*sin(t)-4*cos(t)+4)*
sqrt(2-sin((1/2)*t)^2)/(9-cos(t)^2)];
c_TCm[ 9] := (t) -> [(sin(t)+I*cos(t))*(sin(t)+I*sqrt(3))/sqrt(4-cos(t)^2),
(sin(t)-I*cos(t))*(sin(t)+I*sqrt(3))/sqrt(4-cos(t)^2)];
c_TCm[10] := (t) -> [(-(2*I)*sin(t)+sqrt(3)*cos(t))/sqrt(4-cos(t)^2),
((2*I)*sin(t)-sqrt(3)*cos(t))/sqrt(4-cos(t)^2)];
c_TCm[11] := (t) -> [(-(2*I)*sin(t)+sqrt(3)*cos(t))/sqrt(4-cos(t)^2),
((2*I)*sin(t)-sqrt(3)*cos(t))/sqrt(4-cos(t)^2)];
c_TCm[12] := (t) -> [(sin(t)+I*cos(t))*(sin(t)+I*sqrt(3))/sqrt(4-cos(t)^2),
(sin(t)-I*cos(t))*(sin(t)+I*sqrt(3))/sqrt(4-cos(t)^2)];
c_TCm[13] := (t) -> [ ( I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2)/(cos(t)^2+2),
-(-I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2)/(cos(t)^2+2)];
c_TCm[14] := (t) -> [(I*sqrt(3)*cos(t)-2*sin(t))*(sin(t)*cos(t)^2+(3*I)*cos(t)*sqrt(4-cos(t)^2)-4*sin(t))/
((cos(t)^2+2)*(4-cos(t)^2)),
(I*sqrt(3)*cos(t)+2*sin(t))*(sin(t)*cos(t)^2+(3*I)*cos(t)*sqrt(4-cos(t)^2)-4*sin(t))/
((cos(t)^2+2)*(4-cos(t)^2))];
c_TCm[15] := (t) -> [(I*sqrt(3)*cos(t)+2*sin(t))*(sin(t)*cos(t)^2+(3*I)*cos(t)*sqrt(4-cos(t)^2)-4*sin(t))/
((cos(t)^2+2)*(4-cos(t)^2)),
(I*sqrt(3)*cos(t)-2*sin(t))*(sin(t)*cos(t)^2+(3*I)*cos(t)*sqrt(4-cos(t)^2)-4*sin(t))/
((cos(t)^2+2)*(4-cos(t)^2))];
c_TCm[16] := (t) -> [-(-I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2)/(cos(t)^2+2),
( I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2)/(cos(t)^2+2)];
######################################################################
######################################################################
# E_to_TCmq is E_to_TCm followed by an isogeny of degree two.
#@ E_to_TCmq_xyr
E_to_TCmq_xyr := [
-(2*I*x[1]*y[1] - (1-y[1]^2/2) + y[1]^2*(1 - sqrt(2)*y[2]))*
(2*I*x[2]*y[1] + (1-y[1]^2/2) - y[1]^2*(1 + sqrt(2)*y[2]))/(1-y[1]^2/2)^2,
(2*I*x[1] + y[1]^2/sqrt(2)*(1-y[2]/sqrt(2)) - y[2])*
(2*I*x[2] + y[1]^2/sqrt(2)*(1+y[2]/sqrt(2)) + y[2])/(2*(1-y[1]^2/2)^2*(1-y[2]^2/2))
];
#@ E_to_TCmq
E_to_TCmq := unapply(eval(subs({y=yx0,r=rx},E_to_TCmq_xyr)),x);
#@ TCm_to_TCmq
TCm_to_TCmq := (z) -> [ z[1]/z[2], z[1]*z[2]];
#@ TTC_to_TCmq
TTC_to_TCmq := (z) -> TCm_to_TCmq(TTC_to_TCm(z));
#@ TPm_to_TPmq
TPm_to_TPmq := (t) -> [(t[1]-t[2])/(1+t[1]*t[2]),(t[1]+t[2])/(1-t[1]*t[2])];
#@ TTP_to_TPmq
TTP_to_TPmq := (t) -> TPm_to_TPmq(TTP_to_TPm(t));
#@ E_to_TPmq
E_to_TPmq := (x) -> TTP_to_TPmq(E_to_TTP(x));
#@ E_to_TPmq_jacobian
E_to_TPmq_jacobian := 2 * E_to_TPm_jacobian;
########################################
# This map is essentially inverse to E_to_TPmq.
# In more detail, it returns an answer involving
# sqrt(RootOf(a quartic polynomial)), where it seems experimentally
# that the quartic almost always has precisely two nonnegative roots.
# Using the two possible square roots of these two roots we obtain
# four points in EX^*, and these are the preimages of a under
# E_to_TPmq.
#
# We do not have a full analysis of which preimage we get using the
# default numerical value of RootOf(). However, experimant shows
# that the signs of x[3] and 1 - (a[1]*a[2])^2 are relevant, where
# a = E_to_TPm(x) (not E_to_TPmq(x)). Alternatively, the sign of
# z[1]*z[2]+2*z[2]-2*z[1] is relevant. This sign changes as we
# cross C[13].
#@ TPmq_to_E
TPmq_to_E := proc(a,i_)
local x,xa,p,t,i;
i := `if`(nargs > 1,i_,0);
p :=
16*a[2]^2*a[1]^4+
32*a[1]^2*(1+a[1]^2-a[2]^2*a[1]^2)*t+
(-8*a[2]^2*a[1]^4-32*a[2]^2*a[1]^2-96*a[1]^4-160*a[1]^2-64)*t^2+
(24*a[2]^2*a[1]^4+32*a[2]^2*a[1]^2+72*a[1]^4+136*a[1]^2+64)*t^3+
a[2]^2*(3*a[1]^2+4)^2*t^4;
if i = 0 then
xa[3] := sqrt(RootOf(p,t));
elif i = 1 then
xa[3] := sqrt(RootOf(p,t,index=1));
elif i = 2 then
xa[3] := sqrt(RootOf(p,t,index=2));
elif i = 3 then
xa[3] := -sqrt(RootOf(p,t,index=1));
else
xa[3] := -sqrt(RootOf(p,t,index=2));
fi;
xa[1] := (1/16)*sqrt(2)*(6*sqrt(2)*a[1]^3*xa[3]^3+
3*a[2]*a[1]^2*xa[3]^4-
4*sqrt(2)*a[1]^3*xa[3]+
6*sqrt(2)*a[1]*xa[3]^3+
4*a[1]^2*a[2]*xa[3]^2+
4*a[2]*xa[3]^4-
4*sqrt(2)*a[1]*xa[3]-4*a[2]*a[1]^2)/
(xa[3]^2*(a[1]^2+1));
xa[2] := -(1/16)*sqrt(2)*(6*sqrt(2)*a[1]^3*xa[3]^3-
3*a[2]*a[1]^2*xa[3]^4-
4*sqrt(2)*a[1]^3*xa[3]+
6*sqrt(2)*a[1]*xa[3]^3-
4*a[1]^2*a[2]*xa[3]^2-
4*a[2]*xa[3]^4-
4*sqrt(2)*a[1]*xa[3]+
4*a[2]*a[1]^2)/
(xa[3]^2*(a[1]^2+1));
xa[4] := -(1/8)*a[1]*a[2]*(3*a[1]^2*xa[3]^4+4*a[1]^2*xa[3]^2+4*xa[3]^4-4*a[1]^2)/
(xa[3]^2*(a[1]^2+1));
return [xa[1],xa[2],xa[3],xa[4]];
end:
########################################
#@ act_TCmq
act_TCmq[1] := (z) -> [ z[1], z[2]];
act_TCmq[LL] := (z) -> [1/z[1],1/z[2]];
act_TCmq[LM] := (z) -> [ z[1], z[2]];
act_TCmq[LLLM] := (z) -> [1/z[1],1/z[2]];
act_TCmq[LN] := (z) -> [1/z[1], z[2]];
act_TCmq[LLLN] := (z) -> [ z[1],1/z[2]];
act_TCmq[MN] := (z) -> [1/z[1], z[2]];
act_TCmq[LLMN] := (z) -> [ z[1],1/z[2]];
########################################
#@ v_TCmq
for i from 0 to num_vertices_E-1 do
v_TCmq[i] := simplify(expand(E_to_TCmq(v_E0[i])));
od:
#@ v_TPmq
v_TPmq[ 0] := [0,0];
v_TPmq[ 1] := [0,0];
v_TPmq[ 7] := [0,0];
v_TPmq[ 9] := [0,0];
v_TPmq[ 4] := [0, sqrt(2)];
v_TPmq[ 5] := [0, sqrt(2)];
v_TPmq[ 2] := [0,-sqrt(2)];
v_TPmq[ 3] := [0,-sqrt(2)];
v_TPmq[ 6] := [0,infinity];
v_TPmq[ 8] := [0,infinity];
v_TPmq[10] := [infinity,infinity];
v_TPmq[11] := [infinity,infinity];
v_TPmq[12] := [infinity,infinity];
v_TPmq[13] := [infinity,infinity];
v_TPmq[14] := [0, sqrt(3)];
v_TPmq[19] := [0, sqrt(3)];
v_TPmq[16] := [0,-sqrt(3)];
v_TPmq[21] := [0,-sqrt(3)];
v_TPmq[15] := [infinity,0];
v_TPmq[17] := [infinity,0];
v_TPmq[18] := [infinity,0];
v_TPmq[20] := [infinity,0];
#@ c_TPmq
c_TPmq[ 0] := (t) -> [0,-cos(t-Pi/4)/sin(t-Pi/4)^2];
c_TPmq[ 1] := (t) -> [ 0,2*sin(t)/cos(t)^2];
c_TPmq[ 2] := (t) -> [ sqrt(8)*sin(2*t)/(1 - 3*cos(2*t)),0];
c_TPmq[ 3] := (t) -> [sqrt(2/3)/tan(t),-sqrt(2)/sin(t)];
c_TPmq[ 4] := (t) -> [sqrt(2/3)/tan(t), sqrt(2)/sin(t)];
c_TPmq[ 5] := (t) -> [ sqrt(2)*tan(t/2), sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2)];
c_TPmq[ 6] := (t) -> [-sqrt(2)*tan(t/2), sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2)];
c_TPmq[ 7] := (t) -> [-sqrt(2)*tan(t/2), sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2)];
c_TPmq[ 8] := (t) -> [ sqrt(2)*tan(t/2), sqrt(2)*tan(t/2)/sqrt(2+sin(t/2)^2)];
c_TPmq[ 9] := (t) -> [1/tan(t),sqrt(3)/sin(t)];
c_TPmq[10] := (t) -> [infinity,sqrt(3)/2/tan(t)];
c_TPmq[11] := (t) -> [infinity,sqrt(3)/2/tan(t)];
c_TPmq[12] := (t) -> [1/tan(t),sqrt(3)/sin(t)];
c_TPmq[13] := (t) -> [ 2/sqrt(3)*sin(t)^2/cos(t)/sqrt(3+sin(t)^2),infinity];
c_TPmq[14] := (t) -> [ 2/sqrt(3)*tan(t),tan(t)*sqrt(3+sin(t)^2)/3];
c_TPmq[15] := (t) -> [-2/sqrt(3)*tan(t),tan(t)*sqrt(3+sin(t)^2)/3];
c_TPmq[16] := (t) -> [-2/sqrt(3)*sin(t)^2/cos(t)/sqrt(3+sin(t)^2),infinity];
#@ c_TCmq
c_TCmq[ 0] := (t) -> [1, -((4*I)*sqrt(2)*cos(t)^2*sin(t)-(4*I)*sqrt(2)*cos(t)^3-4*cos(t)^4-(2*I)*sqrt(2)*sin(t)+(2*I)*sqrt(2)*cos(t)-8*cos(t)*sin(t)+4*cos(t)^2-1)/(4*cos(t)^4-4*cos(t)^2-3)];
c_TCmq[ 1] := (t) -> [1, -((2*I)*sin(t)+cos(t)^2)/((2*I)*sin(t)-cos(t)^2)];
c_TCmq[ 2] := (t) -> [-((2*I)*sqrt(2)*cos(t)*sin(t)-3*cos(t)^2+2)/((2*I)*sqrt(2)*cos(t)*sin(t)+3*cos(t)^2-2), 1];
c_TCmq[ 3] := (t) -> [-((2*I)*sin(t)*cos(t)*sqrt(6)-5*cos(t)^2+3)/(cos(t)^2-3), ((2*I)*sqrt(2)*sin(t)+cos(t)^2+1)/(cos(t)^2-3)];
c_TCmq[ 4] := (t) -> [-((2*I)*sin(t)*cos(t)*sqrt(6)-5*cos(t)^2+3)/(cos(t)^2-3), ((2*I)*sqrt(2)*sin(t)+sin(t)^2-2)/(sin(t)^2+2)];
c_TCmq[ 5] := (t) -> [-((2*I)*sqrt(2)*sin(t)+3*cos(t)-1)/(-3+cos(t)),
-I*(I*cos(t)^2+4*sqrt(5-cos(t))*sin(t)-(8*I)*cos(t)-I)/((-3+cos(t))*(cos(t)+3))];
c_TCmq[ 6] := (t) -> [((2*I)*sqrt(2)*sin(t)-3*cos(t)+1)/(-3+cos(t)),
-I*(I*cos(t)^2+4*sqrt(5-cos(t))*sin(t)-(8*I)*cos(t)-I)/((-3+cos(t))*(cos(t)+3))];
c_TCmq[ 7] := (t) -> [((2*I)*sqrt(2)*sin(t)-3*cos(t)+1)/(-3+cos(t)),
-I*(I*cos(t)^2+4*sqrt(5-cos(t))*sin(t)-(8*I)*cos(t)-I)/((-3+cos(t))*(cos(t)+3))];
c_TCmq[ 8] := (t) -> [-((2*I)*sqrt(2)*sin(t)+3*cos(t)-1)/(-3+cos(t)),
-I*(I*cos(t)^2+4*sqrt(5-cos(t))*sin(t)-(8*I)*cos(t)-I)/((-3+cos(t))*(cos(t)+3))];
c_TCmq[ 9] := (t) -> [-cos(2*t)+I*sin(2*t), -((2*I)*sin(t)*sqrt(3)-cos(t)^2-2)/(-4+cos(t)^2)];
c_TCmq[10] := (t) -> [-1, -((4*I)*cos(t)*sqrt(3)*sin(t)-7*cos(t)^2+4)/(-4+cos(t)^2)];
c_TCmq[11] := (t) -> [-1, -((4*I)*cos(t)*sqrt(3)*sin(t)-7*cos(t)^2+4)/(-4+cos(t)^2)];
c_TCmq[12] := (t) -> [-cos(2*t)+I*sin(2*t), -((2*I)*sin(t)*sqrt(3)-cos(t)^2-2)/(-4+cos(t)^2)];
c_TCmq[13] := (t) -> [(I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2)/(I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)-2*cos(t)^2+2), -1];
c_TCmq[14] := (t) -> [-((4*I)*cos(t)*sqrt(3)*sin(t)+7*cos(t)^2-4)/(-4+cos(t)^2),
((6*I)*sin(t)*sqrt(4-cos(t)^2)*cos(t)-cos(t)^4+14*cos(t)^2-4)/(4*cos(t)^2+cos(t)^4+4)];
c_TCmq[15] := (t) -> [ ((4*I)*cos(t)*sqrt(3)*sin(t)-7*cos(t)^2+4)/(-4+cos(t)^2),
((6*I)*sin(t)*sqrt(4-cos(t)^2)*cos(t)-cos(t)^4+14*cos(t)^2-4)/(4*cos(t)^2+cos(t)^4+4)];
c_TCmq[16] := (t) -> [(I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)-2*cos(t)^2+2)/(I*sqrt(4-cos(t)^2)*sqrt(3)*cos(t)+2*cos(t)^2-2), -1];
# TODO: add checks for c_TCmq[i](t) = c_TCmq_mob[i](cos(t)+I*sin(t))
#@ c_TCmq_mob[ 0]
c_TCmq_mob[ 0] := (z) -> [1,-mob(z,(1-sqrt(3))/sqrt(2))*mob(z,(1+sqrt(3))/sqrt(2))*
mob(z,-I*(1-sqrt(3))/sqrt(2))*mob(z,-I*(1+sqrt(3))/sqrt(2))];
c_TCmq_mob[ 1] := (z) -> [1,mob(z,-1+sqrt(2))^2*mob(z,-1-sqrt(2))^2];
c_TCmq_mob[ 2] := (z) -> [mob(z, 1+sqrt(2))^2*mob(z,-1-sqrt(2))^2,1];
c_TCmq_mob[ 3] := (z) -> [-mob(z, sqrt(3)+sqrt(2))*mob(z,-sqrt(3)-sqrt(2)),
-mob(z, sqrt(3)-sqrt(2))*mob(z,-sqrt(3)-sqrt(2))];
c_TCmq_mob[ 4] := (z) -> [-mob(z, sqrt(3)+sqrt(2))*mob(z,-sqrt(3)-sqrt(2)),
-mob(z, sqrt(3)+sqrt(2))*mob(z,-sqrt(3)+sqrt(2))];
c_TCmq_mob[ 9] := (z) -> [-1/z^2,-mob(z,2+sqrt(3))*mob(z,-2+sqrt(3))];
c_TCmq_mob[10] := (z) -> [-1 ,-mob(z,2+sqrt(3))*mob(z,-2-sqrt(3))];
c_TCmq_mob[11] := (z) -> [-1 ,-mob(z,2+sqrt(3))*mob(z,-2-sqrt(3))];
c_TCmq_mob[12] := (z) -> [-1/z^2,-mob(z,2+sqrt(3))*mob(z,-2+sqrt(3))];