Function: mfsymbol
Section: modular_forms
C-Name: mfsymbol
Prototype: GDGb
Help: mfsymbol(mf,f): Initialize data for working with all period
 polynomials of the modular form f: this is essential for efficiency
 for functions such as mfsymboleval, mfmanin, and mfpetersson. By abuse
 of language, initialize data for working with mfpetersson in weight 1
 or half-integral weight (where no symbol exist).
Doc: Initialize data for working with all period polynomials of the modular
 form $f$: this is essential for efficiency for functions such as
 \kbd{mfsymboleval}, \kbd{mfmanin}, and \kbd{mfpetersson}. An \kbd{mfsymbol}
 contains an \kbd{mf} structure and can always be used whenever an \kbd{mf}
 would be needed.
 \bprog
 ? mf=mfinit([23,2],0);F=mfeigenbasis(mf)[1];
 ? FS=mfsymbol(mf,F);
 ? mfsymboleval(FS,[0,oo])
 %3 = [8.762565143790690142 E-39 + 0.0877907874...*I,
      -5.617375463602574564 E-39 + 0.0716801031...*I]
 ? mfpetersson(FS)
 %4 =
 [0.0039488965740025031688548076498662860143 1.2789721111175127425 E-40]

 [1.2630501762985554269 E-40 0.0056442542987647835101583821368582485396]
 @eprog\noindent
 By abuse of language, initialize data for working with \kbd{mfpetersson} in
 weight $1$ and half-integral weight (where no symbol exist); the \kbd{mf}
 argument may be an \kbd{mfsymbol} attached to a form on the space,
 which avoids recomputing data independent of the form.
 \bprog
 ? mf=mfinit([12,9/2],1); F=mfbasis(mf);
 ? fs=mfsymbol(mf,F[1]);
 time = 476 ms
 ? mfpetersson(fs)
 %2 = 1.9722437519492014682047692073275406145 E-5
 ? f2s = mfsymbol(mf,F[2]);
 time = 484 ms.
 ? mfpetersson(f2s)
 %4 = 1.2142222531326333658647877864573002476 E-5
 ? gs = mfsymbol(fs,F[2]); \\ re-use existing symbol, a little faster
 time = 430 ms.
 ? mfpetersson(gs) == %4  \\ same value
 %6 = 1
 @eprog For simplicity, we also allow \kbd{mfsymbol(f)} instead of
 \kbd{mfsymbol(mfinit(f), f)}:
