static GEN nf_to_Zq(GEN x, GEN T, GEN pk, GEN pks2, GEN proj) { GEN y; if (typ(x) != t_COL) return centermodii(x, pk, pks2); y = gmul(proj, x); if (!T) return centermodii(y, pk, pks2); y = RgV_to_RgX(y, varn(T)); return centermod_i(FpX_rem(y, T, pk), pk, pks2); }
static GEN _powpolmodsimple(Cache *C, Red *R, GEN jac) { pari_sp av = avma; GEN w = mulmat_pol(C->matvite, jac); long j, ph = lg(w); R->red = &_redsimple; for (j=1; j<ph; j++) gel(w,j) = _powpolmod(C, centermodii(gel(w,j), R->N, R->N2), R, &sqrmod); w = centermod_i( gmul(C->matinvvite, w), R->N, R->N2 ); w = gerepileupto(av, w); return RgV_to_RgX(w, 0); }
/* reduce coeffs mod (T,pk), then center mod pk */ static GEN FqX_centermod(GEN z, GEN T, GEN pk, GEN pks2) { long i, l; GEN y; if (!T) return centermod_i(z, pk, pks2); y = FpXQX_red(z, T, pk); l = lg(y); for (i = 2; i < l; i++) { GEN c = gel(y,i); if (typ(c) == t_INT) c = centermodii(c, pk, pks2); else c = FpX_center(c, pk); gel(y,i) = c; } return y; }
static GEN _red(GEN x, Red *R) { return centermod_i(grem(x, R->C), R->N, R->N2); }
/* special case R->C = polcyclo(p) */ static GEN _red_cyclop(GEN x, Red *R) { return centermod_i(red_cyclop(x, R->n), R->N, R->N2); }