Code coverage tests

This page documents the degree to which the PARI/GP source code is tested by our public test suite, distributed with the source distribution in directory src/test/. This is measured by the gcov utility; we then process gcov output using the lcov frond-end.

We test a few variants depending on Configure flags on the pari.math.u-bordeaux.fr machine (x86_64 architecture), and agregate them in the final report:

The target is to exceed 90% coverage for all mathematical modules (given that branches depending on DEBUGLEVEL or DEBUGMEM are not covered). This script is run to produce the results below.

LCOV - code coverage report
Current view: top level - headers - paripriv.h (source / functions) Coverage Total Hit
Test: PARI/GP v2.18.1 lcov report (development 31041-bd73e9fcdd) Lines: 100.0 % 7 7
Test Date: 2026-07-22 22:45:42 Functions: 100.0 % 5 5
Legend: Lines:     hit not hit

            Line data    Source code
       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              : #define numberof(x) (sizeof(x) / sizeof((x)[0]))
      18              : 
      19              : /* to manipulate 'blocs' */
      20              : #define BL_HEAD 8
      21              : #define bl_base(x) (void*)((x) - BL_HEAD)
      22              : #define bl_height(x) (((GEN)x)[-8])
      23              : #define bl_left(x)   (((GEN*)x)[-7])
      24              : #define bl_right(x)  (((GEN*)x)[-6])
      25              : #define bl_size(x)   (((GEN)x)[-5])
      26              : #define bl_refc(x)   (((GEN)x)[-4])
      27              : #define bl_next(x)   (((GEN*)x)[-3])
      28              : #define bl_prev(x)   (((GEN*)x)[-2])
      29              : #define bl_num(x)    (((GEN)x)[-1])
      30              : 
      31              : /* swap */
      32              : #define lswap(x,y) {long _z=x; x=y; y=_z;}
      33              : #define pswap(x,y) {GEN *_z=x; x=y; y=_z;}
      34              : #define swap(x,y)  {GEN  _z=x; x=y; y=_z;}
      35              : #define dswap(x,y) { double _t=x; x=y; y=_t; }
      36              : #define swapspec(x,y, nx,ny) {swap(x,y); lswap(nx,ny);}
      37              : 
      38              : /* loops */
      39              : GEN incloop(GEN a);
      40              : GEN resetloop(GEN a, GEN b);
      41              : GEN setloop(GEN a);
      42              : 
      43              : /* parser */
      44              : 
      45              : /* GP control structures */
      46              : #define EXPR_WRAP(code, call) \
      47              : { GEN z; GEN __E = code; \
      48              :   push_lex(gen_0, __E); z = call; pop_lex(1); return z; }
      49              : #define EXPRVOID_WRAP(code, call) \
      50              : { GEN __E = code; \
      51              :   push_lex(gen_0, __E); call; pop_lex(1); }
      52              : #define EXPR_ARG __E, &gp_eval
      53              : #define EXPR_ARGPREC __E, &gp_evalprec
      54              : #define EXPR_ARGUPTO __E, &gp_evalupto
      55              : #define EXPR_ARGBOOL __E, &gp_evalbool
      56              : #define EXPR_ARGVOID __E, &gp_evalvoid
      57              : 
      58              : GEN  andpari(GEN a, GEN b);
      59              : GEN  orpari(GEN a, GEN b);
      60              : void ifpari_void(GEN g, GEN a, GEN b);
      61              : GEN  ifpari_multi(GEN g, GEN a);
      62              : 
      63              : GEN  gadde(GEN *x, GEN y);
      64              : GEN  gadd1e(GEN *x);
      65              : GEN  gdive(GEN *x, GEN y);
      66              : GEN  gdivente(GEN *x, GEN y);
      67              : GEN  gdivrounde(GEN *x, GEN y);
      68              : GEN  gmode(GEN *x, GEN y);
      69              : GEN  gmule(GEN *x, GEN y);
      70              : GEN  gshiftle(GEN *x, long n);
      71              : GEN  gshiftre(GEN *x, long n);
      72              : GEN  gsube(GEN *x, GEN y);
      73              : GEN  gsub1e(GEN *x);
      74              : GEN  gshift_right(GEN x, long n);
      75              : 
      76              : GEN  derivfun0(GEN args, GEN def, GEN code, long k, long prec);
      77              : GEN  direuler_bad(void *E, GEN (*eval)(void *, GEN, long), GEN a, GEN b, GEN c, GEN Sbad);
      78              : GEN  vecexpr0(GEN nmax, GEN code, GEN pred);
      79              : GEN  vecexpr1(GEN nmax, GEN code, GEN pred);
      80              : GEN  vecexpreq0(GEN nmax, GEN code, GEN pred);
      81              : GEN  vecexpreq1(GEN nmax, GEN code, GEN pred);
      82              : 
      83              : /* crt */
      84              : GEN  gen_crt(const char *str, GEN worker, forprime_t *S, GEN dB, ulong bound, long mmin, GEN *pt_mod,
      85              :              GEN crt(GEN, GEN, GEN*), GEN center(GEN, GEN, GEN));
      86              : void gen_inccrt(const char *str, GEN worker, GEN dB, long n, long mmin,
      87              :            forprime_t *S, GEN *pt_H, GEN *pt_mod, GEN crt(GEN, GEN, GEN*),
      88              :            GEN center(GEN, GEN, GEN));
      89              : void gen_inccrt_i(const char *str, GEN worker, GEN dB, long n, long mmin,
      90              :            forprime_t *S, GEN *pH, GEN *pmod, GEN crt(GEN, GEN, GEN*),
      91              :            GEN center(GEN, GEN, GEN));
      92              : 
      93              : /* worker */
      94              : 
      95              : GEN  ellapQ_zv_worker(GEN P, long CM, GEN e);
      96              : GEN  eisker_worker(GEN Ei, GEN M, GEN D, GEN co, GEN CD);
      97              : GEN  pareval_worker(GEN code);
      98              : GEN  parfor_worker(GEN i, GEN C);
      99              : GEN  parvector_worker(GEN i, GEN C);
     100              : GEN  parmatrix_worker(GEN i, GEN j, GEN C);
     101              : GEN  polmodular_worker(GEN pt, ulong L, GEN hilb, GEN factu,
     102              :        GEN vne, GEN vinfo, long compute_derivs, GEN j_powers, GEN G_surface,
     103              :        GEN G_floor, GEN fdb);
     104              : GEN  polclass_worker(GEN p, GEN G, GEN db);
     105              : GEN  nmV_polint_center_tree_worker(GEN Va, GEN T, GEN R, GEN xa, GEN m2);
     106              : GEN  nmV_chinese_center_tree_seq(GEN A, GEN P, GEN T, GEN R);
     107              : GEN  nxMV_polint_center_tree_worker(GEN Va, GEN T, GEN R, GEN xa, GEN m2);
     108              : GEN  nxMV_chinese_center_tree_seq(GEN A, GEN P, GEN T, GEN R);
     109              : GEN  F2xq_log_Coppersmith_worker(GEN u, long i, GEN V, GEN R);
     110              : GEN  Flxq_log_Coppersmith_worker(GEN u, long i, GEN V, GEN R);
     111              : GEN  Fp_log_sieve_worker(long a, long prmax, GEN C, GEN c, GEN Ci, GEN ci, GEN pr, GEN sz);
     112              : GEN  QM_charpoly_ZX_worker(GEN P, GEN M, GEN dM);
     113              : GEN  QXQ_div_worker(GEN P, GEN A, GEN B, GEN C);
     114              : GEN  QXQ_inv_worker(GEN P, GEN A, GEN B);
     115              : GEN  RgM_ZM_mul_worker(GEN y, GEN x);
     116              : GEN  ZX_resultant_worker(GEN P, GEN A, GEN B, GEN dB);
     117              : GEN  ZXQX_resultant_worker(GEN P, GEN A, GEN B, GEN T, GEN dB);
     118              : GEN  ZXX_resultant_worker(GEN P, GEN A, GEN B, GEN v);
     119              : GEN  ZX_ZXY_resultant_worker(GEN P, GEN A, GEN B, GEN dB, GEN v);
     120              : GEN  ZX_composedsum_worker(GEN P, GEN A, GEN B);
     121              : GEN  ZXQX_composedsum_worker(GEN P, GEN A, GEN B, GEN C);
     122              : GEN  ZX_gcd_worker(GEN P, GEN A, GEN B, GEN g);
     123              : GEN  ZXQ_minpoly_worker(GEN P, GEN A, GEN B, GEN dA, long d);
     124              : GEN  ZXQXQ_minpoly_worker(GEN P, GEN A, GEN B, GEN C, GEN dA, long d);
     125              : GEN  ZM_det_worker(GEN P, GEN A);
     126              : GEN  ZM_inv_worker(GEN P, GEN A);
     127              : GEN  ZM_ker_worker(GEN P, GEN A);
     128              : GEN  ZM_mul_worker(GEN P, GEN A, GEN B);
     129              : GEN  ZM_sqr_worker(GEN P, GEN A);
     130              : GEN  ZM_gauss_worker(GEN P, GEN A, GEN B);
     131              : GEN  ZabM_inv_worker(GEN P, GEN A, GEN Q);
     132              : GEN  nf_multable_worker(GEN ij, GEN w, GEN invbas, GEN T);
     133              : GEN  bnfinit_FP_worker(GEN INI, GEN PF, GEN nf, long Nrelpid, GEN rex, long jid0, long e0, ulong mod_p);
     134              : GEN  aprcl_step4_worker(ulong q, GEN pC, GEN N, GEN v);
     135              : GEN  aprcl_step6_worker(GEN r, long t, GEN N, GEN N1, GEN et);
     136              : GEN  ecpp_sqrt_worker(GEN g, GEN N, GEN p);
     137              : GEN  ecpp_ispsp_worker(GEN N);
     138              : GEN  ecpp_step2_worker(GEN S, GEN HD, GEN primelist, long dbg);
     139              : GEN  primecertisvalid_ecpp_worker(GEN certi);
     140              : GEN  lfuninit_worker(long r, GEN K, GEN L, GEN peh2d, GEN vroots, GEN dr, GEN di, GEN an, GEN bn);
     141              : GEN  lfuninit_theta2_worker(long r, GEN L, GEN qk, GEN a, GEN di, GEN an, GEN bn);
     142              : GEN  parapply_slice_worker(GEN worker, GEN D);
     143              : GEN  direllnf_worker(GEN P, ulong X, GEN E);
     144              : GEN  dirartin_worker(GEN P, ulong X, GEN nf, GEN G, GEN V, GEN aut);
     145              : GEN  direllsympow_worker(GEN P, ulong X, GEN E, ulong m);
     146              : GEN  dirgenus2_worker(GEN P, ulong X, GEN Q);
     147              : GEN  dirhgm_worker(GEN P, ulong X, GEN hgm, GEN t);
     148              : GEN  pardireuler(GEN worker, GEN a, GEN b, GEN c, GEN Sbad);
     149              : GEN  FpM_ratlift_worker(GEN A, GEN mod, GEN B);
     150              : GEN  ellQ_factorback_worker(GEN P, GEN E, GEN A, GEN L, ulong l);
     151              : GEN  chinese_unit_worker(GEN P, GEN A, GEN U, GEN B, GEN D, GEN C);
     152              : GEN  partmap_reverse_frac_worker(GEN t, GEN a, GEN b, GEN la, GEN lb, long v);
     153              : GEN  parsqf_worker(GEN gk, GEN vR, GEN data);
     154              : GEN  parsum_slice_worker(GEN a, GEN b, GEN m, GEN worker);
     155              : GEN  parsumprimefun_worker(GEN gk, GEN s, GEN zerf, GEN data, GEN vW, GEN f);
     156              : GEN  lerch_worker(GEN t, GEN E);
     157              : GEN  ramanujantau_worker(GEN gt, GEN p2_7, GEN p_9, GEN p);
     158              : GEN  taugen_n_worker(GEN t, GEN pol, GEN p4);
     159              : GEN  serh_worker(GEN gk, GEN V, GEN a, GEN ns, GEN gprec);
     160              : GEN  nfroots_worker(GEN r, GEN C, GEN lt, GEN T, long v);
     161              : GEN  heegnersum_worker(GEN l, GEN an, long r, long prec);
     162              : 
     163              : /* Relative number fields */
     164              : enum { rnf_NFABS = 1, rnf_MAPS };
     165              : 
     166              : /* Finite fields */
     167              : enum { t_FF_FpXQ = 0, t_FF_Flxq = 1, t_FF_F2xq = 2 };
     168              : GEN FF_ellinit(GEN E, GEN fg);
     169              : GEN FF_elldata(GEN E, GEN fg);
     170              : 
     171              : /* L functions */
     172              : enum { t_LFUN_GENERIC, t_LFUN_ZETA, t_LFUN_NF, t_LFUN_ELL, t_LFUN_KRONECKER,
     173              :        t_LFUN_CHIZ, t_LFUN_CHIGEN, t_LFUN_ETA,
     174              :        t_LFUN_DIV, t_LFUN_MUL, t_LFUN_CONJ,
     175              :        t_LFUN_SYMPOW_ELL, t_LFUN_QF, t_LFUN_ARTIN, t_LFUN_MFCLOS,
     176              :        t_LFUN_GENUS2, t_LFUN_TWIST, t_LFUN_CLOSURE0, t_LFUN_SHIFT,
     177              :        t_LFUN_HGM, t_LFUN_HECKE,t_LFUN_ABELREL};
     178              : enum { t_LDESC_INIT, t_LDESC_THETA, t_LDESC_PRODUCT };
     179              : 
     180              : /* Elliptic curves */
     181              : /* common to Q and Rg */
     182              : enum { R_PERIODS = 1, R_ETA, R_ROOTS, R_AB };
     183              : 
     184              : enum { Qp_ROOT = 1, Qp_TATE };
     185              : enum { Q_GROUPGEN = 5, Q_GLOBALRED, Q_ROOTNO, Q_MINIMALMODEL };
     186              : enum { NF_MINIMALMODEL = 1, NF_GLOBALRED, NF_MINIMALPRIMES, NF_ROOTNO, NF_NF };
     187              : 
     188              : /* common to Fp and Fq */
     189              : enum { FF_CARD = 1, FF_GROUP, FF_GROUPGEN, FF_O };
     190              : 
     191              : /* for Buchall_param */
     192              : enum { fupb_NONE = 0, fupb_RELAT, fupb_LARGE, fupb_PRECI };
     193              : 
     194              : /* Represents the data in the equation(s)
     195              :  *   4p = t^2 - v^2 D = t^2 - v^2 u^2 D_K = w^2 D_K.
     196              :  * t is the absolute trace, so always > 0.
     197              :  * T is a twisting parameter, which satisfies (T|p) == -1. */
     198              : typedef struct {
     199              :   GEN faw; /* factor(u*v) */
     200              :   long D, t, u, v;
     201              :   ulong p, pi, s2, T;
     202              : } norm_eqn_struct;
     203              : typedef norm_eqn_struct norm_eqn_t[1];
     204              : void norm_eqn_set(norm_eqn_t ne, long D,long t,long u,long v,GEN faw,ulong p);
     205              : 
     206              : #define zv_to_longptr(v) (&((v)[1]))
     207              : #define zv_to_ulongptr(v) ((ulong *)&((v)[1]))
     208              : 
     209              : /* Modular invariants */
     210              : #define INV_J       0
     211              : #define INV_F       1
     212              : #define INV_F2      2
     213              : #define INV_F3      3
     214              : #define INV_F4      4
     215              : #define INV_G2      5
     216              : #define INV_W2W3    6
     217              : #define INV_F8      8
     218              : #define INV_W3W3    9
     219              : #define INV_W2W5    10
     220              : #define INV_W2W7    14
     221              : #define INV_W3W5    15
     222              : #define INV_W3W7    21
     223              : #define INV_W2W3E2  23
     224              : #define INV_W2W5E2  24
     225              : #define INV_W2W13   26
     226              : #define INV_W2W7E2  27
     227              : #define INV_W3W3E2  28
     228              : #define INV_W5W7    35
     229              : #define INV_W3W13   39
     230              : #define INV_ATKIN3  103
     231              : #define INV_ATKIN5  105
     232              : #define INV_ATKIN7  107
     233              : #define INV_ATKIN11 111
     234              : #define INV_ATKIN13 113
     235              : #define INV_ATKIN17 117
     236              : #define INV_ATKIN19 119
     237              : #define INV_ATKIN23 123
     238              : #define INV_ATKIN29 129
     239              : #define INV_ATKIN31 131
     240              : #define INV_LAST    131
     241              : 
     242              : /* Get coefficient of x^d in f, assuming f is nonzero. */
     243     22484241 : INLINE ulong Flx_coeff(GEN f, long d) { return f[d + 2]; }
     244              : /* Return the root of f, assuming deg(f) = 1. */
     245       300983 : INLINE ulong Flx_deg1_root(GEN f, ulong p) {
     246       300983 :   if (degpol(f) != 1) pari_err_BUG("Flx_deg1_root");
     247       300975 :   return Fl_div(Fl_neg(Flx_coeff(f, 0), p), Flx_coeff(f, 1), p);
     248              : }
     249              : 
     250              : /* Allocation / GC */
     251              : long   getdebugvar(void);
     252              : void   setdebugvar(long n);
     253              : void   debug_stack(void);
     254              : void   minim_alloc(long n, double ***q, GEN *x, double **y,  double **z, double **v);
     255              : int    pop_entree_block(entree *ep, long loc);
     256              : int    pop_val_if_newer(entree *ep, long loc);
     257              : 
     258              : /* general printing */
     259              : void print_errcontext(PariOUT *out, const char *msg, const char *s, const char *entry);
     260              : void print_prefixed_text(PariOUT *out, const char *s, const char *prefix, const char *str);
     261              : INLINE void
     262           72 : print_text(const char *s) { print_prefixed_text(pariOut, s,NULL,NULL); }
     263              : INLINE void
     264         5327 : out_print_text(PariOUT *out, const char *s) { print_prefixed_text(out, s,NULL,NULL); }
     265              : INLINE long
     266      2652651 : is_keyword_char(char c) { return (isalnum((unsigned char)c) || c=='_'); }
     267              : 
     268              : /* Interfaces (GP, etc.) */
     269              : hashtable *hash_from_link(GEN e, GEN names, int use_stack);
     270              : void gen_relink(GEN x, hashtable *table);
     271              : entree* do_alias(entree *ep);
     272              : char* get_sep(const char *t);
     273              : long get_int(const char *s, long dflt);
     274              : void gp_initrc(pari_stack *p_A);
     275              : 
     276              : void pari_sigint(const char *s);
     277              : void* get_stack(double fraction, long min);
     278              : void  free_graph(void);
     279              : void  initout(int initerr);
     280              : void  resetout(int initerr);
     281              : void  init_linewrap(long w);
     282              : void  print_functions_hash(const char *s);
     283              : GEN   readbin(const char *name, FILE *f, int *vector);
     284              : int   term_height(void);
     285              : int   term_width(void);
     286              : /* gp_colors */
     287              : void decode_color(long n, long *c);
     288              : 
     289              : /* defaults */
     290              : extern long precreal;
     291              : 
     292              : void gen_output(GEN x);
     293              : void fputGEN_pariout(GEN x, pariout_t *T, FILE *out);
     294              : 
     295              : void parsestate_reset(void);
     296              : void parsestate_save(struct pari_parsestate *state);
     297              : void parsestate_restore(struct pari_parsestate *state);
     298              : 
     299              : void compilestate_reset(void);
     300              : void compilestate_save(struct pari_compilestate *comp);
     301              : void compilestate_restore(struct pari_compilestate *comp);
     302              : 
     303              : void filestate_save(struct pari_filestate *file);
     304              : void filestate_restore(struct pari_filestate *file);
     305              : void tmp_restore(pariFILE *F);
     306              : 
     307              : long evalstate_get_trace(void);
     308              : void evalstate_set_trace(long lvl);
     309              : void evalstate_clone(void);
     310              : void evalstate_reset(void);
     311              : void evalstate_restore(struct pari_evalstate *state);
     312              : GEN  evalstate_restore_err(struct pari_evalstate *state);
     313              : void evalstate_save(struct pari_evalstate *state);
     314              : void varstate_save(struct pari_varstate *s);
     315              : void varstate_restore(struct pari_varstate *s);
     316              : 
     317              : void mtstate_save(struct pari_mtstate *s);
     318              : void mtstate_reset(void);
     319              : void mtstate_restore(struct pari_mtstate *s);
     320              : 
     321              : void debug_context(void);
     322              : 
     323              : typedef struct {
     324              :   const char *s;
     325              :   size_t ls;
     326              :   char **dir;
     327              : } forpath_t;
     328              : void forpath_init(forpath_t *T, gp_path *path, const char *s);
     329              : char *forpath_next(forpath_t *T);
     330              : 
     331              : /* GP output && output format */
     332              : extern char *current_logfile;
     333              : 
     334              : /* colors */
     335              : extern long    gp_colors[];
     336              : extern int     disable_color;
     337              : 
     338              : /* entrees */
     339              : #define EpVALENCE(ep) ((ep)->valence & 0xFF)
     340              : #define EpSTATIC(ep) ((ep)->valence & 0x100)
     341              : #define EpSETSTATIC(ep) ((ep)->valence |= 0x100)
     342              : enum { EpNEW = 100, EpALIAS, EpVAR, EpINSTALL };
     343              : #define initial_value(ep) ((ep)+1)
     344              : 
     345              : /* functions lists */
     346              : extern const long functions_tblsz;  /* hashcodes table size */
     347              : extern entree **functions_hash;   /* functions hashtable */
     348              : extern entree **defaults_hash;    /* defaults hashtable */
     349              : 
     350              : /* buffers */
     351              : typedef struct Buffer {
     352              :   char *buf;
     353              :   ulong len;
     354              :   jmp_buf env;
     355              : } Buffer;
     356              : Buffer *new_buffer(void);
     357              : void delete_buffer(Buffer *b);
     358              : void fix_buffer(Buffer *b, long newlbuf);
     359              : 
     360              : typedef struct {
     361              :   const char *s; /* source */
     362              :   char *t, *end; /* target, last char read */
     363              :   int in_string, in_comment, more_input, wait_for_brace;
     364              :   Buffer *buf;
     365              : } filtre_t;
     366              : void init_filtre(filtre_t *F, Buffer *buf);
     367              : Buffer *filtered_buffer(filtre_t *F);
     368              : void kill_buffers_upto_including(Buffer *B);
     369              : void pop_buffer(void);
     370              : void kill_buffers_upto(Buffer *B);
     371              : int gp_read_line(filtre_t *F, const char *PROMPT);
     372              : void parse_key_val(char *src, char **ps, char **pt);
     373              : extern int (*cb_pari_get_line_interactive)(const char*, const char*, filtre_t *F);
     374              : extern char *(*cb_pari_fgets_interactive)(char *s, int n, FILE *f);
     375              : int get_line_from_file(const char *prompt, filtre_t *F, FILE *file);
     376              : void pari_skip_space(char **s);
     377              : void pari_skip_alpha(char **s);
     378              : char *pari_translate_string(const char *src, char *s, char *entry);
     379              : 
     380              : gp_data *default_gp_data(void);
     381              : 
     382              : typedef char *(*fgets_t)(char *, int, void*);
     383              : 
     384              : typedef struct input_method {
     385              : /* optional */
     386              :   fgets_t myfgets;  /* like libc fgets() but last argument is (void*) */
     387              : /* mandatory */
     388              :   char * (*getline)(char**, int f, struct input_method*, filtre_t *F);
     389              :   int free; /* boolean: must we free the output of getline() ? */
     390              : /* optional */
     391              :   const char *prompt, *prompt_cont;
     392              :   void *file;  /* can be used as last argument for fgets() */
     393              : } input_method;
     394              : 
     395              : int input_loop(filtre_t *F, input_method *IM);
     396              : char *file_input(char **s0, int junk, input_method *IM, filtre_t *F);
     397              : char *file_getline(Buffer *b, char **s0, input_method *IM);
     398              : 
     399              : /* readline */
     400              : typedef struct {
     401              :   /* pointers to readline variables/functions */
     402              :   char **line_buffer;
     403              :   int *point;
     404              :   int *end;
     405              :   char **(*completion_matches)(const char *, char *(*)(const char*, int));
     406              :   char *(*filename_completion_function)(const char *, int);
     407              :   char *(*username_completion_function)(const char *, int);
     408              :   int (*insert)(int, int);
     409              :   int *completion_append_character;
     410              : 
     411              :   /* PARI-specific */
     412              :   int back;  /* rewind the cursor by this number of chars */
     413              : } pari_rl_interface;
     414              : 
     415              : /* Code which wants to use readline needs to do the following:
     416              : 
     417              : #include <readline/readline.h>
     418              : #include <pari/paripriv.h>
     419              : pari_rl_interface pari_rl;
     420              : pari_use_readline(pari_rl);
     421              : 
     422              : This will initialize the pari_rl structure. A pointer to this structure
     423              : must be given as first argument to all PARI readline functions. */
     424              : 
     425              : /* IMPLEMENTATION NOTE: this really must be a macro (not a function),
     426              :  * since we refer to readline symbols. */
     427              : #define pari_use_readline(pari_rl) do {\
     428              :     (pari_rl).line_buffer = &rl_line_buffer; \
     429              :     (pari_rl).point = &rl_point; \
     430              :     (pari_rl).end = &rl_end; \
     431              :     (pari_rl).completion_matches = &rl_completion_matches; \
     432              :     (pari_rl).filename_completion_function = &rl_filename_completion_function; \
     433              :     (pari_rl).username_completion_function = &rl_username_completion_function; \
     434              :     (pari_rl).insert = &rl_insert; \
     435              :     (pari_rl).completion_append_character = &rl_completion_append_character; \
     436              :     (pari_rl).back = 0; } while(0)
     437              : 
     438              : /* FIXME: EXPORT AND DOCUMENT THE FOLLOWING */
     439              : 
     440              : /* PROBABLY NOT IN THE RIGHT FILE, SORT BY THEME */
     441              : 
     442              : /* multiprecision */
     443              : GEN   adduispec_offset(ulong s, GEN x, long offset, long nx);
     444              : int   lgcdii(ulong* d, ulong* d1, ulong* u, ulong* u1, ulong* v, ulong* v1, ulong vmax);
     445              : ulong rgcduu(ulong d, ulong d1, ulong vmax, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s);
     446              : ulong xgcduu(ulong d, ulong d1, int f, ulong* v, ulong* v1, long *s);
     447              : ulong xxgcduu(ulong d, ulong d1, int f, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s);
     448              : GEN   muliispec(GEN x, GEN y, long nx, long ny);
     449              : GEN   red_montgomery(GEN T, GEN N, ulong inv);
     450              : GEN   sqrispec(GEN x, long nx);
     451              : ulong *convi(GEN x, long *l);
     452              : 
     453              : /* powers */
     454              : GEN    rpowuu(ulong a, ulong n, long prec);
     455              : 
     456              : /* hnf */
     457              : GEN hnfadd(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC);
     458              : GEN hnfadd_i(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC);
     459              : GEN hnfspec_i(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0);
     460              : GEN hnfspec(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0);
     461              : GEN mathnfspec(GEN x, GEN *ptperm, GEN *ptdep, GEN *ptB, GEN *ptC);
     462              : GEN ZM_hnfmodall_i(GEN x, GEN dm, long flag);
     463              : 
     464              : GEN LLL_check_progress(GEN Bnorm, long n0, GEN m, int final, long *ti_LLL);
     465              : 
     466              : /* integer factorization / discrete log */
     467              : ulong is_kth_power(GEN x, ulong p, GEN *pt);
     468              : GEN   mpqs(GEN N);
     469              : 
     470              : /* Polynomials */
     471              : /* a) Arithmetic/conversions */
     472              : GEN  lift_if_rational(GEN x);
     473              : GEN  monomial(GEN a, long degpol, long v);
     474              : GEN  monomialcopy(GEN a, long degpol, long v);
     475              : GEN  ser2pol_i(GEN x, long lx);
     476              : GEN  ser2pol_i_normalize(GEN x, long l, long *v);
     477              : GEN  ser2rfrac_i(GEN x);
     478              : GEN  swap_vars(GEN b0, long v, long vc);
     479              : GEN  RgX_recipspec_shallow(GEN x, long l, long n);
     480              : GEN  Xpm1_powu(long n, long s, long v);
     481              : 
     482              : /* b) Modular */
     483              : GEN  bezout_lift_fact(GEN T, GEN Tmod, GEN p, long e);
     484              : GEN  polsym_gen(GEN P, GEN y0, long n, GEN T, GEN N);
     485              : GEN  ZXQ_charpoly_sqf(GEN A, GEN B, long *lambda, long v);
     486              : GEN  ZX_disc_all(GEN,ulong);
     487              : GEN  ZX_resultant_all(GEN A, GEN B, GEN dB, ulong bound);
     488              : GEN  ZX_ZXY_resultant_all(GEN A, GEN B, long *lambda, GEN *LPRS);
     489              : 
     490              : GEN FlxqM_mul_Kronecker(GEN A, GEN B, GEN T, ulong p);
     491              : GEN FqM_mul_Kronecker(GEN x, GEN y, GEN T, GEN p);
     492              : 
     493              : /* c) factorization */
     494              : GEN chk_factors_get(GEN lt, GEN famod, GEN c, GEN T, GEN N);
     495              : long cmbf_maxK(long nb);
     496              : GEN ZX_DDF(GEN x);
     497              : GEN ZX_DDF_max(GEN x, long dmax);
     498              : GEN initgaloisborne(GEN T, GEN dn, long prec, GEN *pL, GEN *pprep, GEN *pdis);
     499              : 
     500              : /* number fields */
     501              : GEN nflist_C3_worker(GEN gv, GEN T);
     502              : GEN nflist_C4vec_worker(GEN gm, GEN X, GEN Xinf, GEN gs);
     503              : GEN nflist_V4_worker(GEN D1, GEN X, GEN Xinf, GEN gs);
     504              : GEN nflist_D4_worker(GEN D, GEN X, GEN Xinf, GEN listarch);
     505              : GEN nflist_A4S4_worker(GEN P3, GEN X, GEN Xinf, GEN cards);
     506              : GEN nflist_C5_worker(GEN N, GEN bnfC5);
     507              : GEN nflist_CL_worker(GEN Fcond, GEN bnf, GEN ellprec);
     508              : GEN nflist_DL_worker(GEN P2, GEN X1pow, GEN X0pow, GEN X, GEN Xinf, GEN ells);
     509              : GEN nflist_Mgen_worker(GEN field, GEN X, GEN Xinf, GEN ella);
     510              : GEN nflist_C6_worker(GEN P3, GEN X, GEN Xinf, GEN M, GEN T);
     511              : GEN nflist_D612_worker(GEN P3, GEN X, GEN Xinf, GEN limd2s2);
     512              : GEN nflist_A46S46P_worker(GEN P3, GEN Xinf, GEN sqX, GEN cards);
     513              : GEN nflist_S46M_worker(GEN P3, GEN X, GEN Xinf, GEN gs);
     514              : GEN nflist_A462_worker(GEN P3, GEN X, GEN Xinf, GEN listarch, GEN GAL);
     515              : GEN nflist_S3C3_worker(GEN D2, GEN X, GEN Xinf);
     516              : GEN nflist_S462_worker(GEN P3, GEN X, GEN Xinf, GEN listarch13, GEN GAL);
     517              : GEN nflist_S36_worker(GEN pol, GEN X, GEN Xinf);
     518              : GEN nflist_C32C4_worker(GEN P4, GEN X, GEN Xinf, GEN GAL);
     519              : GEN nflist_C32D4_worker(GEN P, GEN X, GEN Xinf, GEN gs);
     520              : GEN nflist_C9_worker(GEN P, GEN X, GEN Xinf);
     521              : GEN nflist_C3C3_worker(GEN gi, GEN V3, GEN V3D, GEN X);
     522              : GEN nflist_S3R_worker(GEN ga, GEN ALLCTS);
     523              : GEN nflist_S3I_worker(GEN ga, GEN ALLCTS);
     524              : GEN nflist_D9_worker(GEN P2, GEN X, GEN Xinf);
     525              : GEN nflist_S32_worker(GEN all1, GEN X, GEN Xinf, GEN V3, GEN gs);
     526              : 
     527              : /* pari_init / pari_close */
     528              : void pari_close_compiler(void);
     529              : void pari_close_evaluator(void);
     530              : void pari_close_files(void);
     531              : void pari_close_floats(void);
     532              : void pari_close_hgm(void);
     533              : void pari_close_homedir(void);
     534              : void pari_close_parser(void);
     535              : void pari_close_paths(void);
     536              : void pari_close_primes(void);
     537              : void pari_init_buffers(void);
     538              : void pari_init_compiler(void);
     539              : void pari_init_defaults(void);
     540              : void pari_init_ellcondfile(void);
     541              : void pari_init_evaluator(void);
     542              : void pari_init_files(void);
     543              : void pari_init_floats(void);
     544              : void pari_init_hgm(void);
     545              : void pari_init_homedir(void);
     546              : void pari_init_graphics(void);
     547              : void pari_init_parser(void);
     548              : void pari_init_rand(void);
     549              : void pari_init_paths(void);
     550              : void pari_init_primetab(void);
     551              : void pari_init_seadata(void);
     552              : GEN pari_get_seadata(void);
     553              : void pari_set_primetab(GEN global_primetab);
     554              : void pari_set_seadata(GEN seadata);
     555              : void pari_set_varstate(long *vp, struct pari_varstate *vs);
     556              : void pari_thread_close_files(void);
     557              : 
     558              : void export_add(const char *str, GEN val);
     559              : void export_del(const char *str);
     560              : GEN  export_get(const char *str);
     561              : 
     562              : /* BY FILES */
     563              : 
     564              : /* parinf.h */
     565              : 
     566              : GEN     fincke_pohst(GEN a,GEN BOUND,long stockmax,long PREC, FP_chk_fun *CHECK);
     567              : void    init_zlog(zlog_S *S, GEN bid);
     568              : GEN     log_gen_arch(zlog_S *S, long index);
     569              : GEN     log_gen_pr(zlog_S *S, long index, GEN nf, long e);
     570              : GEN     make_integral(GEN nf, GEN L0, GEN f, GEN listpr);
     571              : GEN     poltobasis(GEN nf,GEN x);
     572              : GEN     rnfdisc_get_T(GEN nf, GEN P, GEN *lim);
     573              : GEN     rnfallbase(GEN nf, GEN pol, GEN lim, GEN eq, GEN *pD, GEN *pfi, GEN *pdKP);
     574              : GEN     sprk_log_gen_pr(GEN nf, GEN sprk, long e);
     575              : GEN     sprk_log_gen_pr2(GEN nf, GEN sprk, long e);
     576              : GEN     sprk_log_prk1(GEN nf, GEN a, GEN sprk);
     577              : GEN     sprk_to_bid(GEN nf, GEN L, long flag);
     578              : GEN     subgroupcondlist(GEN cyc, GEN bound, GEN listKer);
     579              : 
     580              : /* Qfb.c */
     581              : 
     582              : GEN     redimagsl2(GEN q, GEN *U);
     583              : 
     584              : /* alglin1.c */
     585              : 
     586              : typedef long (*pivot_fun)(GEN,GEN,long,GEN);
     587              : GEN     ZM_pivots(GEN x0, long *rr);
     588              : GEN     RgM_pivots(GEN x0, long *rr, pivot_fun pivot, GEN data);
     589              : void    RgMs_structelim_col(GEN M, long nbcol, long nbrow, GEN A, GEN *p_col, GEN *p_lin);
     590              : 
     591              : /* arith1.c */
     592              : 
     593              : int     is_gener_Fp(GEN x, GEN p, GEN p_1, GEN L);
     594              : int     is_gener_Fl(ulong x, ulong p, ulong p_1, GEN L);
     595              : 
     596              : /* arith2.c */
     597              : 
     598              : int     divisors_init(GEN n, GEN *pP, GEN *pE);
     599              : long    set_optimize(long what, GEN g);
     600              : 
     601              : /* base1.c */
     602              : 
     603              : GEN     zk_galoisapplymod(GEN nf, GEN z, GEN S, GEN p);
     604              : int     ZX_canon_neg(GEN z);
     605              : 
     606              : /* base2.c */
     607              : 
     608              : GEN     gen_if_principal(GEN bnf, GEN x);
     609              : 
     610              : /* base3.c */
     611              : 
     612              : GEN     zk_ei_mul(GEN nf, GEN x, long i);
     613              : GEN     log_prk(GEN nf, GEN a, GEN sprk, GEN mod);
     614              : GEN     log_prk_units(GEN nf, GEN D, GEN sprk);
     615              : GEN     log_prk_units_init(GEN bnf);
     616              : GEN     veclog_prk(GEN nf, GEN v, GEN sprk);
     617              : GEN     log_prk_init(GEN nf, GEN pr, long k, GEN mod);
     618              : GEN     check_mod_factored(GEN nf, GEN ideal, GEN *fa, GEN *fa2, GEN *archp, GEN MOD);
     619              : GEN     sprk_get_cyc(GEN s);
     620              : GEN     sprk_get_expo(GEN s);
     621              : GEN     sprk_get_gen(GEN s);
     622              : GEN     sprk_get_prk(GEN s);
     623              : GEN     sprk_get_ff(GEN s);
     624              : GEN     sprk_get_pr(GEN s);
     625              : void    sprk_get_AgL2(GEN s, GEN *A, GEN *g, GEN *L2);
     626              : void    sprk_get_U2(GEN s, GEN *U1, GEN *U2);
     627              : GEN     famat_zlog_pr(GEN nf, GEN g, GEN e, GEN sprk, GEN mod);
     628              : 
     629              : /* base4.c */
     630              : 
     631              : GEN     factorbackprime(GEN nf, GEN L, GEN e);
     632              : 
     633              : /* base5.c */
     634              : 
     635              : GEN     condliftA4(GEN nf);
     636              : GEN     condliftA5(GEN nf);
     637              : GEN     condliftS4(GEN nf);
     638              : 
     639              : /* bb_group.c */
     640              : 
     641              : GEN     producttree_scheme(long n);
     642              : 
     643              : /* bern.c */
     644              : long    bernbitprec(long N);
     645              : 
     646              : /* bibli2.c */
     647              : 
     648              : GEN     sort_factor_pol(GEN y, int (*cmp)(GEN,GEN));
     649              : 
     650              : /* buch1.c */
     651              : 
     652              : ulong   bnf_increase_LIMC(ulong LIMC, ulong LIMCMAX);
     653              : 
     654              : /* buch2.c */
     655              : 
     656              : typedef struct GRHprime_t { ulong p; double logp; GEN dec; } GRHprime_t;
     657              : typedef struct GRHcheck_t { double cD, cN; GRHprime_t *primes; long clone, nprimes, maxprimes; ulong limp; forprime_t P; } GRHcheck_t;
     658              : void    free_GRHcheck(GRHcheck_t *S);
     659              : void    init_GRHcheck(GRHcheck_t *S, long N, long R1, double LOGD);
     660              : void    GRH_ensure(GRHcheck_t *S, long nb);
     661              : ulong   GRH_last_prime(GRHcheck_t *S);
     662              : int     GRHok(GRHcheck_t *S, double L, double SA, double SB);
     663              : GEN     extract_full_lattice(GEN x);
     664              : GEN     init_red_mod_units(GEN bnf, long prec);
     665              : GEN     isprincipalarch(GEN bnf, GEN col, GEN kNx, GEN e, GEN dx, long *pe);
     666              : GEN     red_mod_units(GEN col, GEN z);
     667              : 
     668              : /* buch3.c */
     669              : 
     670              : GEN     minkowski_bound(GEN D, long N, long r2, long prec);
     671              : int     subgroup_conductor_ok(GEN H, GEN L);
     672              : GEN     subgrouplist_cond_sub(GEN bnr, GEN C, GEN bound);
     673              : 
     674              : /* crvwtors.c */
     675              : 
     676              : void    random_curves_with_m_torsion(ulong *a4, ulong *a6, ulong *tx, ulong *ty, long ncurves, long m, ulong p, ulong pi);
     677              : 
     678              : /* dirichlet.c */
     679              : 
     680              : GEN     direuler_factor(GEN s, long n);
     681              : 
     682              : /* ellanal.c */
     683              : 
     684              : GEN     hnaive_max(GEN ell, GEN ht);
     685              : 
     686              : /* elliptic.c */
     687              : 
     688              : GEN     ellQ_genreduce(GEN E, GEN G, GEN M, long prec);
     689              : GEN     ellQ_isdivisible(GEN E, GEN P, ulong l);
     690              : GEN     ellminimalbmodel(GEN E, GEN *ptv);
     691              : GEN     ellintegralbmodel(GEN e, GEN *pv);
     692              : GEN     ellnfembed(GEN E, long prec);
     693              : void    ellnfembed_free(GEN L);
     694              : GEN     ellpointnfembed(GEN E, GEN P, long prec);
     695              : void    ellprint(GEN e);
     696              : 
     697              : /* ellmanin.c */
     698              : 
     699              : long    ellmanintable(GEN E);
     700              : long    ellmanintable_heuristic(GEN E);
     701              : 
     702              : /* ellrank.c */
     703              : 
     704              : GEN     ell2selmer_basis(GEN ell, GEN *cb, long prec);
     705              : 
     706              : /* es.c */
     707              : 
     708              : void    killallfiles(void);
     709              : pariFILE* newfile(FILE *f, const char *name, int type);
     710              : int     popinfile(void);
     711              : pariFILE* try_pipe(const char *cmd, int flag);
     712              : 
     713              : /* F2m.c */
     714              : 
     715              : GEN     F2m_gauss_pivot(GEN x, long *rr);
     716              : GEN     F2m_gauss_sp(GEN a, GEN b);
     717              : GEN     F2m_invimage_i(GEN A, GEN B);
     718              : 
     719              : /* F2xqE.c */
     720              : 
     721              : GEN     ell_to_a4a6_F2xq(GEN E, GEN T);
     722              : 
     723              : /* Fle.c */
     724              : 
     725              : void    FleV_add_pre_inplace(GEN P, GEN Q, GEN a4, ulong p, ulong pi);
     726              : void    FleV_dbl_pre_inplace(GEN P, GEN a4, ulong p, ulong pi);
     727              : void    FleV_mulu_pre_inplace(GEN P, ulong n, GEN a4, ulong p, ulong pi);
     728              : void    FleV_sub_pre_inplace(GEN P, GEN Q, GEN a4, ulong p, ulong pi);
     729              : ulong   Flj_order_ufact(GEN P, ulong n, GEN F, ulong a4, ulong p, ulong pi);
     730              : 
     731              : /* Flv.c */
     732              : 
     733              : GEN     Flm_gauss_sp(GEN a, GEN b, ulong *detp, ulong p);
     734              : GEN     Flm_invimage_i(GEN A, GEN B, ulong p);
     735              : GEN     Flm_inv_sp(GEN a, ulong *detp, ulong p);
     736              : GEN     Flm_pivots(GEN x, ulong p, long *rr, long inplace);
     737              : 
     738              : /* Flxq_log.c */
     739              : 
     740              : GEN     Flxq_log_index(GEN a0, GEN b0, GEN m, GEN T0, ulong p);
     741              : int     Flxq_log_use_index(GEN m, GEN T0, ulong p);
     742              : 
     743              : /* FlxqE.c */
     744              : 
     745              : GEN     ell_to_a4a6_Flxq(GEN E, GEN T, ulong p);
     746              : GEN     ZpXQ_norm_pcyc(GEN x, GEN T, GEN q, GEN p);
     747              : long    zx_is_pcyc(GEN T);
     748              : 
     749              : /* FpE.c */
     750              : 
     751              : GEN     ell_to_a4a6_FpXQ(GEN E, GEN T, GEN p);
     752              : 
     753              : /* FpV.c */
     754              : 
     755              : GEN     FpMs_leftkernel_elt_col(GEN M, long nbcol, long nbrow, GEN p);
     756              : GEN     FpX_to_mod_raw(GEN z, GEN p);
     757              : 
     758              : /* FpX.c */
     759              : 
     760              : GEN     ZlXQXn_expint(GEN h, long e, GEN T, GEN p, ulong pp);
     761              : 
     762              : /* FpX_factor.c */
     763              : 
     764              : GEN     ddf_to_ddf2(GEN V);
     765              : long    ddf_to_nbfact(GEN D);
     766              : GEN     vddf_to_simplefact(GEN V, long d);
     767              : 
     768              : /* FpXQX_factor.c */
     769              : 
     770              : GEN     FpXQX_factor_Berlekamp(GEN x, GEN T, GEN p);
     771              : 
     772              : /* forprime.c*/
     773              : 
     774              : void    init_modular_big(forprime_t *S);
     775              : void    init_modular_small(forprime_t *S);
     776              : 
     777              : /* galconj.c */
     778              : 
     779              : GEN     galoiscosets(GEN O, GEN perm);
     780              : GEN     galoisinitfromaut(GEN T, GEN aut, ulong l);
     781              : GEN     matrixnorm(GEN M, long prec);
     782              : 
     783              : /* gen1.c */
     784              : 
     785              : GEN     gred_rfrac_simple(GEN n, GEN d);
     786              : GEN     sqr_ser_part(GEN x, long l1, long l2);
     787              : 
     788              : /* hash.c */
     789              : 
     790              : hashtable *hashstr_import_static(hashentry *e, ulong size);
     791              : 
     792              : /* hyperell.c */
     793              : 
     794              : GEN     ZlXQX_hyperellpadicfrobenius(GEN H, GEN T, ulong p, long n);
     795              : GEN     genus2_eulerfact(GEN P, GEN p, long ra, long rt);
     796              : GEN     genus2_eulerfact2(GEN PQ);
     797              : GEN     vecan_genus2(GEN an, long L);
     798              : 
     799              : /* intnum.c */
     800              : 
     801              : GEN     contfraceval_inv(GEN CF, GEN tinv, long nlim);
     802              : GEN     contfracinit_i(GEN M, long n);
     803              : 
     804              : /* lfunlarge.c */
     805              : 
     806              : /* FIXME: delete */
     807              : GEN     lerchzetalarge(GEN s, GEN a, GEN lam, long prec);
     808              : GEN     lfunloglambdalarge(GEN CHI, GEN s, long bitprec);
     809              : GEN     lfunlambdalarge(GEN CHI, GEN s, long bitprec);
     810              : GEN     lfunlarge(GEN CHI, GEN s, long bitprec);
     811              : GEN     zetahurwitzlarge(GEN s, GEN a, long prec);
     812              : 
     813              : /* mftrace.c */
     814              : 
     815              : void    pari_close_mf(void);
     816              : long    polishomogeneous(GEN P);
     817              : GEN     sertocol(GEN S);
     818              : GEN     mfrhopol(long n);
     819              : GEN     mfrhopol_u_eval(GEN Q, ulong t2);
     820              : GEN     mfrhopol_eval(GEN Q, GEN t2);
     821              : 
     822              : /* mt.c */
     823              : 
     824              : void mt_sigint(void);
     825              : void mt_err_recover(long er);
     826              : void mt_break_recover(void);
     827              : void mt_export_add(const char *str, GEN val);
     828              : void mt_export_del(const char *str);
     829              : void mt_init_stack(size_t s);
     830              : int  mt_is_thread(void);
     831              : void mt_thread_init(void);
     832              : 
     833              : /* nflist.c */
     834              : 
     835              : GEN     veccond_to_A5(GEN L, long s);
     836              : long    ceilsqrtdiv(GEN x, GEN y);
     837              : 
     838              : /* nflistQT.c */
     839              : 
     840              : GEN     nflistQT(long n, long k, long v);
     841              : 
     842              : /* prime.c */
     843              : 
     844              : long    BPSW_psp_nosmalldiv(GEN N);
     845              : int     MR_Jaeschke(GEN n);
     846              : long    Z_isanypower_nosmalldiv(GEN N, ulong cutoff, GEN *px);
     847              : 
     848              : /* perm.c */
     849              : 
     850              : long    cosets_perm_search(GEN C, GEN p);
     851              : GEN     perm_generate(GEN S, GEN H, long o);
     852              : long    perm_relorder(GEN p, GEN S);
     853              : GEN     vecperm_extendschreier(GEN C, GEN v, long n);
     854              : 
     855              : /* polclass.c */
     856              : 
     857              : GEN     polclass0(long D, long inv, long vx, GEN *db);
     858              : 
     859              : /* polmodular.c */
     860              : 
     861              : GEN     polmodular0_ZM(long L, long inv, GEN J, GEN Q, int compute_derivs, GEN *db);
     862              : GEN     Flm_Fl_polmodular_evalx(GEN phi, long L, ulong j, ulong p, ulong pi);
     863              : GEN     polmodular_db_init(long inv);
     864              : void    polmodular_db_clear(GEN db);
     865              : void    polmodular_db_add_level(GEN *db, long L, long inv);
     866              : void    polmodular_db_add_levels(GEN *db, long *levels, long k, long inv);
     867              : GEN     polmodular_db_for_inv(GEN db, long inv);
     868              : GEN     polmodular_db_getp(GEN fdb, long L, ulong p);
     869              : 
     870              : long    modinv_level(long inv);
     871              : long    modinv_degree(long *p1, long *p2, long inv);
     872              : long    modinv_ramified(long D, long inv, long *pN);
     873              : long    modinv_j_from_2double_eta(GEN F, long inv, ulong x0, ulong x1, ulong p, ulong pi);
     874              : GEN     double_eta_raw(long inv);
     875              : ulong   modfn_root(ulong j, norm_eqn_t ne, long inv);
     876              : long    modfn_unambiguous_root(ulong *r, long inv, ulong j0, norm_eqn_t ne, GEN jdb);
     877              : GEN     qfb_nform(long D, long n);
     878              : 
     879              : /* polarit3.c */
     880              : 
     881              : GEN     Flm_Frobenius_pow(GEN M, long d, GEN T, ulong p);
     882              : GEN     FpM_Frobenius_pow(GEN M, long d, GEN T, GEN p);
     883              : GEN     RgXQ_charpoly_i(GEN x, GEN T, long v);
     884              : ulong   ZX_ZXY_ResBound(GEN A, GEN B, GEN dB);
     885              : GEN     ffinit_Artin_Schreier(ulong p, long l);
     886              : GEN     ffinit_rand(GEN p, long n);
     887              : GEN     nf_direct_compositum(GEN nf, GEN A, GEN B);
     888              : GEN     nf_L2_bound(GEN nf, GEN den, GEN *pL);
     889              : 
     890              : /* Qfb.c */
     891              : 
     892              : GEN     qfb3_SL2_apply(GEN q, GEN M);
     893              : 
     894              : /* readline.c */
     895              : 
     896              : char**  pari_completion(pari_rl_interface *pari_rl, char *text, int START, int END);
     897              : char**  pari_completion_matches(pari_rl_interface *pari_rl, const char *s, long pos, long *wordpos);
     898              : 
     899              : /* subcyclo.c */
     900              : 
     901              : GEN     galoiscyclo(long n, long v);
     902              : long    subcyclo_nH(const char *fun, GEN N, GEN *psg);
     903              : GEN     znstar_bits(long n, GEN H);
     904              : long    znstar_conductor(GEN H);
     905              : long    znstar_conductor_bits(GEN bits);
     906              : GEN     znstar_cosets(long n, long phi_n, GEN H);
     907              : GEN     znstar_elts(long n, GEN H);
     908              : GEN     znstar_generate(long n, GEN V);
     909              : GEN     znstar_hnf(GEN Z, GEN M);
     910              : GEN     znstar_hnf_elts(GEN Z, GEN H);
     911              : GEN     znstar_hnf_generators(GEN Z, GEN M);
     912              : GEN     znstar_reduce_modulus(GEN H, long n);
     913              : GEN     znstar_small(GEN zn);
     914              : 
     915              : /* trans1.c */
     916              : 
     917              : struct abpq { GEN *a, *b, *p, *q; };
     918              : struct abpq_res { GEN P, Q, B, T; };
     919              : void    abpq_init(struct abpq *A, long n);
     920              : void    abpq_sum(struct abpq_res *r, long n1, long n2, struct abpq *A);
     921              : GEN     logagmcx(GEN q, long prec);
     922              : GEN     zellagmcx(GEN a0, GEN b0, GEN r, GEN t, long prec);
     923              : 
     924              : /* trans2.c */
     925              : 
     926              : GEN     trans_fix_arg(long *prec, GEN *s0, GEN *sig, GEN *tau, pari_sp *av, GEN *res);
     927              : 
     928              : /* trans3.c */
     929              : 
     930              : GEN     double_eta_quotient(GEN a, GEN w, GEN D, long p, long q, GEN pq, GEN sqrtD);
     931              : GEN     inv_szeta_euler(long n, long prec);
     932              : 
     933              : /* volcano.c */
     934              : 
     935              : long    j_level_in_volcano(GEN phi, ulong j, ulong p, ulong pi, long L, long depth);
     936              : ulong   ascend_volcano(GEN phi, ulong j, ulong p, ulong pi, long level, long L, long depth, long steps);
     937              : ulong   descend_volcano(GEN phi, ulong j, ulong p, ulong pi, long level, long L, long depth, long steps);
     938              : long    next_surface_nbr(ulong *nJ, GEN phi, long L, long h, ulong J, const ulong *pJ, ulong p, ulong pi);
     939              : GEN     enum_roots(ulong j, norm_eqn_t ne, GEN fdb, GEN G, GEN vshape);
     940              : 
     941              : ENDEXTERN
        

Generated by: LCOV version 2.0-1