Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: mfembed Section: modular_forms C-Name: mfembed0 Prototype: GDGp Help: mfembed(f,{v}): if v is omitted, f must be a modular form or a modular form space with parameters [N,k,chi] and we return a vector of complex embeddings of Q(f) or Q(chi), respectively. If v is given, it must be a scalar in Q(f), or a vector/matrix of such, we apply the embeddings coefficientwise and return a vector of results. Finally f can be replaced by a single embedding produced by mfembed(f) and we apply that particular embedding to v. Note that, in our context, Q(chi) has a single canonical embeding given by s: Mod(t, polcyclo(n,t)) -> exp(2*I*Pi/n) and Q(f) has [Q(f):Q(chi)] induced embeddings attached to the complex roots of s(P) where P = mfparams(f)[4], as ordered by polroots. In the latter case, we only support an f with Q(f) = Q(chi) or an eigenform produced by mfeigenbasis. Doc: let $f$ be a generalized modular form with parameters $[N,k,\chi,P]$ (see \kbd{mfparams}, we denote $\Q(\chi)$ the subfield of $\C$ generated by the values of $\chi$ and $\Q(f)$ the field of definition of $f$. In this context $\Q(\chi)$ has a single canonical complex embeding given by $s: \kbd{Mod(t, polcyclo(n,t))} \mapsto \exp(2i\pi/n)$ and the number field $\Q(f)$ has $[\Q(f):\Q(\chi)]$ induced embeddings attached to the complex roots of the polynomial $s(P)$. If $\Q(f)$ is stricly larger than $\Q(\chi)$ we only allow an $f$ which is an eigenform, produced by \kbd{mfeigenbasis}. This function is meant to create embeddings of $\Q(f)$ and/or apply them to the object $v$, typically a vector of Fourier coefficients of $f$ from \kbd{mfcoefs}. \item If $v$ is omitted and $f$ is a modular form as above, we return the embedding of $\Q(\chi)$ if $\Q(\chi) = \Q(f)$ and a vector containing $[\Q(f):\Q(\chi)]$ embeddings of $\Q(f)$ otherwise. \item If $v$ is given, it must be a scalar in $\Q(f)$, or a vector/matrix of such, we apply the embeddings coefficientwise and return either a single result if $\Q(f) = \Q(\chi)$ and a vector of $[\Q(f):\Q(\chi)]$ results otherwise. \item Finally $f$ can be replaced by a single embedding produced by \kbd{mfembed}$(f)$ ($v$ was omitted) and we apply that particular embedding to $v$. \bprog ? mf = mfinit([35,2,Mod(11,35)], 0); ? [f] = mfbasis(mf); ? f.mod \\@com $\Q(\chi) = \Q(\zeta_3)$ %3 = t^2 + t + 1 ? v = mfcoefs(f,5); lift(v) \\@com coefficients in $\Q(\chi)$ %4 = [0, 2, -2*t - 2, 2*t, 2*t, -2*t - 2] ? mfembed(f, v) \\ single embedding %5 = [0, 2, -1 - 1.7320...*I, -1 + 1.73205...*I, -1 + 1.7320...*I, ...] ? [F] = mfeigenbasis(mf); ? mffields(mf) %7 = [y^2 + Mod(-2*t, t^2 + t + 1)] \\@com $[\Q(f):\Q(\chi)] = 2$ ? V = liftpol( mfcoefs(F,5) ); %8 = [0, 1, y + (-t - 1), (t + 1)*y + t, (-2*t - 2)*y + t, -t - 1] ? vall = mfembed(F, V); #vall %9 = 2 \\ 2 embeddings, both applied to V ? vall[1] \\ the first %10 = [0, 1, -1.2071... - 2.0907...*I, 0.2071... - 0.3587...*I, ...] ? vall[2] \\ and the second one %11 = [0, 1, 0.2071... + 0.3587...*I, -1.2071... + 2.0907...*I, ...] ? vE = mfembed(F); #vE \\ same 2 embeddings %12 = 2 ? mfembed(vE[1], V) \\ apply first embedding to V %13 = [0, 1, -1.2071... - 2.0907...*I, 0.2071... - 0.3587...*I, ...] @eprog For convenience, we also allow a modular form space from \kbd{mfinit} instead of $f$, corresponding to the single embedding of $\Q(\chi)$. \bprog ? [mfB,MC,C] = mfatkininit(mf,7); MC \\@com coefs in $\Q(\chi)$ %13 = [ Mod(2/7*t, t^2 + t + 1) Mod(-1/7*t - 2/7, t^2 + t + 1)] [Mod(-1/7*t - 2/7, t^2 + t + 1) Mod(2/7*t, t^2 + t + 1)] ? C \\ normalizing constant %14 = 0.33863... - 0.16787*I ? M = mfembed(mf, MC) / C \\ the true matrix for the action of w_7 [-0.6294... + 0.4186...*I -0.3625... - 0.5450...*I] [-0.3625... - 0.5450...*I -0.6294... + 0.4186...*I] ? exponent(M*conj(M) - 1) \\ M * conj(M) is close to 1 %16 = -126 @eprog