GEN vars_to_RgXV(GEN h) { long i, l = lg(h); GEN z = cgetg(l, t_VEC); for (i = 1; i < l; i++) gel(z,i) = pol_x(h[i]); return z; }
GEN gpolvar(GEN x) { long v; if (!x) { GEN h = hash_values(h_polvar); return vars_to_RgXV(vars_sort_inplace(h)); } if (typ(x)==t_PADIC) return gcopy( gel(x,2) ); v = gvar(x); if (v==NO_VARIABLE) return gen_0; return pol_x(v); }
GEN varlower(const char *s, long w) { long v; if (w >= 0) { hashentry *e = hash_select(h_polvar, (void*)s, (void*)w, _lower); if (e) return pol_x((long)e->val); } /* no luck: need to create */ v = fetch_var(); return var_register(v, s); }
void init_test(void) /* void */ { GEN p1; GEN p2; /* vec */ p = pol_x(fetch_user_var("p")); d = pol_x(fetch_user_var("d")); f = pol_x(fetch_user_var("f")); /*allocatemem(800000000); */ p = stoi(65537); d = gadd(genrand(powis(gen_2, 7)), powis(gen_2, 7)); p1 = gaddgs(d, 1); { long x; p2 = cgetg(gtos(p1)+1, t_VEC); for (x = 1; gcmpsg(x, p1) <= 0; ++x) gel(p2, x) = genrand(p); } f = p2; gel(f, 1) = gen_1; f = gtopoly(f, -1); return; }
GEN varhigher(const char *s, long w) { long v; if (w >= 0) { hashentry *e = hash_select(h_polvar, (void*)s, (void*)w, _higher); if (e) return pol_x((long)e->val); } /* no luck: need to create */ if (nvar == max_avail) pari_err(e_MISC,"no more variables available"); v = nvar++; varpriority[v]= ++max_priority; return var_register(v, s); }
static GEN var_register(long v, const char *s) { varentries_reset(v, initep(s, strlen(s))); return pol_x(v); }