flint_sys/
fmpz_poly.rs

1#![allow(non_camel_case_types)]
2// TODO: fmpq, nmod
3
4//! See the [FLINT documentation](http://flintlib.org/doc/fmpz_poly.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpq::fmpq;
9use crate::fmpz::{fmpz, fmpz_preinvn_struct};
10use libc::{c_char, c_int, FILE};
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone, Hash)]
14pub struct fmpz_poly_struct {
15    pub coeffs: *mut fmpz,
16    pub alloc: mp_limb_signed_t,
17    pub length: mp_limb_signed_t,
18}
19/*
20impl Drop for fmpz_poly_struct {
21    fn drop(&mut self) {
22        unsafe { fmpz_poly_clear(self);}
23    }
24}*/
25
26pub type fmpz_poly_t = [fmpz_poly_struct; 1usize];
27
28#[repr(C)]
29#[derive(Debug, Copy, Clone)]
30pub struct fmpz_poly_powers_precomp {
31    pub powers: *mut *mut fmpz,
32    pub len: mp_limb_signed_t,
33}
34
35pub type fmpz_poly_powers_precomp_t = [fmpz_poly_powers_precomp; 1usize];
36
37#[repr(C)]
38#[derive(Debug, Copy, Clone)]
39pub struct fmpz_poly_factor {
40    pub c: fmpz,
41    pub p: *mut fmpz_poly_struct,
42    pub exp: *mut mp_limb_signed_t,
43    pub num: mp_limb_signed_t,
44    pub alloc: mp_limb_signed_t,
45}
46
47pub type fmpz_poly_factor_t = [fmpz_poly_factor; 1usize];
48
49#[repr(C)]
50#[derive(Debug, Copy, Clone)]
51pub struct fmpz_poly_mul_precache {
52    pub jj: *mut *mut mp_limb_t,
53    pub n: mp_limb_signed_t,
54    pub len2: mp_limb_signed_t,
55    pub loglen: mp_limb_signed_t,
56    pub bits2: mp_limb_signed_t,
57    pub limbs: mp_limb_signed_t,
58    pub poly2: fmpz_poly_t,
59}
60
61pub type fmpz_poly_mul_precache_t = [fmpz_poly_mul_precache; 1usize];
62
63extern "C" {
64    pub fn fmpz_poly_init(poly: *mut fmpz_poly_struct);
65    pub fn fmpz_poly_init2(poly: *mut fmpz_poly_struct, alloc: mp_limb_signed_t);
66    pub fn fmpz_poly_realloc(poly: *mut fmpz_poly_struct, alloc: mp_limb_signed_t);
67    pub fn fmpz_poly_fit_length(poly: *mut fmpz_poly_struct, len: mp_limb_signed_t);
68    pub fn fmpz_poly_clear(poly: *mut fmpz_poly_struct);
69    pub fn _fmpz_poly_normalise(poly: *mut fmpz_poly_struct);
70    pub fn _fmpz_poly_set_length(poly: *mut fmpz_poly_struct, newlen: mp_limb_signed_t);
71    pub fn fmpz_poly_attach_truncate(
72        trunc: *mut fmpz_poly_struct,
73        poly: *const fmpz_poly_struct,
74        n: mp_limb_signed_t,
75    );
76    pub fn fmpz_poly_attach_shift(
77        trunc: *mut fmpz_poly_struct,
78        poly: *const fmpz_poly_struct,
79        n: mp_limb_signed_t,
80    );
81    pub fn fmpz_poly_length(poly: *const fmpz_poly_struct) -> mp_limb_signed_t;
82    pub fn fmpz_poly_degree(poly: *const fmpz_poly_struct) -> mp_limb_signed_t;
83    pub fn fmpz_poly_set(poly1: *mut fmpz_poly_struct, poly2: *const fmpz_poly_struct);
84    pub fn fmpz_poly_set_ui(poly: *mut fmpz_poly_struct, c: mp_limb_t);
85    pub fn fmpz_poly_set_si(poly: *mut fmpz_poly_struct, c: mp_limb_signed_t);
86    pub fn fmpz_poly_set_fmpz(poly: *mut fmpz_poly_struct, c: *const fmpz);
87    pub fn fmpz_poly_set_mpz(poly: *mut fmpz_poly_struct, c: *const __mpz_struct);
88    pub fn _fmpz_poly_set_str(poly: *mut fmpz, str_: *const c_char) -> c_int;
89    pub fn fmpz_poly_set_str(poly: *mut fmpz_poly_struct, str_: *const c_char) -> c_int;
90    pub fn _fmpz_poly_get_str(poly: *const fmpz, len: mp_limb_signed_t) -> *mut c_char;
91    pub fn fmpz_poly_get_str(poly: *const fmpz_poly_struct) -> *mut c_char;
92    pub fn _fmpz_poly_get_str_pretty(
93        poly: *const fmpz,
94        len: mp_limb_signed_t,
95        x: *const c_char,
96    ) -> *mut c_char;
97    pub fn fmpz_poly_get_str_pretty(poly: *const fmpz_poly_struct, x: *const c_char)
98        -> *mut c_char;
99    pub fn fmpz_poly_zero(poly: *mut fmpz_poly_struct);
100    pub fn fmpz_poly_one(poly: *mut fmpz_poly_struct);
101    pub fn fmpz_poly_zero_coeffs(
102        poly: *mut fmpz_poly_struct,
103        i: mp_limb_signed_t,
104        j: mp_limb_signed_t,
105    );
106    pub fn fmpz_poly_swap(poly1: *mut fmpz_poly_struct, poly2: *mut fmpz_poly_struct);
107    pub fn _fmpz_poly_reverse(
108        res: *mut fmpz,
109        poly: *const fmpz,
110        len: mp_limb_signed_t,
111        n: mp_limb_signed_t,
112    );
113    pub fn fmpz_poly_reverse(
114        res: *mut fmpz_poly_struct,
115        poly: *const fmpz_poly_struct,
116        n: mp_limb_signed_t,
117    );
118    pub fn fmpz_poly_deflation(input: *const fmpz_poly_struct) -> mp_limb_t;
119    pub fn fmpz_poly_deflate(
120        result: *mut fmpz_poly_struct,
121        input: *const fmpz_poly_struct,
122        deflation: mp_limb_t,
123    );
124    pub fn fmpz_poly_inflate(
125        result: *mut fmpz_poly_struct,
126        input: *const fmpz_poly_struct,
127        inflation: mp_limb_t,
128    );
129    pub fn fmpz_poly_truncate(poly: *mut fmpz_poly_struct, newlen: mp_limb_signed_t);
130    pub fn fmpz_poly_set_trunc(
131        res: *mut fmpz_poly_struct,
132        poly: *const fmpz_poly_struct,
133        n: mp_limb_signed_t,
134    );
135    pub fn fmpz_poly_randtest(
136        f: *mut fmpz_poly_struct,
137        state: *mut flint_rand_s,
138        len: mp_limb_signed_t,
139        bits: mp_limb_t,
140    );
141    pub fn fmpz_poly_randtest_unsigned(
142        f: *mut fmpz_poly_struct,
143        state: *mut flint_rand_s,
144        len: mp_limb_signed_t,
145        bits: mp_limb_t,
146    );
147    pub fn fmpz_poly_randtest_not_zero(
148        f: *mut fmpz_poly_struct,
149        state: *mut flint_rand_s,
150        len: mp_limb_signed_t,
151        bits: mp_limb_t,
152    );
153    pub fn fmpz_poly_randtest_no_real_root(
154        p: *mut fmpz_poly_struct,
155        state: *mut flint_rand_s,
156        len: mp_limb_signed_t,
157        bits: mp_limb_t,
158    );
159    pub fn fmpz_poly_get_coeff_si(
160        poly: *const fmpz_poly_struct,
161        n: mp_limb_signed_t,
162    ) -> mp_limb_signed_t;
163    pub fn fmpz_poly_set_coeff_si(
164        poly: *mut fmpz_poly_struct,
165        n: mp_limb_signed_t,
166        x: mp_limb_signed_t,
167    );
168    pub fn fmpz_poly_get_coeff_ui(poly: *const fmpz_poly_struct, n: mp_limb_signed_t) -> mp_limb_t;
169    pub fn fmpz_poly_set_coeff_ui(poly: *mut fmpz_poly_struct, n: mp_limb_signed_t, x: mp_limb_t);
170    pub fn fmpz_poly_set_coeff_fmpz(
171        poly: *mut fmpz_poly_struct,
172        n: mp_limb_signed_t,
173        x: *const fmpz,
174    );
175    pub fn fmpz_poly_get_coeff_fmpz(
176        x: *mut fmpz,
177        poly: *const fmpz_poly_struct,
178        n: mp_limb_signed_t,
179    );
180    pub fn fmpz_poly_equal(poly1: *const fmpz_poly_struct, poly2: *const fmpz_poly_struct)
181        -> c_int;
182    pub fn fmpz_poly_equal_trunc(
183        poly1: *const fmpz_poly_struct,
184        poly2: *const fmpz_poly_struct,
185        n: mp_limb_signed_t,
186    ) -> c_int;
187    pub fn _fmpz_poly_is_one(poly: *const fmpz, len: mp_limb_signed_t) -> c_int;
188    pub fn fmpz_poly_is_one(op: *const fmpz_poly_struct) -> c_int;
189    pub fn fmpz_poly_is_unit(op: *const fmpz_poly_struct) -> c_int;
190    pub fn fmpz_poly_is_gen(op: *const fmpz_poly_struct) -> c_int;
191    pub fn fmpz_poly_equal_fmpz(poly: *const fmpz_poly_struct, c: *const fmpz) -> c_int;
192    pub fn _fmpz_poly_add(
193        res: *mut fmpz,
194        poly1: *const fmpz,
195        len1: mp_limb_signed_t,
196        poly2: *const fmpz,
197        len2: mp_limb_signed_t,
198    );
199    pub fn fmpz_poly_add(
200        res: *mut fmpz_poly_struct,
201        poly1: *const fmpz_poly_struct,
202        poly2: *const fmpz_poly_struct,
203    );
204    pub fn fmpz_poly_add_series(
205        res: *mut fmpz_poly_struct,
206        poly1: *const fmpz_poly_struct,
207        poly2: *const fmpz_poly_struct,
208        n: mp_limb_signed_t,
209    );
210    pub fn _fmpz_poly_sub(
211        res: *mut fmpz,
212        poly1: *const fmpz,
213        len1: mp_limb_signed_t,
214        poly2: *const fmpz,
215        len2: mp_limb_signed_t,
216    );
217    pub fn fmpz_poly_sub(
218        res: *mut fmpz_poly_struct,
219        poly1: *const fmpz_poly_struct,
220        poly2: *const fmpz_poly_struct,
221    );
222    pub fn fmpz_poly_sub_series(
223        res: *mut fmpz_poly_struct,
224        poly1: *const fmpz_poly_struct,
225        poly2: *const fmpz_poly_struct,
226        n: mp_limb_signed_t,
227    );
228    pub fn fmpz_poly_neg(res: *mut fmpz_poly_struct, poly: *const fmpz_poly_struct);
229    pub fn fmpz_poly_scalar_abs(res: *mut fmpz_poly_struct, poly: *const fmpz_poly_struct);
230    pub fn fmpz_poly_scalar_mul_ui(
231        poly1: *mut fmpz_poly_struct,
232        poly2: *const fmpz_poly_struct,
233        x: mp_limb_t,
234    );
235    pub fn fmpz_poly_scalar_mul_si(
236        poly1: *mut fmpz_poly_struct,
237        poly2: *const fmpz_poly_struct,
238        x: mp_limb_signed_t,
239    );
240    pub fn fmpz_poly_scalar_mul_fmpz(
241        poly1: *mut fmpz_poly_struct,
242        poly2: *const fmpz_poly_struct,
243        x: *const fmpz,
244    );
245    pub fn fmpz_poly_scalar_addmul_fmpz(
246        poly1: *mut fmpz_poly_struct,
247        poly2: *const fmpz_poly_struct,
248        x: *const fmpz,
249    );
250    pub fn fmpz_poly_scalar_submul_fmpz(
251        poly1: *mut fmpz_poly_struct,
252        poly2: *const fmpz_poly_struct,
253        x: *const fmpz,
254    );
255    pub fn fmpz_poly_scalar_fdiv_ui(
256        poly1: *mut fmpz_poly_struct,
257        poly2: *const fmpz_poly_struct,
258        x: mp_limb_t,
259    );
260    pub fn fmpz_poly_scalar_fdiv_si(
261        poly1: *mut fmpz_poly_struct,
262        poly2: *const fmpz_poly_struct,
263        x: mp_limb_signed_t,
264    );
265    pub fn fmpz_poly_scalar_fdiv_fmpz(
266        poly1: *mut fmpz_poly_struct,
267        poly2: *const fmpz_poly_struct,
268        x: *const fmpz,
269    );
270    pub fn fmpz_poly_scalar_tdiv_ui(
271        poly1: *mut fmpz_poly_struct,
272        poly2: *const fmpz_poly_struct,
273        x: mp_limb_t,
274    );
275    pub fn fmpz_poly_scalar_tdiv_si(
276        poly1: *mut fmpz_poly_struct,
277        poly2: *const fmpz_poly_struct,
278        x: mp_limb_signed_t,
279    );
280    pub fn fmpz_poly_scalar_tdiv_fmpz(
281        poly1: *mut fmpz_poly_struct,
282        poly2: *const fmpz_poly_struct,
283        x: *const fmpz,
284    );
285    pub fn fmpz_poly_scalar_divexact_ui(
286        poly1: *mut fmpz_poly_struct,
287        poly2: *const fmpz_poly_struct,
288        x: mp_limb_t,
289    );
290    pub fn fmpz_poly_scalar_divexact_si(
291        poly1: *mut fmpz_poly_struct,
292        poly2: *const fmpz_poly_struct,
293        x: mp_limb_signed_t,
294    );
295    pub fn fmpz_poly_scalar_divexact_fmpz(
296        poly1: *mut fmpz_poly_struct,
297        poly2: *const fmpz_poly_struct,
298        x: *const fmpz,
299    );
300    pub fn fmpz_poly_scalar_fdiv_2exp(
301        poly1: *mut fmpz_poly_struct,
302        poly2: *const fmpz_poly_struct,
303        exp: mp_limb_t,
304    );
305    pub fn fmpz_poly_scalar_tdiv_2exp(
306        poly1: *mut fmpz_poly_struct,
307        poly2: *const fmpz_poly_struct,
308        exp: mp_limb_t,
309    );
310    pub fn fmpz_poly_scalar_mul_2exp(
311        poly1: *mut fmpz_poly_struct,
312        poly2: *const fmpz_poly_struct,
313        exp: mp_limb_t,
314    );
315    pub fn fmpz_poly_scalar_mod_fmpz(
316        poly1: *mut fmpz_poly_struct,
317        poly2: *const fmpz_poly_struct,
318        x: *const fmpz,
319    );
320    pub fn fmpz_poly_scalar_smod_fmpz(
321        poly1: *mut fmpz_poly_struct,
322        poly2: *const fmpz_poly_struct,
323        x: *const fmpz,
324    );
325    pub fn _fmpz_poly_remove_content_2exp(
326        pol: *mut fmpz,
327        len: mp_limb_signed_t,
328    ) -> mp_limb_signed_t;
329    pub fn _fmpz_poly_scale_2exp(pol: *mut fmpz, len: mp_limb_signed_t, k: mp_limb_signed_t);
330    pub fn _fmpz_poly_bit_pack(
331        arr: mp_ptr,
332        poly: *const fmpz,
333        len: mp_limb_signed_t,
334        bit_size: mp_limb_t,
335        negate: c_int,
336    );
337    pub fn _fmpz_poly_bit_unpack(
338        poly: *mut fmpz,
339        len: mp_limb_signed_t,
340        arr: mp_srcptr,
341        bit_size: mp_limb_t,
342        negate: c_int,
343    ) -> c_int;
344    pub fn _fmpz_poly_bit_unpack_unsigned(
345        poly: *mut fmpz,
346        len: mp_limb_signed_t,
347        arr: mp_srcptr,
348        bit_size: mp_limb_t,
349    );
350    pub fn fmpz_poly_bit_pack(f: *mut fmpz, poly: *const fmpz_poly_struct, bit_size: mp_limb_t);
351    pub fn fmpz_poly_bit_unpack(poly: *mut fmpz_poly_struct, f: *const fmpz, bit_size: mp_limb_t);
352    pub fn fmpz_poly_bit_unpack_unsigned(
353        poly: *mut fmpz_poly_struct,
354        f: *const fmpz,
355        bit_size: mp_limb_t,
356    );
357    pub fn _fmpz_poly_mul_classical(
358        res: *mut fmpz,
359        poly1: *const fmpz,
360        len1: mp_limb_signed_t,
361        poly2: *const fmpz,
362        len2: mp_limb_signed_t,
363    );
364    pub fn fmpz_poly_mul_classical(
365        res: *mut fmpz_poly_struct,
366        poly1: *const fmpz_poly_struct,
367        poly2: *const fmpz_poly_struct,
368    );
369    pub fn _fmpz_poly_mullow_classical(
370        res: *mut fmpz,
371        poly1: *const fmpz,
372        len1: mp_limb_signed_t,
373        poly2: *const fmpz,
374        len2: mp_limb_signed_t,
375        n: mp_limb_signed_t,
376    );
377    pub fn fmpz_poly_mullow_classical(
378        res: *mut fmpz_poly_struct,
379        poly1: *const fmpz_poly_struct,
380        poly2: *const fmpz_poly_struct,
381        n: mp_limb_signed_t,
382    );
383    pub fn _fmpz_poly_mulhigh_classical(
384        res: *mut fmpz,
385        poly1: *const fmpz,
386        len1: mp_limb_signed_t,
387        poly2: *const fmpz,
388        len2: mp_limb_signed_t,
389        start: mp_limb_signed_t,
390    );
391    pub fn fmpz_poly_mulhigh_classical(
392        res: *mut fmpz_poly_struct,
393        poly1: *const fmpz_poly_struct,
394        poly2: *const fmpz_poly_struct,
395        start: mp_limb_signed_t,
396    );
397    pub fn _fmpz_poly_mulmid_classical(
398        res: *mut fmpz,
399        poly1: *const fmpz,
400        len1: mp_limb_signed_t,
401        poly2: *const fmpz,
402        len2: mp_limb_signed_t,
403    );
404    pub fn fmpz_poly_mulmid_classical(
405        res: *mut fmpz_poly_struct,
406        poly1: *const fmpz_poly_struct,
407        poly2: *const fmpz_poly_struct,
408    );
409    pub fn fmpz_poly_mul_karatsuba(
410        res: *mut fmpz_poly_struct,
411        poly1: *const fmpz_poly_struct,
412        poly2: *const fmpz_poly_struct,
413    );
414    pub fn _fmpz_poly_mul_karatsuba(
415        res: *mut fmpz,
416        poly1: *const fmpz,
417        len1: mp_limb_signed_t,
418        poly2: *const fmpz,
419        len2: mp_limb_signed_t,
420    );
421    pub fn _fmpz_poly_mullow_karatsuba_n(
422        res: *mut fmpz,
423        poly1: *const fmpz,
424        poly2: *const fmpz,
425        n: mp_limb_signed_t,
426    );
427    pub fn fmpz_poly_mullow_karatsuba_n(
428        res: *mut fmpz_poly_struct,
429        poly1: *const fmpz_poly_struct,
430        poly2: *const fmpz_poly_struct,
431        n: mp_limb_signed_t,
432    );
433    pub fn _fmpz_poly_mulhigh_karatsuba_n(
434        res: *mut fmpz,
435        poly1: *const fmpz,
436        poly2: *const fmpz,
437        len: mp_limb_signed_t,
438    );
439    pub fn fmpz_poly_mulhigh_karatsuba_n(
440        res: *mut fmpz_poly_struct,
441        poly1: *const fmpz_poly_struct,
442        poly2: *const fmpz_poly_struct,
443        length: mp_limb_signed_t,
444    );
445    pub fn _fmpz_poly_mul_KS(
446        res: *mut fmpz,
447        poly1: *const fmpz,
448        len1: mp_limb_signed_t,
449        poly2: *const fmpz,
450        len2: mp_limb_signed_t,
451    );
452    pub fn fmpz_poly_mul_KS(
453        res: *mut fmpz_poly_struct,
454        poly1: *const fmpz_poly_struct,
455        poly2: *const fmpz_poly_struct,
456    );
457    pub fn _fmpz_poly_mullow_KS(
458        res: *mut fmpz,
459        poly1: *const fmpz,
460        len1: mp_limb_signed_t,
461        poly2: *const fmpz,
462        len2: mp_limb_signed_t,
463        n: mp_limb_signed_t,
464    );
465    pub fn fmpz_poly_mullow_KS(
466        res: *mut fmpz_poly_struct,
467        poly1: *const fmpz_poly_struct,
468        poly2: *const fmpz_poly_struct,
469        n: mp_limb_signed_t,
470    );
471    pub fn _fmpz_poly_mul_SS(
472        output: *mut fmpz,
473        input1: *const fmpz,
474        length1: mp_limb_signed_t,
475        input2: *const fmpz,
476        length2: mp_limb_signed_t,
477    );
478    pub fn fmpz_poly_mul_SS(
479        res: *mut fmpz_poly_struct,
480        poly1: *const fmpz_poly_struct,
481        poly2: *const fmpz_poly_struct,
482    );
483    pub fn _fmpz_poly_mullow_SS(
484        output: *mut fmpz,
485        input1: *const fmpz,
486        length1: mp_limb_signed_t,
487        input2: *const fmpz,
488        length2: mp_limb_signed_t,
489        n: mp_limb_signed_t,
490    );
491    pub fn fmpz_poly_mullow_SS(
492        res: *mut fmpz_poly_struct,
493        poly1: *const fmpz_poly_struct,
494        poly2: *const fmpz_poly_struct,
495        n: mp_limb_signed_t,
496    );
497    pub fn _fmpz_poly_mul(
498        res: *mut fmpz,
499        poly1: *const fmpz,
500        len1: mp_limb_signed_t,
501        poly2: *const fmpz,
502        len2: mp_limb_signed_t,
503    );
504    pub fn fmpz_poly_mul(
505        res: *mut fmpz_poly_struct,
506        poly1: *const fmpz_poly_struct,
507        poly2: *const fmpz_poly_struct,
508    );
509    pub fn _fmpz_poly_mullow(
510        res: *mut fmpz,
511        poly1: *const fmpz,
512        len1: mp_limb_signed_t,
513        poly2: *const fmpz,
514        len2: mp_limb_signed_t,
515        n: mp_limb_signed_t,
516    );
517    pub fn fmpz_poly_mullow(
518        res: *mut fmpz_poly_struct,
519        poly1: *const fmpz_poly_struct,
520        poly2: *const fmpz_poly_struct,
521        n: mp_limb_signed_t,
522    );
523    pub fn fmpz_poly_mulhigh_n(
524        res: *mut fmpz_poly_struct,
525        poly1: *const fmpz_poly_struct,
526        poly2: *const fmpz_poly_struct,
527        n: mp_limb_signed_t,
528    );
529    pub fn fmpz_poly_mul_SS_precache_init(
530        pre: *mut fmpz_poly_mul_precache,
531        len1: mp_limb_signed_t,
532        bits1: mp_limb_signed_t,
533        poly2: *const fmpz_poly_struct,
534    );
535    pub fn fmpz_poly_mul_precache_clear(pre: *mut fmpz_poly_mul_precache);
536    pub fn _fmpz_poly_mullow_SS_precache(
537        output: *mut fmpz,
538        input1: *const fmpz,
539        len1: mp_limb_signed_t,
540        pre: *const fmpz_poly_mul_precache,
541        trunc: mp_limb_signed_t,
542    );
543    pub fn fmpz_poly_mullow_SS_precache(
544        res: *mut fmpz_poly_struct,
545        poly1: *const fmpz_poly_struct,
546        pre: *const fmpz_poly_mul_precache,
547        n: mp_limb_signed_t,
548    );
549    pub fn fmpz_poly_mul_SS_precache(
550        res: *mut fmpz_poly_struct,
551        poly1: *const fmpz_poly_struct,
552        pre: *const fmpz_poly_mul_precache,
553    );
554    pub fn _fmpz_poly_sqr_KS(rop: *mut fmpz, op: *const fmpz, len: mp_limb_signed_t);
555    pub fn fmpz_poly_sqr_KS(rop: *mut fmpz_poly_struct, op: *const fmpz_poly_struct);
556    pub fn fmpz_poly_sqr_karatsuba(rop: *mut fmpz_poly_struct, op: *const fmpz_poly_struct);
557    pub fn _fmpz_poly_sqr_karatsuba(rop: *mut fmpz, op: *const fmpz, len: mp_limb_signed_t);
558    pub fn _fmpz_poly_sqr_classical(rop: *mut fmpz, op: *const fmpz, len: mp_limb_signed_t);
559    pub fn fmpz_poly_sqr_classical(rop: *mut fmpz_poly_struct, op: *const fmpz_poly_struct);
560    pub fn _fmpz_poly_sqr(rop: *mut fmpz, op: *const fmpz, len: mp_limb_signed_t);
561    pub fn fmpz_poly_sqr(rop: *mut fmpz_poly_struct, op: *const fmpz_poly_struct);
562    pub fn _fmpz_poly_sqrlow_KS(
563        res: *mut fmpz,
564        poly: *const fmpz,
565        len: mp_limb_signed_t,
566        n: mp_limb_signed_t,
567    );
568    pub fn fmpz_poly_sqrlow_KS(
569        res: *mut fmpz_poly_struct,
570        poly: *const fmpz_poly_struct,
571        n: mp_limb_signed_t,
572    );
573    pub fn _fmpz_poly_sqrlow_karatsuba_n(res: *mut fmpz, poly: *const fmpz, n: mp_limb_signed_t);
574    pub fn fmpz_poly_sqrlow_karatsuba_n(
575        res: *mut fmpz_poly_struct,
576        poly: *const fmpz_poly_struct,
577        n: mp_limb_signed_t,
578    );
579    pub fn _fmpz_poly_sqrlow_classical(
580        res: *mut fmpz,
581        poly: *const fmpz,
582        len: mp_limb_signed_t,
583        n: mp_limb_signed_t,
584    );
585    pub fn fmpz_poly_sqrlow_classical(
586        res: *mut fmpz_poly_struct,
587        poly: *const fmpz_poly_struct,
588        n: mp_limb_signed_t,
589    );
590    pub fn _fmpz_poly_sqrlow(
591        res: *mut fmpz,
592        poly: *const fmpz,
593        len: mp_limb_signed_t,
594        n: mp_limb_signed_t,
595    );
596    pub fn fmpz_poly_sqrlow(
597        res: *mut fmpz_poly_struct,
598        poly: *const fmpz_poly_struct,
599        n: mp_limb_signed_t,
600    );
601    pub fn _fmpz_poly_pow_multinomial(
602        res: *mut fmpz,
603        poly: *const fmpz,
604        len: mp_limb_signed_t,
605        e: mp_limb_t,
606    );
607    pub fn fmpz_poly_pow_multinomial(
608        res: *mut fmpz_poly_struct,
609        poly: *const fmpz_poly_struct,
610        e: mp_limb_t,
611    );
612    pub fn _fmpz_poly_pow_binomial(res: *mut fmpz, poly: *const fmpz, e: mp_limb_t);
613    pub fn fmpz_poly_pow_binomial(
614        res: *mut fmpz_poly_struct,
615        poly: *const fmpz_poly_struct,
616        e: mp_limb_t,
617    );
618    pub fn _fmpz_poly_pow_binexp(
619        res: *mut fmpz,
620        poly: *const fmpz,
621        len: mp_limb_signed_t,
622        e: mp_limb_t,
623    );
624    pub fn fmpz_poly_pow_binexp(
625        res: *mut fmpz_poly_struct,
626        poly: *const fmpz_poly_struct,
627        e: mp_limb_t,
628    );
629    pub fn _fmpz_poly_pow_addchains(
630        res: *mut fmpz,
631        poly: *const fmpz,
632        len: mp_limb_signed_t,
633        a: *const c_int,
634        n: c_int,
635    );
636    pub fn fmpz_poly_pow_addchains(
637        res: *mut fmpz_poly_struct,
638        poly: *const fmpz_poly_struct,
639        e: mp_limb_t,
640    );
641    pub fn _fmpz_poly_pow_small(
642        res: *mut fmpz,
643        poly: *const fmpz,
644        len: mp_limb_signed_t,
645        e: mp_limb_t,
646    );
647    pub fn _fmpz_poly_pow(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t, e: mp_limb_t);
648    pub fn fmpz_poly_pow(res: *mut fmpz_poly_struct, poly: *const fmpz_poly_struct, e: mp_limb_t);
649    pub fn _fmpz_poly_pow_trunc(
650        res: *mut fmpz,
651        poly: *const fmpz,
652        e: mp_limb_t,
653        n: mp_limb_signed_t,
654    );
655    pub fn fmpz_poly_pow_trunc(
656        res: *mut fmpz_poly_struct,
657        poly: *const fmpz_poly_struct,
658        e: mp_limb_t,
659        n: mp_limb_signed_t,
660    );
661    pub fn _fmpz_poly_shift_left(
662        res: *mut fmpz,
663        poly: *const fmpz,
664        len: mp_limb_signed_t,
665        n: mp_limb_signed_t,
666    );
667    pub fn _fmpz_poly_shift_right(
668        res: *mut fmpz,
669        poly: *const fmpz,
670        len: mp_limb_signed_t,
671        n: mp_limb_signed_t,
672    );
673    pub fn fmpz_poly_shift_left(
674        res: *mut fmpz_poly_struct,
675        poly: *const fmpz_poly_struct,
676        n: mp_limb_signed_t,
677    );
678    pub fn fmpz_poly_shift_right(
679        res: *mut fmpz_poly_struct,
680        poly: *const fmpz_poly_struct,
681        n: mp_limb_signed_t,
682    );
683    pub fn _fmpz_poly_2norm(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
684    pub fn fmpz_poly_2norm(res: *mut fmpz, poly: *const fmpz_poly_struct);
685    pub fn _fmpz_poly_2norm_normalised_bits(poly: *const fmpz, len: mp_limb_signed_t) -> mp_limb_t;
686    pub fn fmpz_poly_max_limbs(poly: *const fmpz_poly_struct) -> mp_limb_t;
687    pub fn fmpz_poly_max_bits(poly: *const fmpz_poly_struct) -> mp_limb_signed_t;
688    pub fn fmpz_poly_height(res: *mut fmpz, poly: *const fmpz_poly_struct);
689    pub fn _fmpz_poly_gcd_subresultant(
690        res: *mut fmpz,
691        poly1: *const fmpz,
692        len1: mp_limb_signed_t,
693        poly2: *const fmpz,
694        len2: mp_limb_signed_t,
695    );
696    pub fn fmpz_poly_gcd_subresultant(
697        res: *mut fmpz_poly_struct,
698        poly1: *const fmpz_poly_struct,
699        poly2: *const fmpz_poly_struct,
700    );
701    pub fn _fmpz_poly_gcd_heuristic(
702        res: *mut fmpz,
703        poly1: *const fmpz,
704        len1: mp_limb_signed_t,
705        poly2: *const fmpz,
706        len2: mp_limb_signed_t,
707    ) -> c_int;
708    pub fn fmpz_poly_gcd_heuristic(
709        res: *mut fmpz_poly_struct,
710        poly1: *const fmpz_poly_struct,
711        poly2: *const fmpz_poly_struct,
712    ) -> c_int;
713    pub fn _fmpz_poly_gcd_modular(
714        res: *mut fmpz,
715        poly1: *const fmpz,
716        len1: mp_limb_signed_t,
717        poly2: *const fmpz,
718        len2: mp_limb_signed_t,
719    );
720    pub fn fmpz_poly_gcd_modular(
721        res: *mut fmpz_poly_struct,
722        poly1: *const fmpz_poly_struct,
723        poly2: *const fmpz_poly_struct,
724    );
725    pub fn _fmpz_poly_gcd(
726        res: *mut fmpz,
727        poly1: *const fmpz,
728        len1: mp_limb_signed_t,
729        poly2: *const fmpz,
730        len2: mp_limb_signed_t,
731    );
732    pub fn fmpz_poly_gcd(
733        res: *mut fmpz_poly_struct,
734        poly1: *const fmpz_poly_struct,
735        poly2: *const fmpz_poly_struct,
736    );
737    pub fn _fmpz_poly_lcm(
738        res: *mut fmpz,
739        poly1: *const fmpz,
740        len1: mp_limb_signed_t,
741        poly2: *const fmpz,
742        len2: mp_limb_signed_t,
743    );
744    pub fn fmpz_poly_lcm(
745        res: *mut fmpz_poly_struct,
746        poly1: *const fmpz_poly_struct,
747        poly2: *const fmpz_poly_struct,
748    );
749    pub fn _fmpz_poly_resultant_euclidean(
750        res: *mut fmpz,
751        poly1: *const fmpz,
752        len1: mp_limb_signed_t,
753        poly2: *const fmpz,
754        len2: mp_limb_signed_t,
755    );
756    pub fn fmpz_poly_resultant_euclidean(
757        res: *mut fmpz,
758        poly1: *const fmpz_poly_struct,
759        poly2: *const fmpz_poly_struct,
760    );
761    pub fn _fmpz_poly_resultant_modular(
762        res: *mut fmpz,
763        poly1: *const fmpz,
764        len1: mp_limb_signed_t,
765        poly2: *const fmpz,
766        len2: mp_limb_signed_t,
767    );
768    pub fn fmpz_poly_resultant_modular(
769        res: *mut fmpz,
770        poly1: *const fmpz_poly_struct,
771        poly2: *const fmpz_poly_struct,
772    );
773    pub fn _fmpz_poly_resultant(
774        res: *mut fmpz,
775        poly1: *const fmpz,
776        len1: mp_limb_signed_t,
777        poly2: *const fmpz,
778        len2: mp_limb_signed_t,
779    );
780    pub fn fmpz_poly_resultant(
781        res: *mut fmpz,
782        poly1: *const fmpz_poly_struct,
783        poly2: *const fmpz_poly_struct,
784    );
785    pub fn _fmpz_poly_resultant_modular_div(
786        res: *mut fmpz,
787        poly1: *const fmpz,
788        len1: mp_limb_signed_t,
789        poly2: *const fmpz,
790        len2: mp_limb_signed_t,
791        divisor: *const fmpz,
792        nbits: mp_limb_signed_t,
793    );
794    pub fn fmpz_poly_resultant_modular_div(
795        res: *mut fmpz,
796        poly1: *const fmpz_poly_struct,
797        poly2: *const fmpz_poly_struct,
798        divisor: *const fmpz,
799        nbits: mp_limb_signed_t,
800    );
801    pub fn _fmpz_poly_xgcd_modular(
802        r: *mut fmpz,
803        s: *mut fmpz,
804        t: *mut fmpz,
805        poly1: *const fmpz,
806        len1: mp_limb_signed_t,
807        poly2: *const fmpz,
808        len2: mp_limb_signed_t,
809    );
810    pub fn fmpz_poly_xgcd_modular(
811        r: *mut fmpz,
812        s: *mut fmpz_poly_struct,
813        t: *mut fmpz_poly_struct,
814        poly1: *const fmpz_poly_struct,
815        poly2: *const fmpz_poly_struct,
816    );
817    pub fn _fmpz_poly_xgcd(
818        r: *mut fmpz,
819        s: *mut fmpz,
820        t: *mut fmpz,
821        poly1: *const fmpz,
822        len1: mp_limb_signed_t,
823        poly2: *const fmpz,
824        len2: mp_limb_signed_t,
825    );
826    pub fn fmpz_poly_xgcd(
827        r: *mut fmpz,
828        s: *mut fmpz_poly_struct,
829        t: *mut fmpz_poly_struct,
830        poly1: *const fmpz_poly_struct,
831        poly2: *const fmpz_poly_struct,
832    );
833    pub fn _fmpz_poly_discriminant(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
834    pub fn fmpz_poly_discriminant(res: *mut fmpz, poly: *const fmpz_poly_struct);
835    pub fn _fmpz_poly_content(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
836    pub fn fmpz_poly_content(res: *mut fmpz, poly: *const fmpz_poly_struct);
837    pub fn _fmpz_poly_primitive_part(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
838    pub fn fmpz_poly_primitive_part(res: *mut fmpz_poly_struct, poly: *const fmpz_poly_struct);
839    pub fn _fmpz_poly_is_squarefree(poly: *const fmpz, len: mp_limb_signed_t) -> c_int;
840    pub fn fmpz_poly_is_squarefree(poly: *const fmpz_poly_struct) -> c_int;
841    pub fn _fmpz_poly_divrem_basecase(
842        Q: *mut fmpz,
843        R: *mut fmpz,
844        A: *const fmpz,
845        lenA: mp_limb_signed_t,
846        B: *const fmpz,
847        lenB: mp_limb_signed_t,
848        exact: c_int,
849    ) -> c_int;
850    pub fn fmpz_poly_divrem_basecase(
851        Q: *mut fmpz_poly_struct,
852        R: *mut fmpz_poly_struct,
853        A: *const fmpz_poly_struct,
854        B: *const fmpz_poly_struct,
855    );
856    pub fn _fmpz_poly_divrem_divconquer_recursive(
857        Q: *mut fmpz,
858        BQ: *mut fmpz,
859        W: *mut fmpz,
860        A: *const fmpz,
861        B: *const fmpz,
862        lenB: mp_limb_signed_t,
863        exact: c_int,
864    ) -> c_int;
865    pub fn _fmpz_poly_divrem_divconquer(
866        Q: *mut fmpz,
867        R: *mut fmpz,
868        A: *const fmpz,
869        lenA: mp_limb_signed_t,
870        B: *const fmpz,
871        lenB: mp_limb_signed_t,
872        exact: c_int,
873    ) -> c_int;
874    pub fn fmpz_poly_divrem_divconquer(
875        Q: *mut fmpz_poly_struct,
876        R: *mut fmpz_poly_struct,
877        A: *const fmpz_poly_struct,
878        B: *const fmpz_poly_struct,
879    );
880    pub fn _fmpz_poly_divrem(
881        Q: *mut fmpz,
882        R: *mut fmpz,
883        A: *const fmpz,
884        lenA: mp_limb_signed_t,
885        B: *const fmpz,
886        lenB: mp_limb_signed_t,
887        exact: c_int,
888    ) -> c_int;
889    pub fn fmpz_poly_divrem(
890        Q: *mut fmpz_poly_struct,
891        R: *mut fmpz_poly_struct,
892        A: *const fmpz_poly_struct,
893        B: *const fmpz_poly_struct,
894    );
895    pub fn _fmpz_poly_div_basecase(
896        Q: *mut fmpz,
897        R: *mut fmpz,
898        A: *const fmpz,
899        lenA: mp_limb_signed_t,
900        B: *const fmpz,
901        lenB: mp_limb_signed_t,
902        exact: c_int,
903    ) -> c_int;
904    pub fn fmpz_poly_div_basecase(
905        Q: *mut fmpz_poly_struct,
906        A: *mut fmpz_poly_struct,
907        B: *const fmpz_poly_struct,
908    );
909    pub fn _fmpz_poly_divremlow_divconquer_recursive(
910        Q: *mut fmpz,
911        QB: *mut fmpz,
912        A: *const fmpz,
913        B: *const fmpz,
914        lenB: mp_limb_signed_t,
915        exact: c_int,
916    ) -> c_int;
917    pub fn _fmpz_poly_div_divconquer_recursive(
918        Q: *mut fmpz,
919        temp: *mut fmpz,
920        A: *const fmpz,
921        B: *const fmpz,
922        lenB: mp_limb_signed_t,
923        exact: c_int,
924    ) -> c_int;
925    pub fn _fmpz_poly_div_divconquer(
926        Q: *mut fmpz,
927        A: *const fmpz,
928        lenA: mp_limb_signed_t,
929        B: *const fmpz,
930        lenB: mp_limb_signed_t,
931        exact: c_int,
932    ) -> c_int;
933    pub fn fmpz_poly_div_divconquer(
934        Q: *mut fmpz_poly_struct,
935        A: *const fmpz_poly_struct,
936        B: *const fmpz_poly_struct,
937    );
938    pub fn _fmpz_poly_div(
939        Q: *mut fmpz,
940        A: *const fmpz,
941        lenA: mp_limb_signed_t,
942        B: *const fmpz,
943        lenB: mp_limb_signed_t,
944        exact: c_int,
945    ) -> c_int;
946    pub fn fmpz_poly_div(
947        Q: *mut fmpz_poly_struct,
948        A: *const fmpz_poly_struct,
949        B: *const fmpz_poly_struct,
950    );
951    pub fn _fmpz_poly_preinvert(B_inv: *mut fmpz, B: *const fmpz, n: mp_limb_signed_t);
952    pub fn fmpz_poly_preinvert(B_inv: *mut fmpz_poly_struct, B: *const fmpz_poly_struct);
953    pub fn _fmpz_poly_div_preinv(
954        Q: *mut fmpz,
955        A: *const fmpz,
956        len1: mp_limb_signed_t,
957        B: *const fmpz,
958        B_inv: *const fmpz,
959        len2: mp_limb_signed_t,
960    );
961    pub fn fmpz_poly_div_preinv(
962        Q: *mut fmpz_poly_struct,
963        A: *const fmpz_poly_struct,
964        B: *const fmpz_poly_struct,
965        B_inv: *const fmpz_poly_struct,
966    );
967    pub fn _fmpz_poly_divrem_preinv(
968        Q: *mut fmpz,
969        A: *const fmpz,
970        len1: mp_limb_signed_t,
971        B: *const fmpz,
972        B_inv: *const fmpz,
973        len2: mp_limb_signed_t,
974    );
975    pub fn fmpz_poly_divrem_preinv(
976        Q: *mut fmpz_poly_struct,
977        R: *mut fmpz_poly_struct,
978        A: *const fmpz_poly_struct,
979        B: *const fmpz_poly_struct,
980        B_inv: *const fmpz_poly_struct,
981    );
982    pub fn _fmpz_poly_powers_precompute(B: *const fmpz, len: mp_limb_signed_t) -> *mut *mut fmpz;
983    pub fn fmpz_poly_powers_precompute(
984        pinv: *mut fmpz_poly_powers_precomp,
985        poly: *const fmpz_poly_struct,
986    );
987    pub fn _fmpz_poly_powers_clear(powers: *mut *mut fmpz, len: mp_limb_signed_t);
988    pub fn fmpz_poly_powers_clear(pinv: *mut fmpz_poly_powers_precomp);
989    pub fn _fmpz_poly_rem_powers_precomp(
990        A: *mut fmpz,
991        m: mp_limb_signed_t,
992        B: *const fmpz,
993        n: mp_limb_signed_t,
994        powers: *mut *mut fmpz,
995    );
996    pub fn fmpz_poly_rem_powers_precomp(
997        R: *mut fmpz_poly_struct,
998        A: *const fmpz_poly_struct,
999        B: *const fmpz_poly_struct,
1000        B_inv: *const fmpz_poly_powers_precomp,
1001    );
1002    pub fn _fmpz_poly_rem_basecase(
1003        Q: *mut fmpz,
1004        A: *const fmpz,
1005        lenA: mp_limb_signed_t,
1006        B: *const fmpz,
1007        lenB: mp_limb_signed_t,
1008    );
1009    pub fn fmpz_poly_rem_basecase(
1010        R: *mut fmpz_poly_struct,
1011        A: *const fmpz_poly_struct,
1012        B: *const fmpz_poly_struct,
1013    );
1014    pub fn _fmpz_poly_rem(
1015        R: *mut fmpz,
1016        A: *const fmpz,
1017        lenA: mp_limb_signed_t,
1018        B: *const fmpz,
1019        lenB: mp_limb_signed_t,
1020    );
1021    pub fn fmpz_poly_rem(
1022        R: *mut fmpz_poly_struct,
1023        A: *const fmpz_poly_struct,
1024        B: *const fmpz_poly_struct,
1025    );
1026    pub fn fmpz_poly_div_root(Q: *mut fmpz_poly_struct, A: *const fmpz_poly_struct, c: *const fmpz);
1027    pub fn _fmpz_poly_div_root(Q: *mut fmpz, A: *const fmpz, len: mp_limb_signed_t, c: *const fmpz);
1028    pub fn _fmpz_poly_inv_series_basecase(
1029        Qinv: *mut fmpz,
1030        Q: *const fmpz,
1031        Qlen: mp_limb_signed_t,
1032        n: mp_limb_signed_t,
1033    );
1034    pub fn fmpz_poly_inv_series_basecase(
1035        Qinv: *mut fmpz_poly_struct,
1036        Q: *const fmpz_poly_struct,
1037        n: mp_limb_signed_t,
1038    );
1039    pub fn _fmpz_poly_inv_series_newton(
1040        Qinv: *mut fmpz,
1041        Q: *const fmpz,
1042        Qlen: mp_limb_signed_t,
1043        n: mp_limb_signed_t,
1044    );
1045    pub fn fmpz_poly_inv_series_newton(
1046        Qinv: *mut fmpz_poly_struct,
1047        Q: *const fmpz_poly_struct,
1048        n: mp_limb_signed_t,
1049    );
1050    pub fn _fmpz_poly_inv_series(
1051        Qinv: *mut fmpz,
1052        Q: *const fmpz,
1053        Qlen: mp_limb_signed_t,
1054        n: mp_limb_signed_t,
1055    );
1056    pub fn fmpz_poly_inv_series(
1057        Qinv: *mut fmpz_poly_struct,
1058        Q: *const fmpz_poly_struct,
1059        n: mp_limb_signed_t,
1060    );
1061    pub fn _fmpz_poly_div_series_basecase(
1062        Q: *mut fmpz,
1063        A: *const fmpz,
1064        Alen: mp_limb_signed_t,
1065        B: *const fmpz,
1066        Blen: mp_limb_signed_t,
1067        n: mp_limb_signed_t,
1068    );
1069    pub fn _fmpz_poly_div_series_divconquer(
1070        Q: *mut fmpz,
1071        A: *const fmpz,
1072        Alen: mp_limb_signed_t,
1073        B: *const fmpz,
1074        Blen: mp_limb_signed_t,
1075        n: mp_limb_signed_t,
1076    );
1077    pub fn _fmpz_poly_div_series(
1078        Q: *mut fmpz,
1079        A: *const fmpz,
1080        Alen: mp_limb_signed_t,
1081        B: *const fmpz,
1082        Blen: mp_limb_signed_t,
1083        n: mp_limb_signed_t,
1084    );
1085    pub fn fmpz_poly_div_series_basecase(
1086        Q: *mut fmpz_poly_struct,
1087        A: *const fmpz_poly_struct,
1088        B: *const fmpz_poly_struct,
1089        n: mp_limb_signed_t,
1090    );
1091    pub fn fmpz_poly_div_series_divconquer(
1092        Q: *mut fmpz_poly_struct,
1093        A: *const fmpz_poly_struct,
1094        B: *const fmpz_poly_struct,
1095        n: mp_limb_signed_t,
1096    );
1097    pub fn fmpz_poly_div_series(
1098        Q: *mut fmpz_poly_struct,
1099        A: *const fmpz_poly_struct,
1100        B: *const fmpz_poly_struct,
1101        n: mp_limb_signed_t,
1102    );
1103    pub fn _fmpz_poly_divides(
1104        q: *mut fmpz,
1105        a: *const fmpz,
1106        len1: mp_limb_signed_t,
1107        b: *const fmpz,
1108        len2: mp_limb_signed_t,
1109    ) -> c_int;
1110    pub fn fmpz_poly_divides(
1111        q: *mut fmpz_poly_struct,
1112        a: *const fmpz_poly_struct,
1113        b: *const fmpz_poly_struct,
1114    ) -> c_int;
1115    pub fn fmpz_poly_remove(
1116        res: *mut fmpz_poly_struct,
1117        poly1: *const fmpz_poly_struct,
1118        poly2: *const fmpz_poly_struct,
1119    ) -> mp_limb_signed_t;
1120    pub fn _fmpz_poly_pseudo_divrem_basecase(
1121        Q: *mut fmpz,
1122        R: *mut fmpz,
1123        d: *const mp_limb_t,
1124        A: *const fmpz,
1125        A_len: mp_limb_signed_t,
1126        B: *const fmpz,
1127        B_len: mp_limb_signed_t,
1128        inv: *const fmpz_preinvn_struct,
1129    );
1130    pub fn fmpz_poly_pseudo_divrem_basecase(
1131        Q: *mut fmpz_poly_struct,
1132        R: *mut fmpz_poly_struct,
1133        d: *const mp_limb_t,
1134        A: *const fmpz_poly_struct,
1135        B: *const fmpz_poly_struct,
1136    );
1137    pub fn _fmpz_poly_pseudo_divrem_divconquer(
1138        Q: *mut fmpz,
1139        R: *mut fmpz,
1140        d: *const mp_limb_t,
1141        A: *const fmpz,
1142        lenA: mp_limb_signed_t,
1143        B: *const fmpz,
1144        lenB: mp_limb_signed_t,
1145        inv: *const fmpz_preinvn_struct,
1146    );
1147    pub fn fmpz_poly_pseudo_divrem_divconquer(
1148        Q: *mut fmpz_poly_struct,
1149        R: *mut fmpz_poly_struct,
1150        d: *mut mp_limb_t,
1151        A: *const fmpz_poly_struct,
1152        B: *const fmpz_poly_struct,
1153    );
1154    pub fn _fmpz_poly_pseudo_divrem_cohen(
1155        Q: *mut fmpz,
1156        R: *mut fmpz,
1157        A: *const fmpz,
1158        lenA: mp_limb_signed_t,
1159        B: *const fmpz,
1160        lenB: mp_limb_signed_t,
1161    );
1162    pub fn fmpz_poly_pseudo_divrem_cohen(
1163        Q: *mut fmpz_poly_struct,
1164        R: *mut fmpz_poly_struct,
1165        A: *const fmpz_poly_struct,
1166        B: *const fmpz_poly_struct,
1167    );
1168    pub fn _fmpz_poly_pseudo_rem_cohen(
1169        R: *mut fmpz,
1170        A: *const fmpz,
1171        lenA: mp_limb_signed_t,
1172        B: *const fmpz,
1173        lenB: mp_limb_signed_t,
1174    );
1175    pub fn fmpz_poly_pseudo_rem_cohen(
1176        R: *mut fmpz_poly_struct,
1177        A: *const fmpz_poly_struct,
1178        B: *const fmpz_poly_struct,
1179    );
1180    pub fn _fmpz_poly_pseudo_divrem(
1181        Q: *mut fmpz,
1182        R: *mut fmpz,
1183        d: *const mp_limb_t,
1184        A: *const fmpz,
1185        A_len: mp_limb_signed_t,
1186        B: *const fmpz,
1187        B_len: mp_limb_signed_t,
1188        inv: *const fmpz_preinvn_struct,
1189    );
1190    pub fn fmpz_poly_pseudo_divrem(
1191        Q: *mut fmpz_poly_struct,
1192        R: *mut fmpz_poly_struct,
1193        d: *const mp_limb_t,
1194        A: *const fmpz_poly_struct,
1195        B: *const fmpz_poly_struct,
1196    );
1197    pub fn _fmpz_poly_pseudo_div(
1198        Q: *mut fmpz,
1199        d: *const mp_limb_t,
1200        A: *const fmpz,
1201        lenA: mp_limb_signed_t,
1202        B: *const fmpz,
1203        lenB: mp_limb_signed_t,
1204        inv: *const fmpz_preinvn_struct,
1205    );
1206    pub fn fmpz_poly_pseudo_div(
1207        Q: *mut fmpz_poly_struct,
1208        d: *const mp_limb_t,
1209        A: *const fmpz_poly_struct,
1210        B: *const fmpz_poly_struct,
1211    );
1212    pub fn _fmpz_poly_pseudo_rem(
1213        R: *mut fmpz,
1214        d: *const mp_limb_t,
1215        A: *const fmpz,
1216        lenA: mp_limb_signed_t,
1217        B: *const fmpz,
1218        lenB: mp_limb_signed_t,
1219        inv: *const fmpz_preinvn_struct,
1220    );
1221    pub fn fmpz_poly_pseudo_rem(
1222        R: *mut fmpz_poly_struct,
1223        d: *const mp_limb_t,
1224        A: *const fmpz_poly_struct,
1225        B: *const fmpz_poly_struct,
1226    );
1227    pub fn fmpz_poly_divlow_smodp(
1228        res: *mut fmpz,
1229        f: *const fmpz_poly_struct,
1230        g: *const fmpz_poly_struct,
1231        p: *const fmpz,
1232        n: mp_limb_signed_t,
1233    );
1234    pub fn fmpz_poly_divhigh_smodp(
1235        res: *mut fmpz,
1236        f: *const fmpz_poly_struct,
1237        g: *const fmpz_poly_struct,
1238        p: *const fmpz,
1239        n: mp_limb_signed_t,
1240    );
1241    pub fn _fmpz_poly_derivative(rpoly: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
1242    pub fn fmpz_poly_derivative(res: *mut fmpz_poly_struct, poly: *const fmpz_poly_struct);
1243    pub fn _fmpz_poly_evaluate_divconquer_fmpz(
1244        res: *mut fmpz,
1245        poly: *const fmpz,
1246        len: mp_limb_signed_t,
1247        a: *const fmpz,
1248    );
1249    pub fn fmpz_poly_evaluate_divconquer_fmpz(
1250        res: *mut fmpz,
1251        poly: *const fmpz_poly_struct,
1252        a: *const fmpz,
1253    );
1254    pub fn _fmpz_poly_evaluate_horner_fmpz(
1255        res: *mut fmpz,
1256        f: *const fmpz,
1257        len: mp_limb_signed_t,
1258        a: *const fmpz,
1259    );
1260    pub fn fmpz_poly_evaluate_horner_fmpz(
1261        res: *mut fmpz,
1262        f: *const fmpz_poly_struct,
1263        a: *const fmpz,
1264    );
1265    pub fn _fmpz_poly_evaluate_fmpz(
1266        res: *mut fmpz,
1267        f: *const fmpz,
1268        len: mp_limb_signed_t,
1269        a: *const fmpz,
1270    );
1271    pub fn fmpz_poly_evaluate_fmpz(res: *mut fmpz, f: *const fmpz_poly_struct, a: *const fmpz);
1272    pub fn _fmpz_poly_evaluate_horner_fmpq(
1273        rnum: *mut fmpz,
1274        rden: *mut fmpz,
1275        f: *const fmpz,
1276        len: mp_limb_signed_t,
1277        anum: *const fmpz,
1278        aden: *const fmpz,
1279    );
1280    pub fn fmpz_poly_evaluate_horner_fmpq(res: *mut fmpq, f: *mut fmpz_poly_struct, a: *mut fmpq);
1281    pub fn _fmpz_poly_evaluate_divconquer_fmpq(
1282        rnum: *mut fmpz,
1283        rden: *mut fmpz,
1284        f: *const fmpz,
1285        len: mp_limb_signed_t,
1286        anum: *const fmpz,
1287        aden: *const fmpz,
1288    );
1289    pub fn fmpz_poly_evaluate_divconquer_fmpq(
1290        res: *mut fmpq,
1291        f: *const fmpz_poly_struct,
1292        a: *const fmpq,
1293    );
1294    pub fn _fmpz_poly_evaluate_fmpq(
1295        rnum: *mut fmpz,
1296        rden: *mut fmpz,
1297        f: *const fmpz,
1298        len: mp_limb_signed_t,
1299        anum: *const fmpz,
1300        aden: *const fmpz,
1301    );
1302    pub fn fmpz_poly_evaluate_fmpq(res: *mut fmpq, f: *const fmpz_poly_struct, a: *const fmpq);
1303
1304    pub fn fmpz_poly_evaluate_mpq(
1305        res: *mut __mpq_struct,
1306        f: *const fmpz_poly_struct,
1307        a: *const __mpq_struct,
1308    );
1309    pub fn _fmpz_poly_evaluate_mod(
1310        poly: *const fmpz,
1311        len: mp_limb_signed_t,
1312        a: mp_limb_t,
1313        n: mp_limb_t,
1314        ninv: mp_limb_t,
1315    ) -> mp_limb_t;
1316    pub fn fmpz_poly_evaluate_mod(
1317        poly: *const fmpz_poly_struct,
1318        a: mp_limb_t,
1319        n: mp_limb_t,
1320    ) -> mp_limb_t;
1321    pub fn _fmpz_poly_evaluate_horner_d(poly: *const fmpz, n: mp_limb_signed_t, d: f64) -> f64;
1322    pub fn fmpz_poly_evaluate_horner_d(poly: *mut fmpz_poly_struct, d: f64) -> f64;
1323    pub fn _fmpz_poly_evaluate_horner_d_2exp(
1324        exp: *mut mp_limb_signed_t,
1325        poly: *const fmpz,
1326        n: mp_limb_signed_t,
1327        d: f64,
1328    ) -> f64;
1329    pub fn fmpz_poly_evaluate_horner_d_2exp(
1330        exp: *mut mp_limb_signed_t,
1331        poly: *const fmpz_poly_struct,
1332        d: f64,
1333    ) -> f64;
1334    pub fn _fmpz_poly_evaluate_horner_d_2exp2(
1335        exp: *mut mp_limb_signed_t,
1336        poly: *const fmpz,
1337        n: mp_limb_signed_t,
1338        d: f64,
1339        dexp: mp_limb_signed_t,
1340        prec_in: mp_limb_t,
1341    ) -> f64;
1342    pub fn fmpz_poly_evaluate_horner_d_2exp2(
1343        exp: *mut mp_limb_signed_t,
1344        poly: *const fmpz_poly_struct,
1345        d: f64,
1346        dexp: mp_limb_signed_t,
1347        prec: mp_limb_t,
1348    ) -> f64;
1349    pub fn _fmpz_poly_compose_horner(
1350        res: *mut fmpz,
1351        poly1: *const fmpz,
1352        len1: mp_limb_signed_t,
1353        poly2: *const fmpz,
1354        len2: mp_limb_signed_t,
1355    );
1356    pub fn fmpz_poly_compose_horner(
1357        res: *mut fmpz_poly_struct,
1358        poly1: *const fmpz_poly_struct,
1359        poly2: *const fmpz_poly_struct,
1360    );
1361    pub fn _fmpz_poly_compose_divconquer(
1362        res: *mut fmpz,
1363        poly1: *const fmpz,
1364        len1: mp_limb_signed_t,
1365        poly2: *const fmpz,
1366        len2: mp_limb_signed_t,
1367    );
1368    pub fn fmpz_poly_compose_divconquer(
1369        res: *mut fmpz_poly_struct,
1370        poly1: *const fmpz_poly_struct,
1371        poly2: *const fmpz_poly_struct,
1372    );
1373    pub fn _fmpz_poly_compose(
1374        res: *mut fmpz,
1375        poly1: *const fmpz,
1376        len1: mp_limb_signed_t,
1377        poly2: *const fmpz,
1378        len2: mp_limb_signed_t,
1379    );
1380    pub fn fmpz_poly_compose(
1381        res: *mut fmpz_poly_struct,
1382        poly1: *const fmpz_poly_struct,
1383        poly2: *const fmpz_poly_struct,
1384    );
1385    pub fn _fmpz_poly_taylor_shift_horner(poly: *mut fmpz, c: *const fmpz, n: mp_limb_signed_t);
1386    pub fn fmpz_poly_taylor_shift_horner(
1387        g: *mut fmpz_poly_struct,
1388        f: *const fmpz_poly_struct,
1389        c: *const fmpz,
1390    );
1391    pub fn _fmpz_poly_taylor_shift_divconquer(poly: *mut fmpz, c: *const fmpz, n: mp_limb_signed_t);
1392    pub fn fmpz_poly_taylor_shift_divconquer(
1393        g: *mut fmpz_poly_struct,
1394        f: *const fmpz_poly_struct,
1395        c: *const fmpz,
1396    );
1397    pub fn _fmpz_poly_taylor_shift_multi_mod(poly: *mut fmpz, c: *const fmpz, n: mp_limb_signed_t);
1398    pub fn fmpz_poly_taylor_shift_multi_mod(
1399        g: *mut fmpz_poly_struct,
1400        f: *const fmpz_poly_struct,
1401        c: *const fmpz,
1402    );
1403    pub fn _fmpz_poly_taylor_shift(poly: *mut fmpz, c: *const fmpz, n: mp_limb_signed_t);
1404    pub fn fmpz_poly_taylor_shift(
1405        g: *mut fmpz_poly_struct,
1406        f: *const fmpz_poly_struct,
1407        c: *const fmpz,
1408    );
1409    pub fn _fmpz_poly_compose_series_brent_kung(
1410        res: *mut fmpz,
1411        poly1: *const fmpz,
1412        len1: mp_limb_signed_t,
1413        poly2: *const fmpz,
1414        len2: mp_limb_signed_t,
1415        n: mp_limb_signed_t,
1416    );
1417    pub fn fmpz_poly_compose_series_brent_kung(
1418        res: *mut fmpz_poly_struct,
1419        poly1: *const fmpz_poly_struct,
1420        poly2: *const fmpz_poly_struct,
1421        n: mp_limb_signed_t,
1422    );
1423    pub fn _fmpz_poly_compose_series_horner(
1424        res: *mut fmpz,
1425        poly1: *const fmpz,
1426        len1: mp_limb_signed_t,
1427        poly2: *const fmpz,
1428        len2: mp_limb_signed_t,
1429        n: mp_limb_signed_t,
1430    );
1431    pub fn fmpz_poly_compose_series_horner(
1432        res: *mut fmpz_poly_struct,
1433        poly1: *const fmpz_poly_struct,
1434        poly2: *const fmpz_poly_struct,
1435        n: mp_limb_signed_t,
1436    );
1437    pub fn _fmpz_poly_compose_series(
1438        res: *mut fmpz,
1439        poly1: *const fmpz,
1440        len1: mp_limb_signed_t,
1441        poly2: *const fmpz,
1442        len2: mp_limb_signed_t,
1443        n: mp_limb_signed_t,
1444    );
1445    pub fn fmpz_poly_compose_series(
1446        res: *mut fmpz_poly_struct,
1447        poly1: *const fmpz_poly_struct,
1448        poly2: *const fmpz_poly_struct,
1449        n: mp_limb_signed_t,
1450    );
1451    pub fn _fmpz_poly_revert_series_lagrange(
1452        Qinv: *mut fmpz,
1453        Q: *const fmpz,
1454        Qlen: mp_limb_signed_t,
1455        n: mp_limb_signed_t,
1456    );
1457    pub fn fmpz_poly_revert_series_lagrange(
1458        Qinv: *mut fmpz_poly_struct,
1459        Q: *const fmpz_poly_struct,
1460        n: mp_limb_signed_t,
1461    );
1462    pub fn _fmpz_poly_revert_series_lagrange_fast(
1463        Qinv: *mut fmpz,
1464        Q: *const fmpz,
1465        Qlen: mp_limb_signed_t,
1466        n: mp_limb_signed_t,
1467    );
1468    pub fn fmpz_poly_revert_series_lagrange_fast(
1469        Qinv: *mut fmpz_poly_struct,
1470        Q: *const fmpz_poly_struct,
1471        n: mp_limb_signed_t,
1472    );
1473    pub fn _fmpz_poly_revert_series_newton(
1474        Qinv: *mut fmpz,
1475        Q: *const fmpz,
1476        Qlen: mp_limb_signed_t,
1477        n: mp_limb_signed_t,
1478    );
1479    pub fn fmpz_poly_revert_series_newton(
1480        Qinv: *mut fmpz_poly_struct,
1481        Q: *const fmpz_poly_struct,
1482        n: mp_limb_signed_t,
1483    );
1484    pub fn _fmpz_poly_revert_series(
1485        Qinv: *mut fmpz,
1486        Q: *const fmpz,
1487        Qlen: mp_limb_signed_t,
1488        n: mp_limb_signed_t,
1489    );
1490    pub fn fmpz_poly_revert_series(
1491        Qinv: *mut fmpz_poly_struct,
1492        Q: *const fmpz_poly_struct,
1493        n: mp_limb_signed_t,
1494    );
1495    pub fn _fmpz_poly_sqrtrem_classical(
1496        res: *mut fmpz,
1497        r: *mut fmpz,
1498        poly: *const fmpz,
1499        len: mp_limb_signed_t,
1500    ) -> c_int;
1501    pub fn fmpz_poly_sqrtrem_classical(
1502        b: *mut fmpz_poly_struct,
1503        r: *mut fmpz_poly_struct,
1504        a: *const fmpz_poly_struct,
1505    ) -> c_int;
1506    pub fn _fmpz_poly_sqrtrem_divconquer(
1507        res: *mut fmpz,
1508        r: *mut fmpz,
1509        poly: *const fmpz,
1510        len: mp_limb_signed_t,
1511        temp: *const fmpz,
1512    ) -> c_int;
1513    pub fn fmpz_poly_sqrtrem_divconquer(
1514        b: *mut fmpz_poly_struct,
1515        r: *mut fmpz_poly_struct,
1516        a: *const fmpz_poly_struct,
1517    ) -> c_int;
1518    pub fn _fmpz_poly_sqrt_classical(
1519        res: *mut fmpz,
1520        poly: *const fmpz,
1521        len: mp_limb_signed_t,
1522        exact: c_int,
1523    ) -> c_int;
1524    pub fn fmpz_poly_sqrt_classical(b: *mut fmpz_poly_struct, a: *const fmpz_poly_struct) -> c_int;
1525    pub fn _fmpz_poly_sqrt_divconquer(
1526        res: *mut fmpz,
1527        poly: *const fmpz,
1528        len: mp_limb_signed_t,
1529        exact: c_int,
1530    ) -> c_int;
1531    pub fn fmpz_poly_sqrt_divconquer(b: *mut fmpz_poly_struct, a: *const fmpz_poly_struct)
1532        -> c_int;
1533    pub fn _fmpz_poly_sqrt_KS(rop: *mut fmpz, op: *const fmpz, len: mp_limb_signed_t) -> c_int;
1534    pub fn fmpz_poly_sqrt_KS(b: *mut fmpz_poly_struct, a: *const fmpz_poly_struct) -> c_int;
1535    pub fn _fmpz_poly_sqrt(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t) -> c_int;
1536    pub fn fmpz_poly_sqrt(b: *mut fmpz_poly_struct, a: *const fmpz_poly_struct) -> c_int;
1537    pub fn _fmpz_poly_sqrt_series(
1538        res: *mut fmpz,
1539        poly: *const fmpz,
1540        len: mp_limb_signed_t,
1541        n: mp_limb_signed_t,
1542    ) -> c_int;
1543    pub fn fmpz_poly_sqrt_series(
1544        b: *mut fmpz_poly_struct,
1545        a: *const fmpz_poly_struct,
1546        n: mp_limb_signed_t,
1547    ) -> c_int;
1548    pub fn _fmpz_poly_power_sums_naive(
1549        res: *mut fmpz,
1550        poly: *const fmpz,
1551        len: mp_limb_signed_t,
1552        n: mp_limb_signed_t,
1553    );
1554    pub fn fmpz_poly_power_sums_naive(
1555        res: *mut fmpz_poly_struct,
1556        poly: *const fmpz_poly_struct,
1557        n: mp_limb_signed_t,
1558    );
1559    pub fn fmpz_poly_power_sums(
1560        res: *mut fmpz_poly_struct,
1561        poly: *const fmpz_poly_struct,
1562        n: mp_limb_signed_t,
1563    );
1564    pub fn _fmpz_poly_power_sums_to_poly(res: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
1565    pub fn fmpz_poly_power_sums_to_poly(res: *mut fmpz_poly_struct, Q: *const fmpz_poly_struct);
1566    pub fn _fmpz_poly_signature(
1567        r1: *mut mp_limb_signed_t,
1568        r2: *mut mp_limb_signed_t,
1569        poly: *const fmpz,
1570        len: mp_limb_signed_t,
1571    );
1572    pub fn fmpz_poly_signature(
1573        r1: *mut mp_limb_signed_t,
1574        r2: *mut mp_limb_signed_t,
1575        poly: *const fmpz_poly_struct,
1576    );
1577    pub fn _fmpz_poly_fprint(file: *mut FILE, poly: *const fmpz, len: mp_limb_signed_t) -> c_int;
1578    pub fn fmpz_poly_fprint(file: *mut FILE, poly: *const fmpz_poly_struct) -> c_int;
1579    pub fn _fmpz_poly_fprint_pretty(
1580        file: *mut FILE,
1581        poly: *const fmpz,
1582        len: mp_limb_signed_t,
1583        x: *const c_char,
1584    ) -> c_int;
1585    pub fn fmpz_poly_fprint_pretty(
1586        file: *mut FILE,
1587        poly: *mut fmpz_poly_struct,
1588        x: *const c_char,
1589    ) -> c_int;
1590    pub fn _fmpz_poly_print_pretty(
1591        poly: *const fmpz,
1592        len: mp_limb_signed_t,
1593        x: *const c_char,
1594    ) -> c_int;
1595    pub fn _fmpz_poly_print(poly: *const fmpz, n: mp_limb_signed_t) -> c_int;
1596    pub fn fmpz_poly_print(poly: *mut fmpz_poly_struct) -> c_int;
1597    pub fn fmpz_poly_print_pretty(poly: *mut fmpz_poly_struct, x: *const c_char) -> c_int;
1598    pub fn fmpz_poly_fread(file: *mut FILE, poly: *const fmpz_poly_struct) -> c_int;
1599    pub fn fmpz_poly_fread_pretty(
1600        file: *mut FILE,
1601        poly: *const fmpz_poly_struct,
1602        x: *mut *mut c_char,
1603    ) -> c_int;
1604    pub fn fmpz_poly_read(poly: *mut fmpz_poly_struct) -> c_int;
1605    pub fn fmpz_poly_read_pretty(poly: *mut fmpz_poly_struct, x: *mut *mut c_char) -> c_int;
1606    pub fn fmpz_poly_debug(poly: *mut fmpz_poly_struct);
1607    /*
1608    pub fn fmpz_poly_get_nmod_poly(res: *mut nmod_poly_struct, poly: *mut fmpz_poly);
1609    pub fn fmpz_poly_set_nmod_poly(res: *mut fmpz_poly_struct, poly: *mut nmod_poly_struct);
1610    pub fn fmpz_poly_set_nmod_poly_unsigned(
1611        res: *mut fmpz_poly_struct,
1612        poly: *mut nmod_poly_struct,
1613    );
1614    pub fn _fmpz_poly_CRT_ui_precomp(
1615        res: *mut fmpz,
1616        poly1: *const fmpz,
1617        len1: mp_limb_signed_t,
1618        m1: *mut fmpz,
1619        poly2: mp_srcptr,
1620        len2: mp_limb_signed_t,
1621        m2: mp_limb_t,
1622        m2inv: mp_limb_t,
1623        m1m2: *mut fmpz,
1624        c: mp_limb_t,
1625        sign: c_int,
1626    );
1627    pub fn _fmpz_poly_CRT_ui(
1628        res: *mut fmpz,
1629        poly1: *const fmpz,
1630        len1: mp_limb_signed_t,
1631        m1: *mut fmpz,
1632        poly2: mp_srcptr,
1633        len2: mp_limb_signed_t,
1634        m2: mp_limb_t,
1635        m2inv: mp_limb_t,
1636        sign: c_int,
1637    );
1638    pub fn fmpz_poly_CRT_ui(
1639        res: *mut fmpz_poly_struct,
1640        poly1: *mut fmpz_poly_struct,
1641        m1: *mut fmpz,
1642        poly2: *mut nmod_poly_struct,
1643        sign: c_int,
1644    );
1645    */
1646    pub fn _fmpz_poly_product_roots_fmpz_vec(poly: *mut fmpz, xs: *const fmpz, n: mp_limb_signed_t);
1647    pub fn fmpz_poly_product_roots_fmpz_vec(
1648        poly: *mut fmpz_poly_struct,
1649        xs: *const fmpz,
1650        n: mp_limb_signed_t,
1651    );
1652    pub fn _fmpz_poly_product_roots_fmpq_vec(poly: *mut fmpz, xs: *const fmpq, n: mp_limb_signed_t);
1653    pub fn fmpz_poly_product_roots_fmpq_vec(
1654        poly: *mut fmpz_poly_struct,
1655        xs: *const fmpq,
1656        n: mp_limb_signed_t,
1657    );
1658    pub fn _fmpz_poly_monomial_to_newton(poly: *mut fmpz, roots: *const fmpz, n: mp_limb_signed_t);
1659    pub fn _fmpz_poly_newton_to_monomial(poly: *mut fmpz, roots: *const fmpz, n: mp_limb_signed_t);
1660    pub fn fmpz_poly_evaluate_fmpz_vec(
1661        res: *mut fmpz,
1662        f: *const fmpz_poly_struct,
1663        a: *const fmpz,
1664        n: mp_limb_signed_t,
1665    );
1666    pub fn fmpz_poly_interpolate_fmpz_vec(
1667        poly: *mut fmpz_poly_struct,
1668        xs: *const fmpz,
1669        ys: *const fmpz,
1670        n: mp_limb_signed_t,
1671    );
1672    /*
1673    pub fn fmpz_poly_hensel_build_tree(
1674        link: *mut mp_limb_signed_t,
1675        v: *mut fmpz_poly_t,
1676        w: *mut fmpz_poly_t,
1677        fac: *mut nmod_poly_factor_struct,
1678    );
1679    */
1680    pub fn fmpz_poly_hensel_lift(
1681        Gout: *mut fmpz_poly_struct,
1682        Hout: *mut fmpz_poly_struct,
1683        Aout: *mut fmpz_poly_struct,
1684        Bout: *mut fmpz_poly_struct,
1685        f: *const fmpz_poly_struct,
1686        g: *const fmpz_poly_struct,
1687        h: *const fmpz_poly_struct,
1688        a: *const fmpz_poly_struct,
1689        b: *const fmpz_poly_struct,
1690        p: *const fmpz,
1691        p1: *const fmpz,
1692    );
1693    pub fn _fmpz_poly_hensel_lift_without_inverse(
1694        G: *mut fmpz,
1695        H: *mut fmpz,
1696        f: *const fmpz,
1697        lenF: mp_limb_signed_t,
1698        g: *const fmpz,
1699        lenG: mp_limb_signed_t,
1700        h: *const fmpz,
1701        lenH: mp_limb_signed_t,
1702        a: *const fmpz,
1703        lenA: mp_limb_signed_t,
1704        b: *const fmpz,
1705        lenB: mp_limb_signed_t,
1706        p: *const fmpz,
1707        p1: *const fmpz,
1708    );
1709    pub fn fmpz_poly_hensel_lift_without_inverse(
1710        Gout: *mut fmpz_poly_struct,
1711        Hout: *mut fmpz_poly_struct,
1712        f: *const fmpz_poly_struct,
1713        g: *const fmpz_poly_struct,
1714        h: *const fmpz_poly_struct,
1715        a: *const fmpz_poly_struct,
1716        b: *const fmpz_poly_struct,
1717        p: *const fmpz,
1718        p1: *const fmpz,
1719    );
1720    pub fn _fmpz_poly_hensel_lift_only_inverse(
1721        A: *mut fmpz,
1722        B: *mut fmpz,
1723        G: *const fmpz,
1724        lenG: mp_limb_signed_t,
1725        H: *const fmpz,
1726        lenH: mp_limb_signed_t,
1727        a: *const fmpz,
1728        lenA: mp_limb_signed_t,
1729        b: *const fmpz,
1730        lenB: mp_limb_signed_t,
1731        p: *const fmpz,
1732        p1: *const fmpz,
1733    );
1734    pub fn fmpz_poly_hensel_lift_only_inverse(
1735        Aout: *mut fmpz_poly_struct,
1736        Bout: *mut fmpz_poly_struct,
1737        G: *const fmpz_poly_struct,
1738        H: *const fmpz_poly_struct,
1739        a: *const fmpz_poly_struct,
1740        b: *const fmpz_poly_struct,
1741        p: *const fmpz,
1742        p1: *const fmpz,
1743    );
1744    pub fn fmpz_poly_hensel_lift_tree_recursive(
1745        link: *mut mp_limb_signed_t,
1746        v: *mut fmpz_poly_t,
1747        w: *mut fmpz_poly_t,
1748        f: *mut fmpz_poly_struct,
1749        j: mp_limb_signed_t,
1750        inv: mp_limb_signed_t,
1751        p0: *const fmpz,
1752        p1: *const fmpz,
1753    );
1754    pub fn fmpz_poly_hensel_lift_tree(
1755        link: *mut mp_limb_signed_t,
1756        v: *mut fmpz_poly_t,
1757        w: *mut fmpz_poly_t,
1758        f: *mut fmpz_poly_struct,
1759        r: mp_limb_signed_t,
1760        p: *const fmpz,
1761        e0: mp_limb_signed_t,
1762        e1: mp_limb_signed_t,
1763        inv: mp_limb_signed_t,
1764    );
1765    /*
1766    pub fn _fmpz_poly_hensel_start_lift(
1767        lifted_fac: *mut fmpz_poly_factor,
1768        link: *mut mp_limb_signed_t,
1769        v: *mut fmpz_poly_t,
1770        w: *mut fmpz_poly_t,
1771        f: *mut fmpz_poly_struct,
1772        local_fac: *mut nmod_poly_factor_struct,
1773        target_exp: mp_limb_signed_t,
1774    ) -> mp_limb_signed_t;
1775    pub fn _fmpz_poly_hensel_continue_lift(
1776        lifted_fac: *mut fmpz_poly_factor,
1777        link: *mut mp_limb_signed_t,
1778        v: *mut fmpz_poly_t,
1779        w: *mut fmpz_poly_t,
1780        f: *mut fmpz_poly_struct,
1781        prev: mp_limb_signed_t,
1782        curr: mp_limb_signed_t,
1783        N: mp_limb_signed_t,
1784        p: *mut fmpz,
1785    ) -> mp_limb_signed_t;
1786    pub fn fmpz_poly_hensel_lift_once(
1787        lifted_fac: *mut fmpz_poly_factor,
1788        f: *mut fmpz_poly_struct,
1789        local_fac: *mut nmod_poly_factor_struct,
1790        N: mp_limb_signed_t,
1791    );*/
1792    pub fn fmpz_poly_scalar_mul_mpz(
1793        poly1: *mut fmpz_poly_struct,
1794        poly2: *const fmpz_poly_struct,
1795        x: *const __mpz_struct,
1796    );
1797    pub fn fmpz_poly_scalar_divexact_mpz(
1798        poly1: *mut fmpz_poly_struct,
1799        poly2: *const fmpz_poly_struct,
1800        x: *const __mpz_struct,
1801    );
1802    pub fn fmpz_poly_scalar_fdiv_mpz(
1803        poly1: *mut fmpz_poly_struct,
1804        poly2: *const fmpz_poly_struct,
1805        x: *const __mpz_struct,
1806    );
1807    pub fn fmpz_poly_set_coeff_mpz(
1808        poly: *mut fmpz_poly_struct,
1809        n: mp_limb_signed_t,
1810        x: *const __mpz_struct,
1811    );
1812    pub fn fmpz_poly_get_coeff_mpz(
1813        x: *mut __mpz_struct,
1814        poly: *const fmpz_poly_struct,
1815        n: mp_limb_signed_t,
1816    );
1817    pub fn _fmpz_poly_bound_roots(bound: *mut fmpz, poly: *const fmpz, len: mp_limb_signed_t);
1818    pub fn fmpz_poly_bound_roots(bound: *mut fmpz, poly: *const fmpz_poly_struct);
1819    pub fn _fmpz_poly_num_real_roots_sturm(
1820        n_neg: *mut mp_limb_signed_t,
1821        n_pos: *mut mp_limb_signed_t,
1822        pol: *const fmpz,
1823        len: mp_limb_signed_t,
1824    );
1825    pub fn fmpz_poly_num_real_roots_sturm(poly: *const fmpz_poly_struct) -> mp_limb_signed_t;
1826    pub fn _fmpz_poly_num_real_roots(pol: *const fmpz, len: mp_limb_signed_t) -> mp_limb_signed_t;
1827    pub fn fmpz_poly_num_real_roots(poly: *const fmpz_poly_struct) -> mp_limb_signed_t;
1828    pub fn fmpz_poly_CLD_bound(res: *mut fmpz, f: *const fmpz_poly_struct, n: mp_limb_signed_t);
1829    pub fn _fmpz_poly_cyclotomic(
1830        a: *mut fmpz,
1831        n: mp_limb_t,
1832        factors: mp_ptr,
1833        num_factors: mp_limb_signed_t,
1834        phi: mp_limb_t,
1835    );
1836    pub fn fmpz_poly_cyclotomic(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1837    pub fn _fmpz_poly_is_cyclotomic(poly: *const fmpz, len: mp_limb_signed_t) -> mp_limb_t;
1838    pub fn fmpz_poly_is_cyclotomic(poly: *const fmpz_poly_struct) -> mp_limb_t;
1839    pub fn _fmpz_poly_cos_minpoly(f: *mut fmpz, n: mp_limb_t);
1840    pub fn fmpz_poly_cos_minpoly(f: *mut fmpz_poly_struct, n: mp_limb_t);
1841    pub fn _fmpz_poly_swinnerton_dyer(T: *mut fmpz, n: mp_limb_t);
1842    pub fn fmpz_poly_swinnerton_dyer(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1843    pub fn _fmpz_poly_chebyshev_t(coeffs: *mut fmpz, n: mp_limb_t);
1844    pub fn fmpz_poly_chebyshev_t(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1845    pub fn _fmpz_poly_chebyshev_u(coeffs: *mut fmpz, n: mp_limb_t);
1846    pub fn fmpz_poly_chebyshev_u(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1847    pub fn _fmpz_poly_legendre_pt(coeffs: *mut fmpz, n: mp_limb_t);
1848    pub fn fmpz_poly_legendre_pt(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1849    pub fn _fmpz_poly_hermite_h(coeffs: *mut fmpz, n: mp_limb_t);
1850    pub fn fmpz_poly_hermite_h(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1851    pub fn _fmpz_poly_hermite_he(coeffs: *mut fmpz, n: mp_limb_t);
1852    pub fn fmpz_poly_hermite_he(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1853    pub fn _fmpz_poly_fibonacci(coeffs: *mut fmpz, n: mp_limb_t);
1854    pub fn fmpz_poly_fibonacci(poly: *mut fmpz_poly_struct, n: mp_limb_t);
1855    pub fn _fmpz_poly_eta_qexp(f: *mut fmpz, e: mp_limb_signed_t, n: mp_limb_signed_t);
1856    pub fn fmpz_poly_eta_qexp(f: *mut fmpz_poly_struct, e: mp_limb_signed_t, n: mp_limb_signed_t);
1857    pub fn _fmpz_poly_theta_qexp(f: *mut fmpz, e: mp_limb_signed_t, n: mp_limb_signed_t);
1858    pub fn fmpz_poly_theta_qexp(f: *mut fmpz_poly_struct, e: mp_limb_signed_t, n: mp_limb_signed_t);
1859    pub fn fmpz_poly_add_si(
1860        res: *mut fmpz_poly_struct,
1861        poly: *const fmpz_poly_struct,
1862        c: mp_limb_signed_t,
1863    );
1864    pub fn fmpz_poly_sub_si(
1865        res: *mut fmpz_poly_struct,
1866        poly: *const fmpz_poly_struct,
1867        c: mp_limb_signed_t,
1868    );
1869    pub fn fmpz_poly_si_sub(
1870        res: *mut fmpz_poly_struct,
1871        c: mp_limb_signed_t,
1872        poly: *const fmpz_poly_struct,
1873    );
1874    pub fn fmpz_poly_add_fmpz(
1875        res: *mut fmpz_poly_struct,
1876        poly: *const fmpz_poly_struct,
1877        c: *const fmpz,
1878    );
1879    pub fn fmpz_poly_sub_fmpz(
1880        res: *mut fmpz_poly_struct,
1881        poly: *const fmpz_poly_struct,
1882        c: *const fmpz,
1883    );
1884    pub fn fmpz_poly_fmpz_sub(
1885        res: *mut fmpz_poly_struct,
1886        c: *const fmpz,
1887        poly: *const fmpz_poly_struct,
1888    );
1889}