Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Testing latest pari + WASM + node.js... and it works?! Wow.

28495 views
License: GPL3
ubuntu2004
1
/* Copyright (C) 2004 The PARI group.
2
3
This file is part of the PARI/GP package.
4
5
PARI/GP is free software; you can redistribute it and/or modify it under the
6
terms of the GNU General Public License as published by the Free Software
7
Foundation; either version 2 of the License, or (at your option) any later
8
version. It is distributed in the hope that it will be useful, but WITHOUT
9
ANY WARRANTY WHATSOEVER.
10
11
Check the License for details. You should have received a copy of it, along
12
with the package; see the file 'COPYING'. If not, write to the Free Software
13
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
14
15
BEGINEXTERN
16
17
/* for qsort */
18
typedef int (*QSCOMP)(const void *, const void *);
19
20
#define uel(a,i) (((ulong*)(a))[i])
21
#define ucoeff(a,i,j) (((ulong**)(a))[j][i])
22
#define umael(a,i,j) (((ulong**)(a))[i][j])
23
#define umael2(a,i,j) (((ulong**)(a))[i][j])
24
#define umael3(a,i,j,k) (((ulong***)(a))[i][j][k])
25
#define umael4(a,i,j,k,l) (((ulong****)(a))[i][j][k][l])
26
#define umael5(a,i,j,k,l,m) (((ulong*****)(a))[i][j][k][l][m])
27
28
#define numberof(x) (sizeof(x) / sizeof((x)[0]))
29
30
/* to manipulate 'blocs' */
31
#define BL_HEAD 8
32
#define bl_base(x) (void*)((x) - BL_HEAD)
33
#define bl_height(x) (((GEN)x)[-8])
34
#define bl_left(x) (((GEN*)x)[-7])
35
#define bl_right(x) (((GEN*)x)[-6])
36
#define bl_size(x) (((GEN)x)[-5])
37
#define bl_refc(x) (((GEN)x)[-4])
38
#define bl_next(x) (((GEN*)x)[-3])
39
#define bl_prev(x) (((GEN*)x)[-2])
40
#define bl_num(x) (((GEN)x)[-1])
41
42
void clone_lock(GEN C);
43
void clone_unlock(GEN C);
44
void clone_unlock_deep(GEN C);
45
46
/* swap */
47
#define lswap(x,y) {long _z=x; x=y; y=_z;}
48
#define pswap(x,y) {GEN *_z=x; x=y; y=_z;}
49
#define swap(x,y) {GEN _z=x; x=y; y=_z;}
50
#define dswap(x,y) { double _t=x; x=y; y=_t; }
51
#define pdswap(x,y) { double* _t=x; x=y; y=_t; }
52
#define swapspec(x,y, nx,ny) {swap(x,y); lswap(nx,ny);}
53
54
/* loops */
55
GEN incloop(GEN a);
56
GEN resetloop(GEN a, GEN b);
57
GEN setloop(GEN a);
58
59
/* parser */
60
61
/* GP control structures */
62
#define EXPR_WRAP(code, call) \
63
{ GEN z; GEN __E = code; \
64
push_lex(gen_0, __E); z = call; pop_lex(1); return z; }
65
#define EXPRVOID_WRAP(code, call) \
66
{ GEN __E = code; \
67
push_lex(gen_0, __E); call; pop_lex(1); }
68
#define EXPR_ARG __E, &gp_eval
69
#define EXPR_ARGPREC __E, &gp_evalprec
70
#define EXPR_ARGUPTO __E, &gp_evalupto
71
#define EXPR_ARGBOOL __E, &gp_evalbool
72
#define EXPR_ARGVOID __E, &gp_evalvoid
73
74
GEN iferrpari(GEN a, GEN b, GEN c);
75
void forfactored(GEN a, GEN b, GEN code);
76
void forpari(GEN a, GEN b, GEN node);
77
void foreachpari(GEN a, GEN node);
78
void forsquarefree(GEN a, GEN b, GEN code);
79
void untilpari(GEN a, GEN b);
80
void whilepari(GEN a, GEN b);
81
GEN ifpari(GEN g, GEN a, GEN b);
82
GEN andpari(GEN a, GEN b);
83
GEN orpari(GEN a, GEN b);
84
void ifpari_void(GEN g, GEN a, GEN b);
85
GEN ifpari_multi(GEN g, GEN a);
86
GEN geval_gp(GEN x, GEN t);
87
88
GEN gadde(GEN *x, GEN y);
89
GEN gadd1e(GEN *x);
90
GEN gdive(GEN *x, GEN y);
91
GEN gdivente(GEN *x, GEN y);
92
GEN gdivrounde(GEN *x, GEN y);
93
GEN gmode(GEN *x, GEN y);
94
GEN gmule(GEN *x, GEN y);
95
GEN gshiftle(GEN *x, long n);
96
GEN gshiftre(GEN *x, long n);
97
GEN gsube(GEN *x, GEN y);
98
GEN gsub1e(GEN *x);
99
GEN gshift_right(GEN x, long n);
100
101
GEN asympnum0(GEN u, GEN alpha, long prec);
102
GEN asympnumraw0(GEN u, long LIM, GEN alpha, long prec);
103
GEN derivnum0(GEN a, GEN code, GEN ind, long prec);
104
GEN derivfun0(GEN args, GEN def, GEN code, long k, long prec);
105
GEN direuler0(GEN a, GEN b, GEN code, GEN c);
106
GEN direuler_bad(void *E, GEN (*eval)(void *, GEN, long), GEN a, GEN b, GEN c, GEN Sbad);
107
void forcomposite(GEN a, GEN b, GEN code);
108
void fordiv(GEN a, GEN code);
109
void fordivfactored(GEN a, GEN code);
110
void forell0(long a, long b, GEN code, long flag);
111
void forperm0(GEN k, GEN code);
112
void forprime(GEN a, GEN b, GEN code);
113
void forprimestep(GEN a, GEN b, GEN q, GEN code);
114
void forstep(GEN a, GEN b, GEN s, GEN code);
115
void forsubgroup0(GEN cyc, GEN bound, GEN code);
116
void forsubset0(GEN nk, GEN code);
117
void forvec(GEN x, GEN code, long flag);
118
void forpart0(GEN k, GEN code , GEN nbound, GEN abound);
119
GEN intcirc0(GEN a, GEN R, GEN code, GEN tab, long prec);
120
GEN intfuncinit0(GEN a, GEN b, GEN code, long m, long prec);
121
GEN intnum0(GEN a, GEN b, GEN code, GEN tab, long prec);
122
GEN intnumgauss0(GEN a, GEN b, GEN code, GEN tab, long prec);
123
GEN intnumromb0_bitprec(GEN a, GEN b, GEN code, long flag, long bit);
124
GEN laurentseries0(GEN f, long M, long v, long prec);
125
GEN limitnum0(GEN u, GEN alpha, long prec);
126
GEN matrice(GEN nlig, GEN ncol, GEN code);
127
void pariplot0(GEN a, GEN b, GEN code, GEN ysmlu, GEN ybigu, long prec);
128
GEN prodeuler0(GEN a, GEN b, GEN code, long prec);
129
GEN prodinf0(GEN a, GEN code, long flag, long prec);
130
GEN produit(GEN a, GEN b, GEN code, GEN x);
131
GEN somme(GEN a, GEN b, GEN code, GEN x);
132
GEN sumalt0(GEN a, GEN code,long flag, long prec);
133
GEN sumdivexpr(GEN num, GEN code);
134
GEN sumdivmultexpr0(GEN num, GEN code);
135
GEN suminf0_bitprec(GEN a, GEN code, long bit);
136
GEN sumnum0(GEN a, GEN code, GEN tab, long prec);
137
GEN sumnumap0(GEN a, GEN code, GEN tab, long prec);
138
GEN sumnumlagrange0(GEN a, GEN code, GEN tab, long prec);
139
GEN sumnummonien0(GEN a, GEN code, GEN tab, long prec);
140
GEN sumpos0(GEN a, GEN code, long flag,long prec);
141
GEN vecexpr0(GEN nmax, GEN code, GEN pred);
142
GEN vecexpr1(GEN nmax, GEN code, GEN pred);
143
GEN vecteursmall(GEN nmax, GEN code);
144
GEN vecteur(GEN nmax, GEN n);
145
GEN vvecteur(GEN nmax, GEN n);
146
GEN zbrent0(GEN a, GEN b, GEN code, long prec);
147
GEN solvestep0(GEN a, GEN b, GEN step, GEN code, long flag, long prec);
148
149
GEN ploth0(GEN a, GEN b, GEN code, long flag, long n, long prec);
150
GEN plothexport0(GEN fmt, GEN a, GEN b, GEN code, long flags, long n, long prec);
151
GEN psploth0(GEN a,GEN b,GEN code,long flag,long n,long prec);
152
GEN plotrecth0(long ne,GEN a,GEN b,GEN code,ulong flags,long n,long prec);
153
154
GEN listcreate_gp(long n);
155
156
/* mt */
157
void mt_sigint(void);
158
void mt_err_recover(long er);
159
void mt_export_add(const char *str, GEN val);
160
void mt_export_del(const char *str);
161
void mt_init_stack(size_t s);
162
int mt_is_thread(void);
163
164
GEN eisker_worker(GEN Ei, GEN M, GEN D, GEN co, GEN CD);
165
GEN pareval_worker(GEN code);
166
GEN parselect_worker(GEN d, GEN code);
167
void parfor0(GEN a, GEN b, GEN code, GEN code2);
168
GEN parfor_worker(GEN i, GEN C);
169
void parforeach0(GEN x, GEN code, GEN code2);
170
void parforprime0(GEN a, GEN b, GEN code, GEN code2);
171
void parforprimestep0(GEN a, GEN b, GEN q, GEN code, GEN code2);
172
void parforvec0(GEN a, GEN code, GEN code2, long flag);
173
GEN parvector_worker(GEN i, GEN C);
174
GEN polmodular_worker(GEN pt, ulong L, GEN hilb, GEN factu,
175
GEN vne, GEN vinfo, long compute_derivs, GEN j_powers, GEN fdb);
176
GEN nmV_polint_center_tree_worker(GEN Va, GEN T, GEN R, GEN xa, GEN m2);
177
GEN nmV_chinese_center_tree_seq(GEN A, GEN P, GEN T, GEN R);
178
GEN nxMV_polint_center_tree_worker(GEN Va, GEN T, GEN R, GEN xa, GEN m2);
179
GEN nxMV_chinese_center_tree_seq(GEN A, GEN P, GEN T, GEN R);
180
GEN F2xq_log_Coppersmith_worker(GEN u, long i, GEN V, GEN R);
181
GEN Flxq_log_Coppersmith_worker(GEN u, long i, GEN V, GEN R);
182
GEN Fp_log_sieve_worker(long a, long prmax, GEN C, GEN c, GEN Ci, GEN ci, GEN pr, GEN sz);
183
GEN QM_charpoly_ZX_worker(GEN P, GEN M, GEN dM);
184
GEN QXQ_div_worker(GEN P, GEN A, GEN B, GEN C);
185
GEN QXQ_inv_worker(GEN P, GEN A, GEN B);
186
GEN ZX_resultant_worker(GEN P, GEN A, GEN B, GEN dB);
187
GEN ZXQX_resultant_worker(GEN P, GEN A, GEN B, GEN T, GEN dB);
188
GEN ZX_ZXY_resultant_worker(GEN P, GEN A, GEN B, GEN dB, GEN v);
189
GEN ZX_direct_compositum_worker(GEN P, GEN A, GEN B);
190
GEN ZXQX_direct_compositum_worker(GEN P, GEN A, GEN B, GEN C);
191
GEN ZX_gcd_worker(GEN P, GEN A, GEN B, GEN g);
192
GEN ZXQ_minpoly_worker(GEN P, GEN A, GEN B, long d);
193
GEN ZM_det_worker(GEN P, GEN A);
194
GEN ZM_inv_worker(GEN P, GEN A);
195
GEN ZM_ker_worker(GEN P, GEN A);
196
GEN ZM_mul_worker(GEN P, GEN A, GEN B);
197
GEN ZabM_inv_worker(GEN P, GEN A, GEN Q);
198
GEN aprcl_step4_worker(ulong q, GEN pC, GEN N, GEN v);
199
GEN aprcl_step6_worker(GEN r, long t, GEN N, GEN N1, GEN et);
200
GEN ecpp_sqrt_worker(GEN g, GEN N, GEN p);
201
GEN ecpp_ispsp_worker(GEN N);
202
GEN ecpp_step2_worker(GEN S, GEN HD, GEN primelist, long dbg);
203
GEN primecertisvalid_ecpp_worker(GEN certi);
204
GEN lfuninit_worker(long r, GEN K, GEN L, GEN peh2d, GEN vroots, GEN dr, GEN di, GEN an, GEN bn);
205
GEN lfuninit_theta2_worker(long r, GEN L, GEN qk, GEN a, GEN di, GEN an, GEN bn);
206
GEN gen_parapply(GEN worker, GEN D);
207
GEN parapply_slice_worker(GEN worker, GEN D);
208
GEN gen_parapply_slice(GEN worker, GEN D, long mmin);
209
GEN gen_crt(const char *str, GEN worker, forprime_t *S, GEN dB, ulong bound, long mmin, GEN *pt_mod,
210
GEN crt(GEN, GEN, GEN*), GEN center(GEN, GEN, GEN));
211
void gen_inccrt(const char *str, GEN worker, GEN dB, long n, long mmin,
212
forprime_t *S, GEN *pt_H, GEN *pt_mod, GEN crt(GEN, GEN, GEN*),
213
GEN center(GEN, GEN, GEN));
214
void gen_inccrt_i(const char *str, GEN worker, GEN dB, long n, long mmin,
215
forprime_t *S, GEN *pH, GEN *pmod, GEN crt(GEN, GEN, GEN*),
216
GEN center(GEN, GEN, GEN));
217
GEN direllnf_worker(GEN P, ulong X, GEN E);
218
GEN dirartin_worker(GEN P, ulong X, GEN nf, GEN G, GEN V, GEN aut);
219
GEN direllsympow_worker(GEN P, ulong X, GEN E, ulong m);
220
GEN dirgenus2_worker(GEN P, ulong X, GEN Q);
221
GEN pardireuler(GEN worker, GEN a, GEN b, GEN c, GEN Sbad);
222
GEN FpM_ratlift_worker(GEN A, GEN mod, GEN B);
223
GEN ellQ_factorback_worker(GEN P, GEN E, GEN A, GEN L, ulong l);
224
GEN chinese_unit_worker(GEN P, GEN A, GEN U, GEN B, GEN D, GEN C);
225
226
/* Relative number fields */
227
enum { rnf_NFABS = 1, rnf_MAPS };
228
229
/* Finite fields */
230
enum { t_FF_FpXQ = 0, t_FF_Flxq = 1, t_FF_F2xq = 2 };
231
GEN FF_ellinit(GEN E, GEN fg);
232
GEN FF_elldata(GEN E, GEN fg);
233
234
/* L functions */
235
enum { t_LFUN_GENERIC, t_LFUN_ZETA, t_LFUN_NF, t_LFUN_ELL, t_LFUN_KRONECKER,
236
t_LFUN_CHIZ, t_LFUN_CHIGEN, t_LFUN_ETA,
237
t_LFUN_DIV, t_LFUN_MUL, t_LFUN_CONJ,
238
t_LFUN_SYMPOW_ELL, t_LFUN_QF, t_LFUN_ARTIN, t_LFUN_MFCLOS,
239
t_LFUN_GENUS2, t_LFUN_TWIST, t_LFUN_CLOSURE0, t_LFUN_SHIFT};
240
enum { t_LDESC_INIT, t_LDESC_THETA, t_LDESC_PRODUCT };
241
242
/* Elliptic curves */
243
/* common to Q and Rg */
244
enum { R_PERIODS = 1, R_ETA, R_ROOTS, R_AB };
245
246
enum { Qp_ROOT = 1, Qp_TATE };
247
enum { Q_GROUPGEN = 5, Q_GLOBALRED, Q_ROOTNO, Q_MINIMALMODEL };
248
enum { NF_MINIMALMODEL = 1, NF_GLOBALRED, NF_MINIMALPRIMES, NF_ROOTNO, NF_NF };
249
250
/* common to Fp and Fq */
251
enum { FF_CARD = 1, FF_GROUP, FF_GROUPGEN, FF_O };
252
253
/* for Buchall_param */
254
enum { fupb_NONE = 0, fupb_RELAT, fupb_LARGE, fupb_PRECI };
255
256
/* Polycyclic presentation for the classgroup of discriminant D */
257
typedef struct {
258
long D; /* Negative discriminant */
259
long h; /* Size of classgroup */
260
long enum_cnt; /* Either h or h/2 (if L0 is set) */
261
/* If nonzero, L0=L[0] and n[0]=2 and classpoly is a perfect square
262
* (and we enumerate each double root just once), default is 0 */
263
long L0;
264
/* Product of primes L that are prohibited as norms of generators or
265
* auxilliary prime forms (by default, primes that make enumeration hard) */
266
long Lfilter;
267
/* Norms of implicit generators (primeforms a=(L*x^2+b*x*y+c*y^2)
268
* with norm L and b >=0) */
269
long *L;
270
long *m; /* products of relative orders: m[i] is the order of <g_1,...,g_i> */
271
long *n; /* Relative orders */
272
long *o; /* Absolute orders */
273
/* Power relations (a[i]^n[i] = a[0]^e[0]*...*a[i-1]^e[i-1], where e
274
* is an exponent vector of length i stored at offset binom(i,2) of r) */
275
long *r;
276
long *orient_p; /* Optional list of norms of orienting primes p ... */
277
long *orient_q; /* or product of primes p*q (q=1 when only p is needed) */
278
long *orient_reps; /* Representation of orienting norm p*q in terms of Ls */
279
long inv; /* Attached invariant */
280
long k; /* Number of generators */
281
GEN _data; /* Storage space for the above arrays */
282
} classgp_pcp_struct;
283
typedef classgp_pcp_struct classgp_pcp_t[1];
284
285
/* Represents the data in the equation(s)
286
* 4p = t^2 - v^2 D = t^2 - v^2 u^2 D_K = w^2 D_K.
287
* t is the absolute trace, so always > 0.
288
* T is a twisting parameter, which satisfies (T|p) == -1. */
289
typedef struct {
290
long D, t, u, v;
291
ulong p, pi, s2, T;
292
} norm_eqn_struct;
293
typedef norm_eqn_struct norm_eqn_t[1];
294
295
#define zv_to_longptr(v) (&((v)[1]))
296
#define zv_to_ulongptr(v) ((ulong *)&((v)[1]))
297
298
/* Modular invariants */
299
#define INV_J 0
300
#define INV_F 1
301
#define INV_F2 2
302
#define INV_F3 3
303
#define INV_F4 4
304
#define INV_G2 5
305
#define INV_W2W3 6
306
#define INV_F8 8
307
#define INV_W3W3 9
308
#define INV_W2W5 10
309
#define INV_W2W7 14
310
#define INV_W3W5 15
311
#define INV_W3W7 21
312
#define INV_W2W3E2 23
313
#define INV_W2W5E2 24
314
#define INV_W2W13 26
315
#define INV_W2W7E2 27
316
#define INV_W3W3E2 28
317
#define INV_W5W7 35
318
#define INV_W3W13 39
319
320
/* Get coefficient of x^d in f, assuming f is nonzero. */
321
INLINE ulong Flx_coeff(GEN f, long d) { return f[d + 2]; }
322
/* Return the root of f, assuming deg(f) = 1. */
323
INLINE ulong Flx_deg1_root(GEN f, ulong p) {
324
if (degpol(f) != 1) pari_err_BUG("Flx_deg1_root");
325
return Fl_div(Fl_neg(Flx_coeff(f, 0), p), Flx_coeff(f, 1), p);
326
}
327
328
/* Allocation / gerepile */
329
long getdebugvar(void);
330
void setdebugvar(long n);
331
void debug_stack(void);
332
void fill_stack(void);
333
void minim_alloc(long n, double ***q, GEN *x, double **y, double **z, double **v);
334
int pop_entree_block(entree *ep, long loc);
335
int pop_val_if_newer(entree *ep, long loc);
336
337
/* general printing */
338
void print_errcontext(PariOUT *out, const char *msg, const char *s, const char *entry);
339
void print_prefixed_text(PariOUT *out, const char *s, const char *prefix, const char *str);
340
INLINE void
341
print_text(const char *s) { print_prefixed_text(pariOut, s,NULL,NULL); }
342
INLINE void
343
out_print_text(PariOUT *out, const char *s) { print_prefixed_text(out, s,NULL,NULL); }
344
INLINE long
345
is_keyword_char(char c) { return (isalnum((int)c) || c=='_'); }
346
347
/* Interfaces (GP, etc.) */
348
hashtable *hash_from_link(GEN e, GEN names, int use_stack);
349
void gen_relink(GEN x, hashtable *table);
350
entree* do_alias(entree *ep);
351
char* get_sep(const char *t);
352
long get_int(const char *s, long dflt);
353
ulong get_uint(const char *s);
354
void gp_initrc(pari_stack *p_A);
355
356
void pari_sigint(const char *s);
357
void* get_stack(double fraction, long min);
358
void free_graph(void);
359
void initout(int initerr);
360
void resetout(int initerr);
361
void init_linewrap(long w);
362
void print_functions_hash(const char *s);
363
GEN readbin(const char *name, FILE *f, int *vector);
364
int term_height(void);
365
int term_width(void);
366
/* gp_colors */
367
void decode_color(long n, long *c);
368
369
/* defaults */
370
extern long precreal;
371
372
void lim_lines_output(char *s, long n, long max);
373
int tex2mail_output(GEN z, long n);
374
void gen_output(GEN x);
375
void fputGEN_pariout(GEN x, pariout_t *T, FILE *out);
376
377
void parsestate_reset(void);
378
void parsestate_save(struct pari_parsestate *state);
379
void parsestate_restore(struct pari_parsestate *state);
380
381
void compilestate_reset(void);
382
void compilestate_save(struct pari_compilestate *comp);
383
void compilestate_restore(struct pari_compilestate *comp);
384
385
void filestate_save(struct pari_filestate *file);
386
void filestate_restore(struct pari_filestate *file);
387
void tmp_restore(pariFILE *F);
388
389
long evalstate_get_trace(void);
390
void evalstate_set_trace(long lvl);
391
void evalstate_clone(void);
392
void evalstate_reset(void);
393
void evalstate_restore(struct pari_evalstate *state);
394
GEN evalstate_restore_err(struct pari_evalstate *state);
395
void evalstate_save(struct pari_evalstate *state);
396
void varstate_save(struct pari_varstate *s);
397
void varstate_restore(struct pari_varstate *s);
398
399
void mtstate_save(struct pari_mtstate *s);
400
void mtstate_reset(void);
401
void mtstate_restore(struct pari_mtstate *s);
402
403
void debug_context(void);
404
405
typedef struct {
406
const char *s;
407
size_t ls;
408
char **dir;
409
} forpath_t;
410
void forpath_init(forpath_t *T, gp_path *path, const char *s);
411
char *forpath_next(forpath_t *T);
412
413
/* GP output && output format */
414
void gpwritebin(const char *s, GEN x);
415
extern char *current_logfile;
416
417
/* colors */
418
extern long gp_colors[];
419
extern int disable_color;
420
421
/* entrees */
422
#define EpVALENCE(ep) ((ep)->valence & 0xFF)
423
#define EpSTATIC(ep) ((ep)->valence & 0x100)
424
#define EpSETSTATIC(ep) ((ep)->valence |= 0x100)
425
enum { EpNEW = 100, EpALIAS, EpVAR, EpINSTALL };
426
#define initial_value(ep) ((ep)+1)
427
428
/* functions lists */
429
extern const long functions_tblsz; /* hashcodes table size */
430
extern entree **functions_hash; /* functions hashtable */
431
extern entree **defaults_hash; /* defaults hashtable */
432
433
/* buffers */
434
typedef struct Buffer {
435
char *buf;
436
ulong len;
437
jmp_buf env;
438
} Buffer;
439
Buffer *new_buffer(void);
440
void delete_buffer(Buffer *b);
441
void fix_buffer(Buffer *b, long newlbuf);
442
443
typedef struct {
444
const char *s; /* source */
445
char *t, *end; /* target, last char read */
446
int in_string, in_comment, more_input, wait_for_brace;
447
Buffer *buf;
448
} filtre_t;
449
void init_filtre(filtre_t *F, Buffer *buf);
450
Buffer *filtered_buffer(filtre_t *F);
451
void kill_buffers_upto_including(Buffer *B);
452
void pop_buffer(void);
453
void kill_buffers_upto(Buffer *B);
454
int gp_read_line(filtre_t *F, const char *PROMPT);
455
void parse_key_val(char *src, char **ps, char **pt);
456
extern int (*cb_pari_get_line_interactive)(const char*, const char*, filtre_t *F);
457
extern char *(*cb_pari_fgets_interactive)(char *s, int n, FILE *f);
458
int get_line_from_file(const char *prompt, filtre_t *F, FILE *file);
459
void pari_skip_space(char **s);
460
void pari_skip_alpha(char **s);
461
char *pari_translate_string(const char *src, char *s, char *entry);
462
463
gp_data *default_gp_data(void);
464
465
typedef char *(*fgets_t)(char *, int, void*);
466
467
typedef struct input_method {
468
/* optional */
469
fgets_t myfgets; /* like libc fgets() but last argument is (void*) */
470
/* mandatory */
471
char * (*getline)(char**, int f, struct input_method*, filtre_t *F);
472
int free; /* boolean: must we free the output of getline() ? */
473
/* optional */
474
const char *prompt, *prompt_cont;
475
void *file; /* can be used as last argument for fgets() */
476
} input_method;
477
478
int input_loop(filtre_t *F, input_method *IM);
479
char *file_input(char **s0, int junk, input_method *IM, filtre_t *F);
480
char *file_getline(Buffer *b, char **s0, input_method *IM);
481
482
/* readline */
483
typedef struct {
484
/* pointers to readline variables/functions */
485
char **line_buffer;
486
int *point;
487
int *end;
488
char **(*completion_matches)(const char *, char *(*)(const char*, int));
489
char *(*filename_completion_function)(const char *, int);
490
char *(*username_completion_function)(const char *, int);
491
int (*insert)(int, int);
492
int *completion_append_character;
493
494
/* PARI-specific */
495
int back; /* rewind the cursor by this number of chars */
496
} pari_rl_interface;
497
498
/* Code which wants to use readline needs to do the following:
499
500
#include <readline.h>
501
#include <paripriv.h>
502
pari_rl_interface pari_rl;
503
pari_use_readline(pari_rl);
504
505
This will initialize the pari_rl structure. A pointer to this structure
506
must be given as first argument to all PARI readline functions. */
507
508
/* IMPLEMENTATION NOTE: this really must be a macro (not a function),
509
* since we refer to readline symbols. */
510
#define pari_use_readline(pari_rl) do {\
511
(pari_rl).line_buffer = &rl_line_buffer; \
512
(pari_rl).point = &rl_point; \
513
(pari_rl).end = &rl_end; \
514
(pari_rl).completion_matches = &rl_completion_matches; \
515
(pari_rl).filename_completion_function = &rl_filename_completion_function; \
516
(pari_rl).username_completion_function = &rl_username_completion_function; \
517
(pari_rl).insert = &rl_insert; \
518
(pari_rl).completion_append_character = &rl_completion_append_character; \
519
(pari_rl).back = 0; } while(0)
520
521
/* FIXME: EXPORT AND DOCUMENT THE FOLLOWING */
522
523
/* PROBABLY NOT IN THE RIGHT FILE, SORT BY THEME */
524
525
/* multiprecision */
526
GEN adduispec_offset(ulong s, GEN x, long offset, long nx);
527
int lgcdii(ulong* d, ulong* d1, ulong* u, ulong* u1, ulong* v, ulong* v1, ulong vmax);
528
ulong rgcduu(ulong d, ulong d1, ulong vmax, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s);
529
ulong xgcduu(ulong d, ulong d1, int f, ulong* v, ulong* v1, long *s);
530
ulong xxgcduu(ulong d, ulong d1, int f, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s);
531
GEN divgunu(GEN x, ulong i);
532
GEN divrunu(GEN x, ulong i);
533
GEN muliispec(GEN x, GEN y, long nx, long ny);
534
GEN red_montgomery(GEN T, GEN N, ulong inv);
535
GEN sqrispec(GEN x, long nx);
536
ulong *convi(GEN x, long *l);
537
538
int approx_0(GEN x, GEN y);
539
540
/* powers */
541
GEN rpowuu(ulong a, ulong n, long prec);
542
543
/* floats */
544
double dabs(double s, double t);
545
double darg(double s, double t);
546
void dcxlog(double s, double t, double *a, double *b);
547
double dnorm(double s, double t);
548
double dbllog2(GEN z);
549
double dbllambertW0(double a);
550
double dbllambertW_1(double a);
551
552
/* hnf */
553
GEN hnfadd(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC);
554
GEN hnfadd_i(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC);
555
GEN hnfspec_i(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0);
556
GEN hnfspec(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0);
557
GEN mathnfspec(GEN x, GEN *ptperm, GEN *ptdep, GEN *ptB, GEN *ptC);
558
GEN ZM_hnfmodall_i(GEN x, GEN dm, long flag);
559
560
GEN LLL_check_progress(GEN Bnorm, long n0, GEN m, int final, long *ti_LLL);
561
562
/* integer factorization / discrete log */
563
ulong is_kth_power(GEN x, ulong p, GEN *pt);
564
GEN mpqs(GEN N);
565
566
/* Polynomials */
567
/* a) Arithmetic/conversions */
568
GEN lift_if_rational(GEN x);
569
GEN monomial(GEN a, long degpol, long v);
570
GEN monomialcopy(GEN a, long degpol, long v);
571
GEN ser2pol_i(GEN x, long lx);
572
GEN ser2rfrac_i(GEN x);
573
GEN swap_vars(GEN b0, long v);
574
GEN RgX_recipspec_shallow(GEN x, long l, long n);
575
576
/* b) Modular */
577
GEN bezout_lift_fact(GEN T, GEN Tmod, GEN p, long e);
578
GEN polsym_gen(GEN P, GEN y0, long n, GEN T, GEN N);
579
GEN ZXQ_charpoly_sqf(GEN A, GEN B, long *lambda, long v);
580
GEN ZX_disc_all(GEN,ulong);
581
GEN ZX_resultant_all(GEN A, GEN B, GEN dB, ulong bound);
582
GEN ZX_ZXY_resultant_all(GEN A, GEN B, long *lambda, GEN *LPRS);
583
584
GEN FlxqM_mul_Kronecker(GEN A, GEN B, GEN T, ulong p);
585
GEN FqM_mul_Kronecker(GEN x, GEN y, GEN T, GEN p);
586
587
/* c) factorization */
588
GEN chk_factors_get(GEN lt, GEN famod, GEN c, GEN T, GEN N);
589
long cmbf_maxK(long nb);
590
GEN ZX_DDF(GEN x);
591
GEN initgaloisborne(GEN T, GEN dn, long prec, GEN *pL, GEN *pprep, GEN *pdis);
592
593
/* number fields */
594
GEN nflist_C3_worker(GEN gv, GEN T);
595
GEN nflist_C4vec_worker(GEN gm, GEN X, GEN Xinf, GEN gs);
596
GEN nflist_V4_worker(GEN D1, GEN X, GEN Xinf, GEN gs);
597
GEN nflist_D4_worker(GEN D, GEN X, GEN Xinf, GEN listarch);
598
GEN nflist_A4S4_worker(GEN P3, GEN X, GEN Xinf, GEN cards);
599
GEN nflist_C5_worker(GEN N, GEN bnfC5);
600
GEN nflist_CL_worker(GEN Fcond, GEN bnf, GEN ellprec);
601
GEN nflist_DL_worker(GEN P2, GEN X1pow, GEN X0pow, GEN X, GEN Xinf, GEN ells);
602
GEN nflist_Mgen_worker(GEN field, GEN X, GEN Xinf, GEN ella);
603
GEN nflist_C6_worker(GEN P3, GEN X, GEN Xinf, GEN M, GEN T);
604
GEN nflist_D612_worker(GEN P3, GEN X, GEN Xinf, GEN limd2s2);
605
GEN nflist_A46S46P_worker(GEN P3, GEN Xinf, GEN sqX, GEN cards);
606
GEN nflist_S46M_worker(GEN P3, GEN X, GEN Xinf, GEN gs);
607
GEN nflist_A462_worker(GEN P3, GEN X, GEN Xinf, GEN listarch, GEN GAL);
608
GEN nflist_S3C3_worker(GEN D2, GEN X, GEN Xinf);
609
GEN nflist_S462_worker(GEN P3, GEN X, GEN Xinf, GEN listarch13, GEN GAL);
610
GEN nflist_S36_worker(GEN pol, GEN X, GEN Xinf);
611
GEN nflist_C32C4_worker(GEN P4, GEN X, GEN Xinf, GEN GAL);
612
GEN nflist_C32D4_worker(GEN P, GEN X, GEN Xinf, GEN gs);
613
GEN nflist_C9_worker(GEN P, GEN X, GEN Xinf);
614
GEN nflist_C3C3_worker(GEN gi, GEN V3, GEN V3D, GEN X);
615
GEN nflist_S3R_worker(GEN ga, GEN ALLCTS);
616
GEN nflist_S3I_worker(GEN ga, GEN ALLCTS);
617
GEN nflist_D9_worker(GEN P2, GEN X, GEN Xinf);
618
GEN nflist_S32_worker(GEN all1, GEN X, GEN Xinf, GEN V3, GEN gs);
619
620
/* pari_init / pari_close */
621
void pari_close_compiler(void);
622
void pari_close_evaluator(void);
623
void pari_close_files(void);
624
void pari_close_floats(void);
625
void pari_close_homedir(void);
626
void pari_close_parser(void);
627
void pari_close_paths(void);
628
void pari_close_primes(void);
629
void pari_init_buffers(void);
630
void pari_init_compiler(void);
631
void pari_init_defaults(void);
632
void pari_init_ellcondfile(void);
633
void pari_init_evaluator(void);
634
void pari_init_files(void);
635
void pari_init_floats(void);
636
void pari_init_homedir(void);
637
void pari_init_graphics(void);
638
void pari_init_parser(void);
639
void pari_init_rand(void);
640
void pari_init_paths(void);
641
void pari_init_primetab(void);
642
void pari_init_seadata(void);
643
GEN pari_get_seadata(void);
644
void pari_set_primetab(GEN global_primetab);
645
void pari_set_seadata(GEN seadata);
646
void pari_set_varstate(long *vp, struct pari_varstate *vs);
647
void pari_thread_close_files(void);
648
649
void export_add(const char *str, GEN val);
650
void export_del(const char *str);
651
GEN export_get(const char *str);
652
void exportall(void);
653
void unexportall(void);
654
655
/* BY FILES */
656
657
/* parinf.h */
658
659
GEN fincke_pohst(GEN a,GEN BOUND,long stockmax,long PREC, FP_chk_fun *CHECK);
660
void init_zlog(zlog_S *S, GEN bid);
661
GEN log_gen_arch(zlog_S *S, long index);
662
GEN log_gen_pr(zlog_S *S, long index, GEN nf, long e);
663
GEN sprk_log_gen_pr(GEN nf, GEN sprk, long e);
664
GEN sprk_log_prk1(GEN nf, GEN a, GEN sprk);
665
GEN poltobasis(GEN nf,GEN x);
666
GEN coltoalg(GEN nf,GEN x);
667
668
GEN rnfdisc_get_T(GEN nf, GEN P, GEN *lim);
669
GEN make_integral(GEN nf, GEN L0, GEN f, GEN listpr);
670
GEN rnfallbase(GEN nf, GEN pol, GEN lim, GEN rnfeq, GEN *pD, GEN *pfi,
671
GEN *pdKP);
672
GEN subgroupcondlist(GEN cyc, GEN bound, GEN listKer);
673
674
/* Qfb.c */
675
676
GEN redimagsl2(GEN q, GEN *U);
677
678
/* alglin1.c */
679
680
typedef long (*pivot_fun)(GEN,GEN,long,GEN);
681
GEN ZM_pivots(GEN x0, long *rr);
682
GEN RgM_pivots(GEN x0, GEN data, long *rr, pivot_fun pivot);
683
void RgMs_structelim_col(GEN M, long nbcol, long nbrow, GEN A, GEN *p_col, GEN *p_lin);
684
685
/* arith1.c */
686
687
int is_gener_Fp(GEN x, GEN p, GEN p_1, GEN L);
688
int is_gener_Fl(ulong x, ulong p, ulong p_1, GEN L);
689
690
/* arith2.c */
691
692
int divisors_init(GEN n, GEN *pP, GEN *pE);
693
long set_optimize(long what, GEN g);
694
695
/* base1.c */
696
697
GEN zk_galoisapplymod(GEN nf, GEN z, GEN S, GEN p);
698
699
/* base2.c */
700
701
GEN dim1proj(GEN prh);
702
GEN gen_if_principal(GEN bnf, GEN x);
703
704
/* base3.c */
705
706
void check_nfelt(GEN x, GEN *den);
707
GEN zk_ei_mul(GEN nf, GEN x, long i);
708
GEN log_prk(GEN nf, GEN a, GEN sprk, GEN mod);
709
GEN log_prk_units(GEN nf, GEN D, GEN sprk);
710
GEN log_prk_units_init(GEN bnf);
711
GEN veclog_prk(GEN nf, GEN v, GEN sprk);
712
GEN log_prk_init(GEN nf, GEN pr, long k, GEN mod);
713
714
/* base4.c */
715
716
GEN factorbackprime(GEN nf, GEN L, GEN e);
717
718
/* bb_group.c */
719
720
GEN producttree_scheme(long n);
721
722
/* bern.c */
723
long bernbitprec(long N);
724
725
/* bibli2.c */
726
727
GEN sort_factor_pol(GEN y, int (*cmp)(GEN,GEN));
728
729
/* buch1.c */
730
731
long bnf_increase_LIMC(long LIMC, long LIMCMAX);
732
733
/* buch2.c */
734
735
typedef struct GRHprime_t { ulong p; double logp; GEN dec; } GRHprime_t;
736
typedef struct GRHcheck_t { double cD, cN; GRHprime_t *primes; long clone, nprimes, maxprimes; ulong limp; forprime_t P; } GRHcheck_t;
737
void free_GRHcheck(GRHcheck_t *S);
738
void init_GRHcheck(GRHcheck_t *S, long N, long R1, double LOGD);
739
void GRH_ensure(GRHcheck_t *S, long nb);
740
ulong GRH_last_prime(GRHcheck_t *S);
741
int GRHok(GRHcheck_t *S, double L, double SA, double SB);
742
GEN extract_full_lattice(GEN x);
743
GEN init_red_mod_units(GEN bnf, long prec);
744
GEN isprincipalarch(GEN bnf, GEN col, GEN kNx, GEN e, GEN dx, long *pe);
745
GEN red_mod_units(GEN col, GEN z);
746
747
/* buch3.c */
748
749
GEN minkowski_bound(GEN D, long N, long r2, long prec);
750
int subgroup_conductor_ok(GEN H, GEN L);
751
GEN subgrouplist_cond_sub(GEN bnr, GEN C, GEN bound);
752
753
/* crvwtors.c */
754
755
void random_curves_with_m_torsion(ulong *a4, ulong *a6, ulong *tx, ulong *ty, long ncurves, long m, ulong p);
756
757
/* dirichlet.c */
758
759
GEN direuler_factor(GEN s, long n);
760
761
/* ellanal.c */
762
763
GEN hnaive_max(GEN ell, GEN ht);
764
765
/* elliptic.c */
766
767
GEN ellQ_genreduce(GEN E, GEN G, GEN M, long prec);
768
GEN ellQ_isdivisible(GEN E, GEN P, ulong l);
769
GEN ellintegralbmodel(GEN e, GEN *pv);
770
void ellprint(GEN e);
771
772
/* ellrank.c */
773
774
GEN ell2selmer_basis(GEN ell, GEN *cb, long prec);
775
776
/* es.c */
777
778
void killallfiles(void);
779
pariFILE* newfile(FILE *f, const char *name, int type);
780
int popinfile(void);
781
pariFILE* try_pipe(const char *cmd, int flag);
782
783
/* F2m.c */
784
785
GEN F2m_gauss_pivot(GEN x, long *rr);
786
GEN F2m_gauss_sp(GEN a, GEN b);
787
GEN F2m_invimage_i(GEN A, GEN B);
788
789
/* Fle.c */
790
791
void FleV_add_pre_inplace(GEN P, GEN Q, GEN a4, ulong p, ulong pi);
792
void FleV_dbl_pre_inplace(GEN P, GEN a4, ulong p, ulong pi);
793
void FleV_mulu_pre_inplace(GEN P, ulong n, GEN a4, ulong p, ulong pi);
794
void FleV_sub_pre_inplace(GEN P, GEN Q, GEN a4, ulong p, ulong pi);
795
796
/* Flv.c */
797
798
GEN Flm_gauss_sp(GEN a, GEN b, ulong *detp, ulong p);
799
GEN Flm_invimage_i(GEN A, GEN B, ulong p);
800
GEN Flm_inv_sp(GEN a, ulong *detp, ulong p);
801
GEN Flm_pivots(GEN x, ulong p, long *rr, long inplace);
802
803
/* Flxq_log.c */
804
805
GEN Flxq_log_index(GEN a0, GEN b0, GEN m, GEN T0, ulong p);
806
int Flxq_log_use_index(GEN m, GEN T0, ulong p);
807
808
/* FlxqE.c */
809
810
GEN ZpXQ_norm_pcyc(GEN x, GEN T, GEN q, GEN p);
811
long zx_is_pcyc(GEN T);
812
813
/* FpV.c */
814
815
GEN FpMs_leftkernel_elt_col(GEN M, long nbcol, long nbrow, GEN p);
816
GEN FpX_to_mod_raw(GEN z, GEN p);
817
818
/* FpX.c */
819
820
GEN ZlXQXn_expint(GEN h, long e, GEN T, GEN p, ulong pp);
821
822
/* FpX_factor.c */
823
824
GEN ddf_to_ddf2(GEN V);
825
long ddf_to_nbfact(GEN D);
826
GEN vddf_to_simplefact(GEN V, long d);
827
828
/* FpXQX_factor.c */
829
830
GEN FpXQX_factor_Berlekamp(GEN x, GEN T, GEN p);
831
832
/* forprime.c*/
833
834
void init_modular_big(forprime_t *S);
835
void init_modular_small(forprime_t *S);
836
837
/* galconj.c */
838
839
GEN galoiscosets(GEN O, GEN perm);
840
GEN matrixnorm(GEN M, long prec);
841
842
/* gen1.c */
843
844
GEN gred_rfrac_simple(GEN n, GEN d);
845
GEN sqr_ser_part(GEN x, long l1, long l2);
846
847
/* hash.c */
848
849
hashtable *hashstr_import_static(hashentry *e, ulong size);
850
851
/* hyperell.c */
852
853
GEN ZlXQX_hyperellpadicfrobenius(GEN H, GEN T, ulong p, long n);
854
GEN hyperell_redsl2(GEN Q);
855
856
/* ifactor1.c */
857
858
ulong snextpr(ulong p, byteptr *d, long *rcn, long *q, int (*ispsp)(ulong));
859
860
/* intnum.c */
861
862
GEN contfraceval_inv(GEN CF, GEN tinv, long nlim);
863
864
/* mftrace.c */
865
866
void pari_close_mf(void);
867
long polishomogeneous(GEN P);
868
GEN sertocol(GEN S);
869
GEN mfrhopol(long n);
870
GEN mfrhopol_u_eval(GEN Q, ulong t2);
871
GEN mfrhopol_eval(GEN Q, GEN t2);
872
873
/* prime.c */
874
875
long BPSW_psp_nosmalldiv(GEN N);
876
int MR_Jaeschke(GEN n);
877
long isanypower_nosmalldiv(GEN N, GEN *px);
878
void prime_table_next_p(ulong a, byteptr *pd, ulong *pp, ulong *pn);
879
880
/* perm.c */
881
882
long cosets_perm_search(GEN C, GEN p);
883
GEN perm_generate(GEN S, GEN H, long o);
884
long perm_relorder(GEN p, GEN S);
885
GEN vecperm_extendschreier(GEN C, GEN v, long n);
886
887
/* polclass.c */
888
889
GEN polclass0(long D, long inv, long xvar, GEN *db);
890
891
/* polmodular.c */
892
893
GEN polmodular0_ZM(long L, long inv, GEN J, GEN Q, int compute_derivs, GEN *db);
894
GEN Flm_Fl_polmodular_evalx(GEN phi, long L, ulong j, ulong p, ulong pi);
895
GEN polmodular_db_init(long inv);
896
void polmodular_db_clear(GEN db);
897
void polmodular_db_add_level(GEN *db, long L, long inv);
898
void polmodular_db_add_levels(GEN *db, long *levels, long k, long inv);
899
GEN polmodular_db_for_inv(GEN db, long inv);
900
GEN polmodular_db_getp(GEN fdb, long L, ulong p);
901
902
long modinv_level(long inv);
903
long modinv_degree(long *p1, long *p2, long inv);
904
long modinv_ramified(long D, long inv);
905
long modinv_j_from_2double_eta(GEN F, long inv, ulong x0, ulong x1, ulong p, ulong pi);
906
GEN double_eta_raw(long inv);
907
ulong modfn_root(ulong j, norm_eqn_t ne, long inv);
908
long modfn_unambiguous_root(ulong *r, long inv, ulong j0, norm_eqn_t ne, GEN jdb);
909
GEN qfb_nform(long D, long n);
910
911
/* Fle.c */
912
913
ulong Flj_order_ufact(GEN P, ulong n, GEN F, ulong a4, ulong p, ulong pi);
914
915
/* polarit3.c */
916
917
GEN Flm_Frobenius_pow(GEN M, long d, GEN T, ulong p);
918
GEN FpM_Frobenius_pow(GEN M, long d, GEN T, GEN p);
919
GEN FpX_compositum(GEN A, GEN B, GEN p);
920
GEN Flx_direct_compositum(GEN A, GEN B, ulong p);
921
GEN FlxV_direct_compositum(GEN V, ulong p);
922
GEN FlxqX_direct_compositum(GEN P, GEN Q, GEN T, ulong p);
923
GEN FpX_direct_compositum(GEN A, GEN B, GEN p);
924
GEN FpXV_direct_compositum(GEN V, GEN p);
925
GEN nf_direct_compositum(GEN nf, GEN A, GEN B);
926
ulong ZX_ZXY_ResBound(GEN A, GEN B, GEN dB);
927
GEN ffinit_Artin_Schreier(ulong p, long l);
928
GEN ffinit_rand(GEN p, long n);
929
930
/* nflistQT.c */
931
932
GEN nflistQT(long n, long k, long v);
933
934
/* ramanujantau.c */
935
GEN ramanujantau_worker(GEN gt, GEN p2_7, GEN p_9, GEN p);
936
GEN taugen_n_worker(GEN t, GEN pol, GEN p4);
937
938
/* readline.c */
939
940
char** pari_completion(pari_rl_interface *pari_rl, char *text, int START, int END);
941
char** pari_completion_matches(pari_rl_interface *pari_rl, const char *s, long pos, long *wordpos);
942
943
/* RgX.c */
944
945
GEN RgX_homogenous_evalpow(GEN P, GEN A, GEN B);
946
GEN QXQX_homogenous_evalpow(GEN P, GEN A, GEN B, GEN T);
947
948
/* subcyclo.c */
949
950
GEN galoiscyclo(long n, long v);
951
GEN znstar_bits(long n, GEN H);
952
long znstar_conductor(GEN H);
953
long znstar_conductor_bits(GEN bits);
954
GEN znstar_cosets(long n, long phi_n, GEN H);
955
GEN znstar_elts(long n, GEN H);
956
GEN znstar_generate(long n, GEN V);
957
GEN znstar_hnf(GEN Z, GEN M);
958
GEN znstar_hnf_elts(GEN Z, GEN H);
959
GEN znstar_hnf_generators(GEN Z, GEN M);
960
GEN znstar_reduce_modulus(GEN H, long n);
961
GEN znstar_small(GEN zn);
962
963
/* trans1.c */
964
965
struct abpq { GEN *a, *b, *p, *q; };
966
struct abpq_res { GEN P, Q, B, T; };
967
void abpq_init(struct abpq *A, long n);
968
void abpq_sum(struct abpq_res *r, long n1, long n2, struct abpq *A);
969
GEN logagmcx(GEN q, long prec);
970
GEN zellagmcx(GEN a0, GEN b0, GEN r, GEN t, long prec);
971
972
/* trans2.c */
973
974
GEN trans_fix_arg(long *prec, GEN *s0, GEN *sig, GEN *tau, pari_sp *av, GEN *res);
975
976
/* trans3.c */
977
978
GEN double_eta_quotient(GEN a, GEN w, GEN D, long p, long q, GEN pq, GEN sqrtD);
979
GEN inv_szeta_euler(long n, long prec);
980
981
/* volcano.c */
982
983
long j_level_in_volcano(GEN phi, ulong j, ulong p, ulong pi, long L, long depth);
984
ulong ascend_volcano(GEN phi, ulong j, ulong p, ulong pi, long level, long L, long depth, long steps);
985
ulong descend_volcano(GEN phi, ulong j, ulong p, ulong pi, long level, long L, long depth, long steps);
986
long next_surface_nbr(ulong *nJ, GEN phi, long L, long h, ulong J, const ulong *pJ, ulong p, ulong pi);
987
GEN enum_roots(ulong j, norm_eqn_t ne, GEN fdb, classgp_pcp_t G);
988
989
/* pic.c */
990
GEN ZpXQMinv(GEN A, GEN T, GEN pe, GEN p, long e);
991
GEN ZpXQ_FrobMat(GEN T, GEN p, long e, GEN pe);
992
GEN JgetT(GEN J);
993
GEN Jgetp(GEN J);
994
GEN JgetLp(GEN J);
995
GEN DivMul(GEN f, GEN W, GEN T, GEN p);
996
GEN DivAdd1(GEN WA, GEN WB, ulong d, GEN T, GEN pe, GEN p, ulong excess, long flag);
997
GEN PicRefreshPairings(GEN J, GEN FRparams, GEN T, GEN Pairings, GEN UsedNames, GEN Want, GEN WantNames);
998
GEN PicTors_UpdatePairings(GEN J, GEN FRparams, GEN BT, GEN R, GEN Tnew, GEN TnewPairings, int* replace);
999
GEN VecExtend1_shallow(GEN V, GEN X);
1000
GEN PicTorsGalRep_from_basis(GEN J, GEN J1, GEN l, GEN B);
1001
1002
ENDEXTERN
1003
1004