1 /* $Id: paripriv.h 8483 2007-03-29 08:58:00Z kb $ 2 3 Copyright (C) 2004 The PARI group. 4 5 This file is part of the PARI/GP package. 6 7 PARI/GP is free software; you can redistribute it and/or modify it under the 8 terms of the GNU General Public License as published by the Free Software 9 Foundation. It is distributed in the hope that it will be useful, but WITHOUT 10 ANY WARRANTY WHATSOEVER. 11 12 Check the License for details. You should have received a copy of it, along 13 with the package; see the file 'COPYING'. If not, write to the Free Software 14 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 15 16 BEGINEXTERN 17 18 /* for qsort */ 19 typedef int (*QSCOMP)(const void *, const void *); 20 21 /* swap */ 22 #define lswap(x,y) {long _z=x; x=y; y=_z;} 23 #define pswap(x,y) {GEN *_z=x; x=y; y=_z;} 24 #define swap(x,y) {GEN _z=x; x=y; y=_z;} 25 #define dswap(x,y) { double _t=x; x=y; y=_t; } 26 #define pdswap(x,y) { double* _t=x; x=y; y=_t; } 27 #define swapspec(x,y, nx,ny) {swap(x,y); lswap(nx,ny);} 28 29 /* */ 30 #define both_odd(x,y) ((x)&(y)&1) 31 32 /* unused */ 33 GEN ellheightoo(GEN e, GEN z, long prec); 34 void ellprint(GEN e); 35 GEN mpinv(GEN b); 36 37 /* generic */ 38 GEN arith_proto(long f(GEN), GEN x, int do_error); 39 GEN arith_proto2(long f(GEN,GEN), GEN x, GEN n); 40 GEN arith_proto2gs(long f(GEN,long), GEN x, long y); 41 GEN gassoc_proto(GEN f(GEN,GEN),GEN,GEN); 42 GEN garith_proto(GEN f(GEN), GEN x, int do_error); 43 GEN garith_proto2gs(GEN f(GEN,long), GEN x, long y); 44 GEN trans_fix_arg(long *prec, GEN *s0, GEN *sig, pari_sp *av, GEN *res); 45 GEN transc(GEN (*f) (GEN, long), GEN x, long prec); 46 GEN sort_factor(GEN y, int (*cmp)(GEN,GEN)); 47 GEN sort_factor_gen(GEN y, int (*cmp)(GEN,GEN)); 48 GEN sort_factor_gen_aux(GEN y, void *data, int (*cmp)(void *,GEN,GEN)); 49 GEN sort_vecpol(GEN a, int (*cmp)(GEN,GEN)); 50 51 /* loops */ 52 GEN incloop(GEN a); 53 GEN resetloop(GEN a, GEN b); 54 GEN setloop(GEN a); 55 56 /* multiprecision */ 57 GEN icopy_spec(GEN x, long nx); 58 GEN addrex01(GEN x); 59 GEN addumului(ulong a, ulong b, GEN Y); 60 void affr_fixlg(GEN z, GEN y); 61 GEN cxnorm(GEN x); 62 int lgcdii(ulong* d, ulong* d1, ulong* u, ulong* u1, ulong* v, ulong* v1, ulong vmax); 63 ulong rgcduu(ulong d, ulong d1, ulong vmax, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s); 64 ulong xgcduu(ulong d, ulong d1, int f, ulong* v, ulong* v1, long *s); 65 GEN quadnorm(GEN x); 66 ulong xxgcduu(ulong d, ulong d1, int f, ulong* u, ulong* u1, ulong* v, ulong* v1, long *s); 67 GEN divgsns(GEN x, long i); 68 GEN divrsns(GEN x, long i); 69 GEN init_remiimul(GEN M); 70 GEN ishiftr_lg(GEN x, long lx, long n); 71 GEN logagmcx(GEN q, long prec); 72 GEN muliispec(GEN x, GEN y, long nx, long ny); 73 GEN padic_to_Fp(GEN x, GEN Y); 74 ulong padic_to_Fl(GEN x, ulong p); 75 GEN red_montgomery(GEN T, GEN N, ulong inv); 76 GEN remiimul(GEN x, GEN sy); 77 GEN sqrispec(GEN x, long nx); 78 GEN subrex01(GEN x); 79 GEN mulcxI(GEN x); 80 GEN mulcxmI(GEN x); 81 82 int approx_0(GEN x, GEN y); 83 GEN bernfrac_using_zeta(long n); 84 int OK_bern(long nb, long prec); 85 86 /* FIXME: adapt/use mpn_[lr]shift instead */ 87 #define shift_left(z2,z1,imin,imax,f, sh) {\ 88 register const ulong _m = BITS_IN_LONG - (sh);\ 89 shift_left2((z2),(z1),(imin),(imax),(f),(sh),(_m)); } 90 91 #define shift_right(z2,z1,imin,imax,f, sh) {\ 92 register const ulong _m = BITS_IN_LONG - (sh);\ 93 shift_right2((z2),(z1),(imin),(imax),(f),(sh),(_m)); } 94 95 /* powers */ 96 #define sqrs(b) mulss((b),(b)) 97 #define sqru(b) muluu((b),(b)) 98 GEN rpowuu(ulong a, ulong n, long prec); 99 GEN powrshalf(GEN x, long s); 100 GEN powrfrac(GEN x, long n, long d); 101 ulong u_pow10(int n); 102 103 /* floats */ 104 double dabs(double s, double t); 105 long dblexpo(double x); 106 ulong dblmantissa(double x); 107 void dcxlog(double s, double t, double *a, double *b); 108 double dnorm(double s, double t); 109 double dbllog2(GEN z); 110 ulong usqrtsafe(ulong a); 111 112 /* "abs" routines for t_REAL ( disregard sign ) */ 113 int absrnz_egal1(GEN x); 114 int absrnz_egal2n(GEN x); 115 GEN exp1r_abs(GEN x); 116 GEN logagmr_abs(GEN q); 117 GEN logr_abs(GEN x); 118 GEN sqrtr_abs(GEN x); 119 120 /* hnf */ 121 GEN gauss_triangle_i(GEN A, GEN B,GEN t); 122 GEN hnfadd(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC); 123 GEN hnfadd_i(GEN m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,GEN extramat,GEN extraC); 124 GEN hnf_gauss(GEN A, GEN B); 125 GEN hnf_invimage(GEN A, GEN b); 126 GEN hnfmerge_get_1(GEN A, GEN B); 127 GEN hnfperm_i(GEN A, GEN *ptU, GEN *ptperm); 128 GEN hnfspec_i(long** m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0); 129 GEN hnfspec(long** m,GEN p,GEN* ptdep,GEN* ptA,GEN* ptC,long k0); 130 GEN mathnfspec(GEN x, GEN *ptperm, GEN *ptdep, GEN *ptB, GEN *ptC); 131 132 /* LLL */ 133 GEN lllint_fp_ip(GEN x, long D); 134 GEN lllfp_marked(long *M, GEN x, long D, long flag, long prec, int gram); 135 GEN lllint_marked(long *M, GEN x, long D, int g, GEN *h, GEN *f, GEN *B); 136 GEN LLL_check_progress(GEN Bnorm, long n0, GEN m, int final, long *ti_LLL); 137 GEN extendedgcd(GEN A); 138 GEN sqred1intern(GEN a); 139 GEN lllgramintern(GEN x, long alpha, long flag, long prec); 140 GEN lllintern(GEN x, long D, long flag, long prec); 141 142 /* miscellaneous linear algebra */ 143 GEN diagonal_i(GEN x); 144 GEN F2V_red_ip(GEN v); 145 GEN gauss_realimag(GEN x, GEN y); 146 GEN imagecomplspec(GEN x, long *nlze); 147 GEN R_from_QR(GEN x, long prec); 148 void rowselect_p(GEN A, GEN B, GEN p, long init); 149 GEN split_realimag(GEN x, long r1, long r2); 150 GEN sqred1_from_QR(GEN x, long prec); 151 GEN supnorm(GEN L, long prec); 152 GEN znstar_hnf_elts(GEN Z, GEN H); 153 GEN ZV_lincomb(GEN u, GEN v, GEN X, GEN Y); 154 GEN vec_setconst(GEN v, GEN x); 155 156 GEN GS_norms(GEN B, long prec); 157 GEN dim1proj(GEN prh); 158 GEN detcyc(GEN cyc, long *L); 159 GEN close_modinvertible(GEN x, GEN y); 160 GEN colreducemodHNF(GEN x, GEN y, GEN *Q); 161 GEN col_to_ff(GEN x, long v); 162 163 /* famat */ 164 GEN factorback_i(GEN fa, GEN e, GEN nf, int red); 165 GEN factorbackprime(GEN nf, GEN L, GEN e); 166 GEN famat_inv(GEN f); 167 GEN famat_makecoprime(GEN nf, GEN g, GEN e, GEN pr, GEN prk, GEN EX); 168 GEN famat_mul(GEN f, GEN g); 169 GEN famat_pow(GEN f, GEN n); 170 GEN famat_reduce(GEN fa); 171 GEN famat_to_arch(GEN nf, GEN fa, long prec); 172 GEN famat_to_nf_modideal_coprime(GEN nf, GEN g, GEN e, GEN id, GEN EX); 173 GEN famat_to_nf_modidele(GEN nf, GEN g, GEN e, GEN bid); 174 GEN merge_factor_i(GEN f, GEN g); 175 GEN to_famat_all(GEN x, GEN y); 176 GEN to_famat(GEN g, GEN e); 177 GEN trivfact(void); 178 179 /* integer factorization / discrete log */ 180 int BSW_isprime(GEN x); 181 int BSW_isprime_small(GEN x); 182 GEN coprime_part(GEN x, GEN f); 183 GEN Z_factor_limit(GEN n, GEN limit); 184 GEN Fp_PHlog(GEN a, GEN g, GEN p, GEN ord); 185 GEN Fp_shanks(GEN x,GEN g0,GEN p, GEN q); 186 ulong is_kth_power(GEN x, ulong p, GEN *pt, byteptr d); 187 long ifac_decomp_break(GEN n, long (*B)(GEN,GEN,GEN,GEN), GEN s, long hint); 188 long ifac_moebius(GEN n, long hint); 189 long ifac_issquarefree(GEN n, long hint); 190 long ifac_omega(GEN n, long hint); 191 long ifac_bigomega(GEN n, long hint); 192 GEN ifac_totient(GEN n, long hint); 193 GEN ifac_numdiv(GEN n, long hint); 194 GEN ifac_sumdiv(GEN n, long hint); 195 GEN ifac_sumdivk(GEN n, long k, long hint); 196 int miller(GEN n, long k); 197 GEN mpqs(GEN N); 198 ulong ugcd(ulong x, ulong y); 199 long Z_lvalrem_stop(GEN n, ulong p, int *stop); 200 201 /* quadratic forms, quadratic numbers */ 202 long cornacchia(GEN d, GEN p, GEN *px, GEN *py); 203 long cornacchia2(GEN d, GEN p, GEN *px, GEN *py); 204 GEN primeform_u(GEN x, ulong p); 205 GEN qf_disc(GEN x); 206 void qfb_comp(GEN z,GEN x,GEN y); 207 GEN qfr_to_qfr5(GEN x, long prec); 208 GEN qfr3_comp(GEN x, GEN y, GEN D, GEN isqrtD); 209 GEN qfr3_pow(GEN x, GEN n, GEN D, GEN isqrtD); 210 GEN qfr3_red(GEN x, GEN D, GEN isqrtD); 211 GEN qfr3_rho(GEN x, GEN D, GEN isqrtD); 212 GEN qfr3_to_qfr(GEN x, GEN z); 213 GEN qfr5_dist(GEN e, GEN d, long prec); 214 GEN qfr5_comp(GEN x, GEN y, GEN D, GEN sqrtD, GEN isqrtD); 215 GEN qfr5_pow(GEN x, GEN n, GEN D, GEN sqrtD, GEN isqrtD); 216 GEN qfr5_red(GEN x, GEN D, GEN sqrtD, GEN isqrtD); 217 GEN qfr5_rho(GEN x, GEN D, GEN sqrtD, GEN isqrtD); 218 GEN qfr_pow(GEN x, GEN n); 219 GEN qfr_unit(GEN x); 220 GEN qfi_unit(GEN x); 221 GEN quad_polmod_conj(GEN x, GEN y); 222 GEN quad_polmod_norm(GEN x, GEN y); 223 224 /* Polynomials */ 225 /* a) Arithmetic/conversions */ 226 GEN addmulXn(GEN x, GEN y, long d); 227 GEN addshiftpol(GEN x, GEN y, long d); 228 GEN lift_if_rational(GEN x); 229 GEN monomial(GEN a, long degpol, long v); 230 GEN monomialcopy(GEN a, long degpol, long v); 231 GEN mulmat_pol(GEN A, GEN x); 232 long polegal_spec(GEN x, GEN y); 233 GEN polrecip_i(GEN x); 234 GEN pol_to_monic(GEN pol, GEN *lead); 235 GEN revpol(GEN x); 236 GEN ser2pol_i(GEN x, long lx); 237 GEN ser2rfrac_i(GEN x); 238 GEN shiftpol_i(GEN x, long v); 239 GEN swap_vars(GEN b0, long v); 240 GEN translate_pol(GEN P, GEN c); 241 242 /* b) Modular */ 243 GEN bezout_lift_fact(GEN T, GEN Tmod, GEN p, long e); 244 GEN caractducos(GEN p, GEN x, long v); 245 GEN FpXQX_from_Kronecker(GEN z, GEN pol, GEN p); 246 GEN FpX_quad_root(GEN x, GEN p, int unknown); 247 long FpX_split_Berlekamp(GEN *t, GEN pp); 248 GEN FqX_split_all(GEN z, GEN T, GEN p); 249 long FqX_split_by_degree(GEN *pz, GEN u, GEN q, GEN T, GEN p); 250 long FqX_split_deg1(GEN *pz, GEN u, GEN q, GEN T, GEN p); 251 GEN FqX_split_roots(GEN z, GEN T, GEN p, GEN pol); 252 GEN polratlift(GEN P, GEN mod, GEN amax, GEN bmax, GEN denom); 253 GEN polsym_gen(GEN P, GEN y0, long n, GEN T, GEN N); 254 GEN ZX_caract_sqf(GEN A, GEN B, long *lambda, long v); 255 GEN ZX_disc_all(GEN,ulong); 256 long ZX_get_prec(GEN x); 257 GEN ZX_resultant_all(GEN A, GEN B, GEN dB, ulong bound); 258 GEN ZY_ZXY_resultant_all(GEN A, GEN B0, long *lambda, GEN *LPRS); 259 GEN ZY_ZXY_rnfequation(GEN A, GEN B0, long *lambda); 260 GEN RgXQ_u_pow(GEN x, ulong n, GEN T); 261 GEN RgX_gcd_simple(GEN x, GEN y); 262 GEN RgX_extgcd_simple(GEN a, GEN b, GEN *pu, GEN *pv); 263 GEN RgXQ_minpoly_naive(GEN y, GEN P); 264 GEN lift_intern0(GEN x,long v); 265 #define lift_intern(x) (lift_intern0((x),-1)) 266 267 /* b') Chinese Remainder Theorem */ 268 GEN ZM_init_CRT(GEN Hp, ulong p); 269 int ZM_incremental_CRT(GEN H, GEN Hp, GEN q, GEN qp, ulong p); 270 271 /* c) factorization */ 272 double cauchy_bound(GEN p); 273 GEN chk_factors_get(GEN lt, GEN famod, GEN c, GEN T, GEN N); 274 int cmbf_precs(GEN q, GEN A, GEN B, long *a, long *b, GEN *qa, GEN *qb); 275 GEN ZX_DDF(GEN x, long hint); 276 GEN fact_from_DDF(GEN fa, GEN e, long n); 277 GEN initgaloisborne(GEN T, GEN dn, long prec, GEN *pL, GEN *pprep, GEN *pdis); 278 GEN logmax_modulus_bound(GEN p); 279 GEN polint_i(GEN xa, GEN ya, GEN x, long n, GEN *ptdy); 280 GEN quicktrace(GEN x, GEN sym); 281 GEN roots_to_pol_intern(GEN L, GEN a, long v, int plus); 282 GEN roots_to_pol_r1r2(GEN a, long r1, long v); 283 GEN special_pivot(GEN x); 284 GEN vandermondeinversemod(GEN L, GEN T, GEN den, GEN mod); 285 GEN ZX_monic_factorpadic(GEN f, GEN p, long prec); 286 287 #include "parinf.h" 288 289 /* Allocation / gerepile */ 290 void debug_stack(void); 291 void fill_stack(void); 292 void init_dalloc(); 293 double *dalloc(size_t n); 294 void gerepilecoeffs2(pari_sp av, GEN x, int n, GEN y, int o); 295 void minim_alloc(long n, double ***q, GEN *x, double **y, double **z, double **v); 296 int pop_entree_bloc(entree *ep, long loc); 297 int pop_val_if_newer(entree *ep, long loc); 298 void gclone_refc(GEN x); 299 void free_ep_args(entree *ep); 300 301 /* naive grow-arrays */ 302 typedef struct { 303 void **v; 304 long len; /* len cells allocated */ 305 long n; /* first n cells occupied */ 306 } __pari_growarray; 307 typedef __pari_growarray growarray[1]; 308 309 growarray *pari_get_modules(); 310 growarray *pari_get_oldmodules(); 311 void grow_append(growarray A, void *e); 312 void grow_copy(growarray A, growarray B); 313 void grow_init(growarray A); 314 void grow_kill(growarray A); 315 316 /* Interfaces (GP, etc.) */ 317 void errcontext(char *msg, char *s, char *entry); 318 GEN geni(void); 319 void* get_stack(double fraction, long min); 320 GEN gpreadseq(char *c, int strict); 321 void initout(int initerr); 322 void init80col(long n); 323 char* itostr(GEN x, int minus); 324 void kill_from_hashlist(entree *ep, long n); 325 void member_err(char *s); 326 int pari_kernel_init(void); 327 int pari_last_was_newline(void); 328 void pari_set_last_newline(int last); 329 void print_functions_hash(const char *s); 330 void print_user_fun(entree *ep); 331 void print_user_member(entree *ep); 332 void print_all_user_fun(void); 333 void print_all_user_member(void); 334 void pop_val(entree *ep); 335 void push_val(entree *ep, GEN a); 336 GEN readbin(const char *name, FILE *f, int *vector); 337 void recover(int flag); 338 int term_height(void); 339 int term_width(void); 340 void var_make_safe(); 341 void whatnow_new_syntax(char *f, long n); 342 343 /* defaults */ 344 #define is_default(s) setdefault((s),"",d_EXISTS) == gen_1 345 enum { d_SILENT, d_ACKNOWLEDGE, d_INITRC, d_RETURN, d_EXISTS }; 346 extern ulong precreal; 347 348 GEN sd_TeXstyle(const char *v, long flag); 349 GEN sd_colors(char *v, long flag); 350 GEN sd_compatible(const char *v, long flag); 351 GEN sd_datadir(char *v, long flag); 352 GEN sd_debug(const char *v, long flag); 353 GEN sd_debugfiles(const char *v, long flag); 354 GEN sd_debugmem(const char *v, long flag); 355 GEN sd_echo(const char *v, long flag); 356 GEN sd_factor_add_primes(char *v, long flag); 357 GEN sd_filename(const char *v, long flag, char *s, char **f); 358 GEN sd_format(const char *v, long flag); 359 GEN sd_help(char *v, long flag); 360 GEN sd_histsize(const char *v, long flag); 361 GEN sd_lines(const char *v, long flag); 362 GEN sd_log(const char *v, long flag); 363 GEN sd_logfile(const char *v, long flag); 364 GEN sd_new_galois_format(char *v, long flag); 365 GEN sd_output(const char *v, long flag); 366 GEN sd_parisize(const char *v, long flag); 367 GEN sd_path(char *v, long flag); 368 GEN sd_prettyprinter(char *v, long flag); 369 GEN sd_primelimit(const char *v, long flag); 370 GEN sd_prompt(const char *v, long flag); 371 GEN sd_prompt_cont(const char *v, long flag); 372 GEN sd_psfile(const char *v, long flag); 373 GEN sd_realprecision(const char *v, long flag); 374 GEN sd_rl(const char *v, long flag); 375 GEN sd_secure(const char *v, long flag); 376 GEN sd_seriesprecision(const char *v, long flag); 377 GEN sd_simplify(const char *v, long flag); 378 GEN sd_strictmatch(const char *v, long flag); 379 GEN sd_timer(const char *v, long flag); 380 GEN setdefault(const char *s, const char *v, long flag); 381 382 /* history */ 383 typedef struct { 384 GEN *res; /* array of previous results, FIFO */ 385 size_t size; /* # res */ 386 ulong total; /* # of results computed since big bang */ 387 } gp_hist; 388 389 /* prettyprinter */ 390 typedef struct { 391 pariFILE *file; 392 char *cmd; 393 } gp_pp; 394 395 /* path */ 396 typedef struct { 397 char *PATH; 398 char **dirs; 399 } gp_path; 400 401 /* for output */ 402 typedef struct { 403 char format; /* e,f,g */ 404 long fieldw; /* 0 (ignored) or field width */ 405 long sigd; /* -1 (all) or number of significant digits printed */ 406 int sp; /* 0 = suppress whitespace from output */ 407 int prettyp; /* output style: raw, prettyprint, etc */ 408 int TeXstyle; 409 } pariout_t; 410 411 char *GENtostr0(GEN x, pariout_t *T, void (*do_out)(GEN, pariout_t*)); 412 void lim_lines_output(GEN z, pariout_t *fmt, long n, long max); 413 void gen_output(GEN x, pariout_t *T); 414 415 /* GP_DATA */ 416 typedef struct { 417 ulong primelimit; 418 jmp_buf env; 419 gp_hist *hist; 420 gp_pp *pp; 421 gp_path *path; 422 pariout_t *fmt; 423 ulong flags, lim_lines; 424 char *help, *prompt, *prompt_cont; 425 pari_timer *T; 426 } gp_data; 427 /* GP_DATA->flags */ 428 enum { QUIET=1, TEST=2, SIMPLIFY=4, CHRONO=8, ECHO=16, STRICTMATCH=32, 429 USE_READLINE=64, SECURE=128, EMACS=256, TEXMACS=512}; 430 431 extern gp_data *GP_DATA; 432 433 typedef struct Buffer { 434 char *buf; 435 ulong len; 436 jmp_buf env; 437 } Buffer; 438 Buffer *new_buffer(void); 439 void delete_buffer(Buffer *b); 440 void fix_buffer(Buffer *b, long newlbuf); 441 442 typedef struct { 443 char *s, *t, *end; /* source, target, last char read */ 444 int in_string, in_comment, more_input, wait_for_brace, downcase; 445 Buffer *buf; 446 } filtre_t; 447 void init_filtre(filtre_t *F, Buffer *buf); 448 char *filtre(char *s, int flag); 449 void check_filtre(filtre_t *F); 450 451 gp_data *default_gp_data(void); 452 GEN gp_history(gp_hist *H, long p, char *old, char *entry); 453 GEN set_hist_entry(gp_hist *H, GEN x); 454 455 void delete_dirs(gp_path *p); 456 void gp_expand_path(gp_path *p); 457 const char *pari_default_path(); 458 char *expand_prompt(char *prompt, filtre_t *F); 459 460 typedef struct input_method { 461 /* mandatory */ 462 char * (*fgets)(char *,int,FILE*); 463 char * (*getline)(char**, int f, struct input_method*, filtre_t *F); 464 int free; /* boolean: must we free the output of getline() ? */ 465 /* for interactive methods */ 466 char *prompt, *prompt_cont; 467 /* for non-interactive methods */ 468 FILE *file; 469 } input_method; 470 471 int input_loop(filtre_t *F, input_method *IM); 472 char *file_input(char **s0, int junk, input_method *IM, filtre_t *F); 473 474 /* By files */ 475 476 /* Flx.c */ 477 478 GEN FlxX_recipspec(GEN x, long l, long n, long vs); 479 GEN FlxX_sub(GEN x, GEN y, ulong p); 480 GEN FlxX_subspec(GEN x, GEN y, ulong p, long lx, long ly); 481 GEN FlxX_swap(GEN x, long n, long ws); 482 GEN FlxX_to_Kronecker(GEN P, GEN Q); 483 GEN FlxX_to_Kronecker_spec(GEN P, long lp, GEN Q); 484 GEN Flx_addshift(GEN x, GEN y, ulong p, long d); 485 GEN Flx_addspec(GEN x, GEN y, ulong p, long lx, long ly); 486 GEN Flx_even_odd_comb(GEN P, ulong u, ulong v, ulong p); 487 GEN Flx_mulspec(GEN a, GEN b, ulong p, long na, long nb); 488 GEN Flx_negspec(GEN x, ulong p, long l); 489 GEN Flx_recipspec(GEN x, long l, long n); 490 GEN Flx_sqrspec(GEN a, ulong p, long na); 491 GEN Flx_subspec(GEN x, GEN y, ulong p, long lx, long ly); 492 GEN FlxqX_from_Kronecker(GEN z, GEN T, ulong p); 493 GEN FlxqX_invmontgomery(GEN T, GEN Q, ulong p); 494 GEN FlxqX_mulspec(GEN x, GEN y, GEN T, ulong p, long lx, long ly); 495 GEN FlxqX_rem_montgomery(GEN x, GEN mg, GEN T, GEN Q, ulong p); 496 497 /* Qfb.c */ 498 499 GEN powimagraw(GEN x, long n); 500 GEN redimagsl2(GEN q, GEN *U); 501 GEN redrealsl2(GEN V); 502 GEN redrealsl2step(GEN A); 503 GEN sqcompimagraw(GEN x); 504 GEN sqcomprealraw(GEN x); 505 506 /* RgX.c */ 507 508 GEN RgXQ_matrix_pow(GEN y, long n, long m, GEN P); 509 GEN RgX_copy_spec(GEN x, long nx); 510 GEN zx_copy_spec(GEN x, long nx); 511 512 /* alglin1.c */ 513 514 GEN Flm_Fl_mul_inplace(GEN y, ulong x, ulong p); 515 GEN gauss_get_col(GEN a, GEN b, GEN p, long li); 516 GEN gauss_intern(GEN a, GEN b); 517 GEN matid_intern(long n,GEN myun,GEN myzero); 518 void vecselect_p(GEN A, GEN B, GEN p, long init, long lB); 519 520 /* alglin2.c */ 521 522 GEN Frobeniusform(GEN V, long n); 523 GEN ZM_copy(GEN x); 524 GEN ZV_Z_mul(GEN X, GEN c); 525 GEN ZV_copy(GEN x); 526 void ZV_neg_ip(GEN M); 527 GEN hnf0(GEN A, int remove); 528 GEN hnf_special(GEN x, long remove); 529 GEN hnfall0(GEN A, long remove); 530 531 /* anal.c */ 532 533 long unsigned int parse_option_string(char *arg, char *tmplate, long flag, char **failure, char **failure_arg); 534 GEN readexpr(char *t); 535 536 /* aprcl.c */ 537 538 GEN aprcl(GEN N); 539 540 /* arith1.c */ 541 542 GEN Z_chinese_coprime(GEN a, GEN b, GEN A, GEN B, GEN C); 543 GEN bestappr_mod(GEN x, GEN A, GEN B); 544 long hilii(GEN x, GEN y, GEN p); 545 long krouu_s(ulong x, ulong y, long s); 546 547 /* arith2.c */ 548 549 GEN ibitand(GEN x, GEN y); 550 GEN ibitnegimply(GEN x, GEN y); 551 GEN ibitor(GEN x, GEN y); 552 GEN ibitxor(GEN x, GEN y); 553 byteptr initprimes0(ulong maxnum, long *lenp, ulong *lastp); 554 long set_optimize(long what, GEN g); 555 556 /* base1.c */ 557 558 void nfbasic_init(GEN x, long flag, GEN fa, nfbasic_t *T); 559 GEN nffromhnfbasis(GEN nf, GEN x); 560 GEN nftohnfbasis(GEN nf, GEN x); 561 GEN polgaloisnames(long a, long b); 562 GEN primitive_pol_to_monic(GEN pol, GEN *ptlead); 563 564 /* base2.c */ 565 566 long FpX_val(GEN x0, GEN t, GEN p, GEN *py); 567 GEN fast_respm(GEN f, GEN g, GEN p, long M); 568 GEN gen_if_principal(GEN bnf, GEN x); 569 int nfissquarefree(GEN nf, GEN x); 570 GEN nfreducemodpr_i(GEN x, GEN prh); 571 GEN polsymmodp(GEN g, GEN p); 572 GEN respm(GEN x, GEN y, GEN pm); 573 GEN rnfdet0(GEN nf, GEN x, GEN y); 574 575 /* base3.c */ 576 577 GEN FpXQ_gener(GEN T, GEN p); 578 void check_nfelt(GEN x, GEN *den); 579 GEN ff_PHlog(GEN a, GEN g, GEN T, GEN p); 580 GEN nf_PHlog(GEN nf, GEN a, GEN g, GEN pr); 581 582 /* base4.c */ 583 584 GEN arch_inv(GEN x); 585 GEN arch_pow(GEN x, GEN n); 586 void check_listpr(GEN x); 587 GEN factor_norm(GEN x); 588 GEN famat_to_nf(GEN nf, GEN f); 589 long val_norm(GEN x, GEN p, long *vz); 590 591 /* base5.c */ 592 593 GEN check_and_build_nfabs(GEN rnf); 594 GEN check_and_build_norms(GEN rnf); 595 GEN checkrnfeq(GEN x); 596 GEN hnfcenter_ip(GEN M); 597 598 /* bibli1.c */ 599 600 GEN gscal(GEN x, GEN y); 601 GEN lll_scaled(long MARKED, GEN X0, long D); 602 GEN lllall(GEN x, long D, int gram, long flag); 603 GEN lllintpartialall(GEN m, long flag); 604 GEN plindep(GEN x); 605 GEN pslq(GEN x); 606 GEN pslqL2(GEN x); 607 GEN sqscal(GEN x); 608 609 /* bibli2.c */ 610 611 long ZV_search(GEN x, GEN y); 612 GEN ZV_sort_uniq(GEN L); 613 GEN gen_vecsort(GEN x, GEN k, long flag); 614 615 /* buch1.c */ 616 617 GEN buchquad(GEN D, double cbach, double cbach2, long RELSUP, long prec); 618 GEN form_to_ideal(GEN x); 619 GEN getallforms(GEN D, long *pth, GEN *ptz); 620 621 /* buch2.c */ 622 623 GEN check_and_build_matal(GEN bnf); 624 GEN extract_full_lattice(GEN x); 625 GEN init_red_mod_units(GEN bnf, long prec); 626 GEN isprincipalarch(GEN bnf, GEN col, GEN kNx, GEN e, GEN dx, long *pe); 627 GEN red_mod_units(GEN col, GEN z, long prec); 628 int trunc_error(GEN x); 629 630 /* buch3.c */ 631 632 GEN minkowski_bound(GEN D, long N, long r2, long prec); 633 634 /* elliptic.c */ 635 636 GEN CM_CardEFp(GEN E, GEN p); 637 GEN CM_ellap(GEN E, GEN p); 638 GEN apell1(GEN e, GEN p); 639 void checkpt(GEN z); 640 GEN multi_invmod(GEN x, GEN p); 641 GEN ratroot(GEN p); 642 GEN weipell0(GEN e, long prec, long PREC); 643 644 /* es.c */ 645 646 GEN Str0(GEN g, long flag); 647 void bruti(GEN g, pariout_t *T, int addsign); 648 const char * eng_ord(long i); 649 char * env_ok(char *s); 650 void matbruti(GEN g, pariout_t *T); 651 int pari_is_dir(char *name); 652 GEN readobj(FILE *f, int *ptc); 653 void sori(GEN g, pariout_t *T); 654 void texi(GEN g, pariout_t *T, int addsign); 655 void writeGEN(GEN x, FILE *f); 656 void writenamedGEN(GEN x, char *s, FILE *f); 657 658 /* galconj.c */ 659 660 GEN fixedfieldfactmod(GEN Sp, GEN p, GEN Tmod); 661 GEN fixedfieldfactor(GEN L, GEN O, GEN perm, GEN M, GEN den, GEN mod, long x, long y); 662 GEN fixedfieldinclusion(GEN O, GEN PL); 663 GEN fixedfieldorbits(GEN O, GEN L); 664 GEN fixedfieldsympol(GEN O, GEN mod, GEN l, GEN p, long v); 665 GEN galoisconj2pol(GEN x, long nbmax, long prec); 666 GEN galoiscosets(GEN O, GEN perm); 667 long intheadlong(GEN x, GEN mod); 668 long isomborne(GEN P, GEN den, GEN p); 669 GEN listznstarelts(long m, long p); 670 GEN matheadlong(GEN W, GEN mod); 671 GEN matrixnorm(GEN M, long prec); 672 GEN monomorphismlift(GEN P, GEN S, GEN Q, GEN p, long e); 673 long polheadlong(GEN P, long n, GEN mod); 674 GEN sympol_aut_evalmod(GEN sym, long g, GEN sigma, GEN Tp, GEN p); 675 GEN sympol_eval(GEN v, GEN NS); 676 GEN vandermondeinverseprep(GEN L); 677 678 /* galois.c */ 679 680 GEN partitions(long n); 681 GEN polgaloisnamesbig(long n, long k); 682 683 /* gen1.c */ 684 685 int ff_poltype(GEN *x, GEN *p, GEN *pol); 686 GEN gred_frac2(GEN x1, GEN x2); 687 GEN gred_rfrac2(GEN x1, GEN x2); 688 GEN gred_rfrac_simple(GEN n, GEN d); 689 690 /* gen2.c */ 691 692 void gopsg2z(GEN (*f) (GEN, GEN), long s, GEN y, GEN z); 693 694 /* gen3.c */ 695 696 GEN gsubst_expr(GEN pol, GEN from, GEN to); 697 GEN inv_ser(GEN b); 698 GEN mul_real(GEN x, GEN y); 699 GEN poltoser(GEN x, long v, long prec); 700 GEN qfbeval(GEN q, GEN x, GEN y); 701 GEN rfractoser(GEN x, long v, long prec); 702 703 /* groupid.c */ 704 705 long group_ident_i(GEN G, GEN S); 706 long group_ident_trans(GEN G, GEN S); 707 long groupelts_sumorders(GEN S); 708 GEN vecgroup_idxlist(GEN L, long order); 709 long vecgroup_sumorders(GEN L); 710 711 /* ifactor1.c */ 712 713 GEN ellfacteur(GEN n, int insist); 714 long ifac_decomp(GEN n, long hint); 715 GEN ifac_primary_factor(GEN *partial, long *exponent); 716 void ifac_realloc(GEN *partial, GEN *where, long new_lg); 717 GEN ifac_start(GEN n, long moebius, long hint); 718 GEN pollardbrent(GEN n); 719 ulong snextpr(ulong p, byteptr *d, long *rcn, long *q, long k); 720 GEN squfof(GEN n); 721 722 /* init.c */ 723 724 void err_recover(long numerr); 725 GEN gcopy_av(GEN x, GEN *AVMA); 726 int ok_gerepileupto(GEN x); 727 void pari_init_defaults(void); 728 729 /* nffactor.c */ 730 731 long ZM_get_prec(GEN x); 732 int nfissplit(GEN nf, GEN x); 733 734 /* perm.c */ 735 736 long cosets_perm_search(GEN C, GEN p); 737 GEN group_export_GAP(GEN G); 738 GEN group_export_MAGMA(GEN G); 739 GEN perm_conj(GEN s, GEN t); 740 GEN perm_generate(GEN S, GEN H, long o); 741 long perm_relorder(GEN p, GEN S); 742 GEN perm_to_GAP(GEN p); 743 GEN quotient_subgroup_lift(GEN C, GEN H, GEN S); 744 745 /* polarit1.c */ 746 747 GEN Flx_Berlekamp_ker(GEN u, ulong p); 748 GEN FpX_Berlekamp_ker(GEN u, GEN p); 749 GEN FpX_factcantor(GEN f, GEN pp, long flag); 750 GEN FqX_Berlekamp_ker(GEN u, GEN T, GEN q, GEN p); 751 GEN FqX_rand(long d1, long v, GEN T, GEN p); 752 long FqX_split_Berlekamp(GEN *t, GEN q, GEN T, GEN p); 753 GEN Zp_appr(GEN f, GEN a); 754 int cmp_padic(GEN x, GEN y); 755 GEN factcantor0(GEN f, GEN pp, long flag); 756 GEN zrhqr(GEN a, long prec); 757 758 /* polarit2.c */ 759 760 GEN DDF_roots(GEN pol, GEN polp, GEN p); 761 GEN Q_divmuli_to_int(GEN x, GEN d, GEN n); 762 long checkdeflate(GEN x); 763 void factor_quad(GEN x, GEN res, long *ptcnt); 764 GEN factorback_aux(GEN fa, GEN e, GEN (*_mul) (void *, GEN, GEN), GEN (*_pow) (void *, GEN, GEN), void *data); 765 GEN matratlift(GEN M, GEN mod, GEN amax, GEN bmax, GEN denom); 766 GEN pseudodiv(GEN x, GEN y, GEN *ptr); 767 long s_centermod(long x, ulong pp, ulong pps2); 768 GEN sort_vecpol_gen(GEN a, int (*cmp) (GEN, GEN)); 769 GEN sylvestermatrix_i(GEN x, GEN y); 770 771 /* polarit3.c */ 772 773 GEN Flm_Frobenius_pow(GEN M, long d, GEN T, ulong p); 774 GEN Flxq_matrix_pow(GEN y, long n, long m, GEN P, ulong l); 775 GEN FpM_Frobenius_pow(GEN M, long d, GEN T, GEN p); 776 GEN FpXQ_sqrtl(GEN a, GEN l, GEN T, GEN p, GEN q, long e, GEN r, GEN y, GEN m); 777 GEN FpXYQQ_pow(GEN x, GEN n, GEN S, GEN T, GEN p); 778 GEN FpX_compositum(GEN A, GEN B, GEN p); 779 GEN FpX_direct_compositum(GEN A, GEN B, GEN p); 780 GEN FpX_div_by_X_x(GEN a, GEN x, GEN p, GEN *r); 781 GEN FpX_gcd_check(GEN x, GEN y, GEN p); 782 GEN RgX_to_FpXQX(GEN x, GEN T, GEN p); 783 GEN Rg_to_FpXQ(GEN x, GEN T, GEN p); 784 int ZX_incremental_CRT(GEN *ptH, GEN Hp, GEN q, GEN qp, ulong p); 785 GEN ZX_init_CRT(GEN Hp, ulong p, long v); 786 ulong ZY_ZXY_ResBound(GEN A, GEN B, GEN dB); 787 int Z_incremental_CRT(GEN *H, ulong Hp, GEN q, GEN qp, ulong p); 788 GEN ffinit_Artin_Shreier(GEN ip, long l); 789 GEN ffinit_rand(GEN p, long n); 790 byteptr init_modular(ulong *p); 791 GEN polint_triv(GEN xa, GEN ya); 792 793 /* rootpol.c */ 794 795 GEN FFT(GEN x, GEN Omega); 796 GEN FFTinit(long k, long prec); 797 798 /* subcyclo.c */ 799 800 GEN bnr_to_znstar(GEN bnr, long *complex); 801 GEN galoiscyclo(long n, long v); 802 GEN subcyclo_complex_bound(pari_sp ltop, GEN V, long prec); 803 GEN subcyclo_complex_roots(long n, long real, long prec); 804 GEN subcyclo_cyclic(long n, long d, long m, long z, long g, GEN powz, GEN le); 805 GEN subcyclo_orbits(long n, GEN H, GEN O, GEN powz, GEN le); 806 GEN subcyclo_roots(long n, GEN zl); 807 GEN subcyclo_start(long n, long d, long o, GEN borne, long *ptr_val, long *ptr_l); 808 GEN znstar_bits(long n, GEN H); 809 long znstar_conductor(long n, GEN H); 810 GEN znstar_coset_bits(long n, GEN H, long c); 811 void znstar_coset_bits_inplace(long n, GEN H, GEN bits, long c); 812 void znstar_coset_func(long n, GEN H, void (*func) (void *, long), void *data, long c); 813 GEN znstar_cosets(long n, long phi_n, GEN H); 814 GEN znstar_elts(long n, GEN H); 815 GEN znstar_generate(long n, GEN V); 816 GEN znstar_hnf(GEN Z, GEN M); 817 GEN znstar_hnf_generators(GEN Z, GEN M); 818 GEN znstar_partial_bits(long n, GEN H, long d); 819 GEN znstar_partial_coset_bits(long n, GEN H, long d, long c); 820 void znstar_partial_coset_bits_inplace(long n, GEN H, GEN bits, long d, long c); 821 void znstar_partial_coset_func(long n, GEN H, void (*func) (void *, long), void *data, long d, long c); 822 GEN znstar_reduce_modulus(GEN H, long n); 823 824 /* thue.c */ 825 826 GEN bnfisintnormabs(GEN bnf, GEN a); 827 828 /* trans1.c */ 829 830 GEN constlog2(long prec); 831 GEN padic_sqrt(GEN x); 832 GEN padic_sqrtn(GEN x, GEN n, GEN *zetan); 833 GEN padic_sqrtn_ram(GEN x, long e); 834 GEN padic_sqrtn_unram(GEN x, GEN n, GEN *zetan); 835 void pari_init_floats(void); 836 GEN rootsof1complex(GEN n, long prec); 837 GEN rootsof1padic(GEN n, GEN y); 838 839 /* trans2.c */ 840 841 GEN cxpsi(GEN s0, long prec); 842 double darg(double s, double t); 843 844 /* trans3.c */ 845 846 GEN bernreal_using_zeta(long n, GEN iz, long prec); 847 GEN czeta(GEN s0, long prec); 848 GEN inv_szeta_euler(long n, double lba, long prec); 849 GEN kbesselnew(GEN n, GEN z, long prec); 850 GEN polylogd0(long m, GEN x, long flag, long prec); 851 GEN twistpartialzeta(GEN p, GEN q, long f, long c, GEN va, GEN cff); 852 853 ENDEXTERN 854