"Source: Text/Geometry/ModSym.text";
"Line: 2919";
"Date: Thu Sep 25 14:47:45 2025";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Geometry/ModSym.text, line: 2919
// Example: H145E25 ()
print "Example: H145E25";
ei := GetEchoInput();
SetEchoInput(true);
E := ModularSymbols("54B");
ModularDegree(E);
assert $1 eq 2;
CongruenceModulus(E);
assert $1 eq 6;
A := ModularSymbols("27A"); A;   // 27=54/2.
A54 := ModularSymbols(A,54); A54;  // all images of A at level 54.
qE := qIntegralBasis(E,17);
qA54 := qIntegralBasis(A54,17);
&+qA54 - &+qE;
IntersectionGroup(E,A54);   // however, the intersection is trivial.
for N in [53..55] do 
   C := CuspidalSubspace(ModularSymbols(N,2));
   newforms := NewSubspace(C);
   D := EllipticFactors(newforms,19);
   for E in D do
      printf "%o:\t%o,\t%o\n", N, ModularDegree(E), CongruenceModulus(E);
   end for;
end for;
M := ModularSymbols(10,4);
S := CuspidalSubspace(M);
D := NewformDecomposition(S); D;
#ModularKernel(D[1]);
assert $1 eq 10;
f := qEigenform(D[1],8); 
g := qEigenform(D[2],8);
g2 := Evaluate(g,Parent(g).1^2);
f-(g+6*g2);   // a congruence modulo 10!
SetEchoInput(ei);
