"Source: Text/Geometry/ModFrmAlg.text";
"Line: 1438";
"Date: Thu Sep 25 14:47:45 2025";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Geometry/ModFrmAlg.text, line: 1438
// Example: H151E7 ()
print "Example: H151E7";
ei := GetEchoInput();
SetEchoInput(true);
K<sqrtm7> := QuadraticField(-7);
M0 := UnitaryModularForms(K,3);
Dimension(M0);
assert $1 eq 2;
time fs := HeckeEigenforms(M0);
fs;
time aPs, Ps := HeckeEigensystem(fs[1], 1 : Precision := 30);
aPs;
aPs eq [IsSplit(P) select 1 + Norm(P) + Norm(P)^2 else IsInert(P) 
  select p + p^4 where _, p is IsPrincipal(P) else Norm(P) + Norm(P)^2 : P in Ps];
assert $1;
time bPs, Ps := HeckeEigensystem(fs[2], 1 : Precision := 30);
bPs;
bPs eq [(IsSplit(P) select Trace(p^2) + Norm(P) else IsInert(P) 
  select 2*p^2+p-1 else p^2-1) where _, p is IsPrincipal(P) : P in Ps];
assert $1;
M33 := UnitaryModularForms(K,3,[3,0,-3],0);
time Dimension(M33);                         
assert $1 eq 4;
time D := Decomposition(M33);
[Dimension(d) : d in D];
assert $1 eq [2,2];
fs := HeckeEigenforms(M33);
E1 := BaseField(fs[1]);
p_E<x> := DefiningPolynomial(E1);
E1;
IsIsomorphic(E1, ext<K | x^2 - 46>);
assert $1;
SetVerbose("AlgebraicModularForms", 1);
time aPs33, Ps33 := HeckeEigensystem(fs[1], 1 : Precision := 30);
mfs := Newforms(CuspForms(KroneckerCharacter(-7, CyclotomicField(7)), 9));
g := mfs[2][1];
evs := [Norm(P) + Norm(P)^(-3)*Coefficient(g, Norm(P)) +(IsSplit(P) 
       select 0 else p-1 where _,p is IsPrincipal(P meet Integers())) : 
       P in Ps33 | not IsRamified(P)];
E1 := AbsoluteField(Universe(aPs33));
Eg := Universe(evs);
L := CompositeFields(E1, Eg)[1];
aPs33_L := [L!aPs33[i] : i in [1..#aPs33] | not IsRamified(Ps33[i])];
zeta := PrimitiveElement(E1);
roots := [x[1] : x in Roots(MinimalPolynomial(zeta), L)];
embs := [hom<E1 -> L | r> : r in roots];
exists(emb){emb : emb in embs | [emb(y) : y in aPs33_L] eq evs};            
assert $1 eq true;
E2 := BaseRing(fs[2]);
L<sqrtm259> := ext<K | x^2 + 259>;
is_isom, isom := IsIsomorphic(E2, L);
is_isom;
assert is_isom;
isom(HeckeEigenvalue(fs[2], Ps[1]));
assert (Norm($1) eq 77/16) and (Trace($1) eq -7/4);
M33_7 := UnitaryModularForms(K,3,[3,0,-3],7);
time D_7 := Decomposition(M33_7);
[Dimension(d) : d in D_7];
assert $1 eq [1,3];
fs_7 := HeckeEigenforms(M33_7);
time bPs_7, Ps_7 := HeckeEigensystem(fs_7[1], 1 : Precision := 30);
bPs_7;
ZK := Integers(K);
 _, red := ResidueClassField(sqrtm7*ZK);
bPs_7 eq [red(bPs[i]) : i in [1..#bPs] | Ps[i] in Ps_7];
time aPs_7, Ps_7 := HeckeEigensystem(fs_7[2], 1 : Precision := 30);
aPs_7;
aPs_7 eq [red(aPs[i]) : i in [1..#aPs] | Ps[i] in Ps_7];                     
SetEchoInput(ei);
