Skip to main content

flint_sys/
fmpz_poly.rs

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