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

Generated by: LCOV version 1.14