mftrace.c (pari-2.13.0) | : | mftrace.c (pari-2.13.1) | ||
---|---|---|---|---|
skipping to change at line 1249 | skipping to change at line 1249 | |||
f = Rg_embed1(f, vT); | f = Rg_embed1(f, vT); | |||
else | else | |||
f = Rg_embed2(f, varn(gel(E,1)), vT, gel(E,3)); | f = Rg_embed2(f, varn(gel(E,1)), vT, gel(E,3)); | |||
return f; | return f; | |||
} | } | |||
/* vector of the sigma(f), sigma in vE */ | /* vector of the sigma(f), sigma in vE */ | |||
static GEN | static GEN | |||
RgX_embedall(GEN f, long vx, GEN vE) | RgX_embedall(GEN f, long vx, GEN vE) | |||
{ | { | |||
long i, l = lg(vE); | long i, l = lg(vE); | |||
GEN v = cgetg(l, t_VEC); | GEN v; | |||
if (l == 2) return RgX_embed(f, vx, gel(vE,1)); | ||||
v = cgetg(l, t_VEC); | ||||
for (i = 1; i < l; i++) gel(v,i) = RgX_embed(f, vx, gel(vE,i)); | for (i = 1; i < l; i++) gel(v,i) = RgX_embed(f, vx, gel(vE,i)); | |||
return l == 2? gel(v,1): v; | return v; | |||
} | } | |||
/* matrix whose colums are the sigma(v), sigma in vE */ | /* matrix whose colums are the sigma(v), sigma in vE */ | |||
static GEN | static GEN | |||
RgC_embedall(GEN v, GEN vE) | RgC_embedall(GEN v, GEN vE) | |||
{ | { | |||
long j, l = lg(vE); | long j, l = lg(vE); | |||
GEN M = cgetg(l, t_MAT); | GEN M = cgetg(l, t_MAT); | |||
for (j = 1; j < l; j++) gel(M,j) = mfvecembed(gel(vE,j), v); | for (j = 1; j < l; j++) gel(M,j) = mfvecembed(gel(vE,j), v); | |||
return M; | return M; | |||
} | } | |||
skipping to change at line 8947 | skipping to change at line 8949 | |||
static GEN | static GEN | |||
charLFwt1(long N, GEN CHI, long ord, long t) | charLFwt1(long N, GEN CHI, long ord, long t) | |||
{ | { | |||
GEN S; | GEN S; | |||
long r, vt; | long r, vt; | |||
if (N == 1 && t == 1) return mkfrac(gen_m1,stoi(4)); | if (N == 1 && t == 1) return mkfrac(gen_m1,stoi(4)); | |||
S = gen_0; vt = varn(mfcharpol(CHI)); | S = gen_0; vt = varn(mfcharpol(CHI)); | |||
for (r = 1; r < N; r++) | for (r = 1; r < N; r++) | |||
{ /* S += r*chi(r) */ | { /* S += r*chi(r) */ | |||
long a; | long a, c; | |||
if (ugcd(N,r) != 1) continue; | if (ugcd(N,r) != 1) continue; | |||
a = mfcharevalord(CHI,r,ord); | a = mfcharevalord(CHI,r,ord); | |||
if (t != 1 && kross(t, r) < 0) r = -r; | c = (t != 1 && kross(t, r) < 0)? -r: r; | |||
S = gadd(S, Qab_Czeta(a, ord, stoi(r), vt)); | S = gadd(S, Qab_Czeta(a, ord, stoi(c), vt)); | |||
} | } | |||
return gdivgs(S, -2*N); | return gdivgs(S, -2*N); | |||
} | } | |||
/* L(CHI,0) / 2, mod p */ | /* L(CHI,0) / 2, mod p */ | |||
static ulong | static ulong | |||
charLFwt1_Fl(GEN CHIvec, GEN vz, ulong p) | charLFwt1_Fl(GEN CHIvec, GEN vz, ulong p) | |||
{ | { | |||
long r, m = CHIvec_N(CHIvec); | long r, m = CHIvec_N(CHIvec); | |||
ulong S; | ulong S; | |||
if (m == 1) return Rg_to_Fl(mkfrac(gen_m1,stoi(4)), p); | if (m == 1) return Rg_to_Fl(mkfrac(gen_m1,stoi(4)), p); | |||
skipping to change at line 9020 | skipping to change at line 9022 | |||
long a = mycharexpo(CHIvec,r); | long a = mycharexpo(CHIvec,r); | |||
if (a < 0) continue; | if (a < 0) continue; | |||
S = Fl_add(S, Qab_Czeta_Fl(a, vz, Flx_eval(P,r,p), p), p); | S = Fl_add(S, Qab_Czeta_Fl(a, vz, Flx_eval(P,r,p), p), p); | |||
} | } | |||
return Fl_div(Fl_neg(S,p), 2*k*m, p); | return Fl_div(Fl_neg(S,p), 2*k*m, p); | |||
} | } | |||
static GEN | static GEN | |||
mfeisenstein2_0(long k, GEN CHI1, GEN CHI2, long ord) | mfeisenstein2_0(long k, GEN CHI1, GEN CHI2, long ord) | |||
{ | { | |||
if (k == 1 && mfcharistrivial(CHI1)) | long N1 = mfcharmodulus(CHI1), N2 = mfcharmodulus(CHI2); | |||
return charLFwtk(mfcharmodulus(CHI2), 1, CHI2, ord, 1); | if (k == 1 && N1 == 1) return charLFwtk(N2, 1, CHI2, ord, 1); | |||
else if (mfcharistrivial(CHI2)) | if (N2 == 1) return charLFwtk(N1, k, CHI1, ord, 1); | |||
return charLFwtk(mfcharmodulus(CHI1), k, CHI1, ord, 1); | return gen_0; | |||
else return gen_0; | ||||
} | } | |||
static ulong | static ulong | |||
mfeisenstein2_0_Fl(long k, GEN CHI1vec, GEN CHI2vec, GEN vz, ulong p) | mfeisenstein2_0_Fl(long k, GEN CHI1vec, GEN CHI2vec, GEN vz, ulong p) | |||
{ | { | |||
if (k == 1 && CHIvec_ord(CHI1vec) == 1) | if (k == 1 && CHIvec_N(CHI1vec) == 1) | |||
return charLFwtk_Fl(k, CHI2vec, vz, p); | return charLFwtk_Fl(k, CHI2vec, vz, p); | |||
else if (CHIvec_ord(CHI2vec) == 1) | else if (CHIvec_N(CHI2vec) == 1) | |||
return charLFwtk_Fl(k, CHI1vec, vz, p); | return charLFwtk_Fl(k, CHI1vec, vz, p); | |||
else return 0; | else return 0; | |||
} | } | |||
static GEN | static GEN | |||
NK_eisen2(long k, GEN CHI1, GEN CHI2, long ord) | NK_eisen2(long k, GEN CHI1, GEN CHI2, long ord) | |||
{ | { | |||
long o, N = mfcharmodulus(CHI1)*mfcharmodulus(CHI2); | long o, N = mfcharmodulus(CHI1)*mfcharmodulus(CHI2); | |||
GEN CHI = mfcharmul(CHI1, CHI2); | GEN CHI = mfcharmul(CHI1, CHI2); | |||
o = mfcharorder(CHI); | o = mfcharorder(CHI); | |||
if ((ord & 3) == 2) ord >>= 1; | if ((ord & 3) == 2) ord >>= 1; | |||
skipping to change at line 12205 | skipping to change at line 12206 | |||
return gerepileupto(av, normalizeapprox(z, bitprec-20)); | return gerepileupto(av, normalizeapprox(z, bitprec-20)); | |||
} | } | |||
else if (!tsc2) | else if (!tsc2) | |||
{ | { | |||
GEN z = mfsymbolevalpartial(fs, be, ga, bitprec); | GEN z = mfsymbolevalpartial(fs, be, ga, bitprec); | |||
if (c) z = gsub(mfsymboleval(fs, mkvec2(al, mkoo()), ga, bitprec), z); | if (c) z = gsub(mfsymboleval(fs, mkvec2(al, mkoo()), ga, bitprec), z); | |||
if (vabd) z = unact(z, vabd, k, prec); | if (vabd) z = unact(z, vabd, k, prec); | |||
return gerepileupto(av, normalizeapprox(z, bitprec-20)); | return gerepileupto(av, normalizeapprox(z, bitprec-20)); | |||
} | } | |||
if (F) pari_err_TYPE("mfsymboleval", fs); | if (F) pari_err_TYPE("mfsymboleval", fs); | |||
D = a*d-b*c; if (!D) return gc_const(av, gen_0); | D = a*d-b*c; | |||
if (!D) { set_avma(av); return RgX_embedall(gen_0, 0, fs_get_vE(fs)); } | ||||
mfpols = fs_get_pols(fs); | mfpols = fs_get_pols(fs); | |||
cosets = fs_get_cosets(fs); | cosets = fs_get_cosets(fs); | |||
CHI = MF_get_CHI(mf); N = MF_get_N(mf); | CHI = MF_get_CHI(mf); N = MF_get_N(mf); | |||
cbezout(a, c, &u, &v); B = u*b + v*d; tau = mkmat22s(a, -v, c, u); | cbezout(a, c, &u, &v); B = u*b + v*d; tau = mkmat22s(a, -v, c, u); | |||
V = gcf(sstoQ(B, D)); | V = gcf(sstoQ(B, D)); | |||
LM = shallowconcat(mkcol2(gen_1, gen_0), contfracpnqn(V, lg(V))); | LM = shallowconcat(mkcol2(gen_1, gen_0), contfracpnqn(V, lg(V))); | |||
S = gen_0; m = lg(LM) - 2; | S = gen_0; m = lg(LM) - 2; | |||
for (j = 0; j < m; j++) | for (j = 0; j < m; j++) | |||
{ | { | |||
GEN M, P; | GEN M, P; | |||
skipping to change at line 12874 | skipping to change at line 12876 | |||
{ | { | |||
long f = pr_get_f(pr); | long f = pr_get_f(pr); | |||
if (Fl_powu(p % n, f, n) != 1) continue; | if (Fl_powu(p % n, f, n) != 1) continue; | |||
} | } | |||
gel(P,j) = pr; | gel(P,j) = pr; | |||
gel(E,j) = Ej; j++; | gel(E,j) = Ej; j++; | |||
} | } | |||
setlg(P,j); | setlg(P,j); | |||
setlg(E,j); | setlg(E,j); | |||
cond = mkvec2(cond, const_vec(r1, gen_1)); | cond = mkvec2(cond, const_vec(r1, gen_1)); | |||
bnr = Buchraymod(Buchall(nf, 0, prec), cond, nf_INIT, utoipos(n)); | bnr = Buchraymod(Buchall(nf, nf_FORCE, prec), cond, nf_INIT, utoipos(n)); | |||
cyc = bnr_get_cyc(bnr); | cyc = bnr_get_cyc(bnr); | |||
d = lg(cyc)-1; | d = lg(cyc)-1; | |||
H = zv_diagonal(ZV_to_Flv(cyc, n)); | H = zv_diagonal(ZV_to_Flv(cyc, n)); | |||
gn = utoi(n); | gn = utoi(n); | |||
for (i = 1;;) | for (i = 1;;) | |||
{ | { | |||
for(j = 2; i < lg(*pO); i++) | for(j = 2; i < lg(*pO); i++) | |||
{ | { | |||
long o, q = (*pP)[i]; | long o, q = (*pP)[i]; | |||
GEN pr = idealprimedec_galois(nf, stoi(q)); | GEN pr = idealprimedec_galois(nf, stoi(q)); | |||
End of changes. 9 change blocks. | ||||
14 lines changed or deleted | 16 lines changed or added |