Function: mspadicinit
Section: modular_symbols
C-Name: mspadicinit
Prototype: GLLD-1,L,
Help: mspadicinit(M, p, n, {flag}): M being a full modular symbol space,
 as given by msinit and a prime p, initialize
 technical data needed to compute with overconvergent modular symbols
 (modulo p^n). If flag is unset, allow all symbols; if flag = 0, restrict
 to ordinary symbols; else initialize for symbols phi such that
 Tp(phi) = a_p * phi, with v_p(a_p) >= flag.

Doc: $M$ being a full modular symbol space, as given by \kbd{msinit}, and $p$
 a prime, initialize technical data needed to compute with overconvergent
 modular symbols, modulo $p^n$. If $\fl$ is unset, allow
 all symbols; else initialize only for a restricted range of symbols
 depending on $\fl$: if $\fl = 0$ restrict to ordinary symbols, else
 restrict to symbols $\phi$ such that $T_p(\phi) = a_p \phi$,
 with $v_p(a_p) \geq \fl$, which is faster as $\fl$ increases.
 (The fastest initialization is obtained for $\fl = 0$ where we only allow
 ordinary symbols.) For supersingular eigensymbols, such that $p\mid a_p$, we
 must further assume that $p$ does not divide the level.
 \bprog
 ? E = ellinit("11a1");
 ? [M,phi] = msfromell(E,1);
 ? ellap(E,3)
 %3 = -1
 ? Mp = mspadicinit(M, 3, 10, 0); \\ commit to ordinary symbols
 ? PHI = mstooms(Mp,phi);
 @eprog

 If we restrict the range of allowed symbols with \fl (for faster
 initialization), exceptions will occur if $v_p(a_p)$ violates this bound:
 \bprog
 ? E = ellinit("15a1");
 ? [M,phi] = msfromell(E,1);
 ? ellap(E,7)
 %3 = 0
 ? Mp = mspadicinit(M,7,5,0); \\ restrict to ordinary symbols
 ? PHI = mstooms(Mp,phi)
 ***   at top-level: PHI=mstooms(Mp,phi)
 ***                     ^---------------
 *** mstooms: incorrect type in mstooms [v_p(ap) > mspadicinit flag] (t_VEC).
 ? Mp = mspadicinit(M,7,5); \\ no restriction
 ? PHI = mstooms(Mp,phi);
 @eprog\noindent This function uses $O(N^2(n+k)^2p)$ memory, where $N$ is the
 level of $M$.
