flint_sys/
fmpq_poly.rs

1#![allow(non_camel_case_types)]
2
3//! See the [FLINT documentation](http://flintlib.org/doc/fmpq_poly.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpq::fmpq;
8use crate::fmpz::{fmpz, fmpz_preinvn_struct, fmpz_t};
9use crate::fmpz_poly::fmpz_poly_struct;
10use libc::{c_char, c_int, FILE};
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone, Hash)]
14pub struct fmpq_poly_struct {
15    pub coeffs: *mut fmpz,
16    pub den: fmpz_t,
17    pub alloc: mp_limb_signed_t,
18    pub length: mp_limb_signed_t,
19}
20
21pub type fmpq_poly_t = [fmpq_poly_struct; 1usize];
22
23#[repr(C)]
24#[derive(Debug, Copy, Clone)]
25pub struct fmpq_poly_powers_precomp_struct {
26    pub powers: *mut fmpq_poly_struct,
27    pub len: mp_limb_signed_t,
28}
29
30pub type fmpq_poly_powers_precomp_t = [fmpq_poly_powers_precomp_struct; 1usize];
31
32extern "C" {
33    pub fn fmpq_poly_init(poly: *mut fmpq_poly_struct);
34    pub fn fmpq_poly_init2(poly: *mut fmpq_poly_struct, alloc: mp_limb_signed_t);
35    pub fn fmpq_poly_realloc(poly: *mut fmpq_poly_struct, alloc: mp_limb_signed_t);
36    pub fn fmpq_poly_fit_length(poly: *mut fmpq_poly_struct, len: mp_limb_signed_t);
37    pub fn _fmpq_poly_set_length(poly: *mut fmpq_poly_struct, len: mp_limb_signed_t);
38    pub fn fmpq_poly_clear(poly: *mut fmpq_poly_struct);
39    pub fn _fmpq_poly_normalise(poly: *mut fmpq_poly_struct);
40    pub fn fmpq_poly_get_numerator(res: *mut fmpz_poly_struct, poly: *const fmpq_poly_struct);
41    pub fn fmpq_poly_get_denominator(den: *mut fmpz, poly: *const fmpq_poly_struct);
42    pub fn _fmpq_poly_canonicalise(rpoly: *mut fmpz, den: *mut fmpz, len: mp_limb_signed_t);
43    pub fn fmpq_poly_canonicalise(poly: *mut fmpq_poly_struct);
44    pub fn _fmpq_poly_is_canonical(
45        poly: *const fmpz,
46        den: *const fmpz,
47        len: mp_limb_signed_t,
48    ) -> c_int;
49    pub fn fmpq_poly_is_canonical(poly: *const fmpq_poly_struct) -> c_int;
50    pub fn fmpq_poly_degree(poly: *const fmpq_poly_struct) -> mp_limb_signed_t;
51    pub fn fmpq_poly_length(poly: *const fmpq_poly_struct) -> mp_limb_signed_t;
52    pub fn fmpq_poly_randtest(
53        f: *mut fmpq_poly_struct,
54        state: *const flint_rand_s,
55        len: mp_limb_signed_t,
56        bits_in: mp_limb_t,
57    );
58    pub fn fmpq_poly_randtest_unsigned(
59        f: *mut fmpq_poly_struct,
60        state: *const flint_rand_s,
61        len: mp_limb_signed_t,
62        bits_in: mp_limb_t,
63    );
64    pub fn fmpq_poly_randtest_not_zero(
65        f: *mut fmpq_poly_struct,
66        state: *const flint_rand_s,
67        len: mp_limb_signed_t,
68        bits_in: mp_limb_t,
69    );
70    pub fn fmpq_poly_set(poly1: *mut fmpq_poly_struct, poly2: *const fmpq_poly_struct);
71    pub fn fmpq_poly_set_si(poly: *mut fmpq_poly_struct, x: mp_limb_signed_t);
72    pub fn fmpq_poly_set_ui(poly: *mut fmpq_poly_struct, x: mp_limb_t);
73    pub fn fmpq_poly_set_fmpz(poly: *mut fmpq_poly_struct, x: *const fmpz);
74    pub fn fmpq_poly_set_fmpq(poly: *mut fmpq_poly_struct, x: *const fmpq);
75    pub fn fmpq_poly_set_mpz(poly: *mut fmpq_poly_struct, x: *const __mpz_struct);
76    pub fn fmpq_poly_set_mpq(poly: *mut fmpq_poly_struct, x: *const __mpq_struct);
77    pub fn fmpq_poly_set_fmpz_poly(rop: *mut fmpq_poly_struct, op: *const fmpz_poly_struct);
78    //pub fn _fmpq_poly_get_nmod_poly(rop: *mut nmod_poly_struct, op: *const fmpq_poly_struct);
79    /*
80    pub fn fmpq_poly_get_nmod_poly_den(
81        rop: *mut nmod_poly_struct,
82        op: *const fmpq_poly_struct,
83        den: c_int,
84    );
85    pub fn fmpq_poly_get_nmod_poly(rop: *mut nmod_poly_struct, op: *const fmpq_poly_struct);
86    pub fn fmpq_poly_set_nmod_poly(rop: *mut fmpq_poly_struct, op: *const nmod_poly_struct);
87    */
88    pub fn _fmpq_poly_set_array_mpq(
89        poly: *mut fmpz,
90        den: *mut fmpz,
91        a: *const mpq_t,
92        n: mp_limb_signed_t,
93    );
94    pub fn fmpq_poly_set_array_mpq(
95        poly: *mut fmpq_poly_struct,
96        a: *const mpq_t,
97        n: mp_limb_signed_t,
98    );
99    pub fn _fmpq_poly_set_str(
100        poly: *mut fmpz,
101        den: *mut fmpz,
102        str_: *const c_char,
103        len: mp_limb_signed_t,
104    ) -> c_int;
105    pub fn fmpq_poly_set_str(poly: *mut fmpq_poly_struct, str_: *const c_char) -> c_int;
106    pub fn fmpq_poly_get_str(poly: *const fmpq_poly_struct) -> *mut c_char;
107    pub fn fmpq_poly_get_str_pretty(
108        poly: *const fmpq_poly_struct,
109        var: *const c_char,
110    ) -> *mut c_char;
111    pub fn _fmpq_poly_get_str_pretty(
112        poly: *const fmpz,
113        den: *const fmpz,
114        len: mp_limb_signed_t,
115        var: *const c_char,
116    ) -> *mut c_char;
117    pub fn fmpq_poly_zero(poly: *mut fmpq_poly_struct);
118    pub fn fmpq_poly_one(poly: *mut fmpq_poly_struct);
119    pub fn fmpq_poly_neg(poly1: *mut fmpq_poly_struct, poly2: *const fmpq_poly_struct);
120    pub fn fmpq_poly_inv(poly1: *mut fmpq_poly_struct, poly2: *const fmpq_poly_struct);
121    pub fn fmpq_poly_swap(poly1: *mut fmpq_poly_struct, poly2: *mut fmpq_poly_struct);
122    pub fn fmpq_poly_truncate(poly: *mut fmpq_poly_struct, n: mp_limb_signed_t);
123    pub fn fmpq_poly_set_trunc(
124        res: *mut fmpq_poly_struct,
125        poly: *const fmpq_poly_struct,
126        n: mp_limb_signed_t,
127    );
128    pub fn fmpq_poly_get_slice(
129        rop: *mut fmpq_poly_struct,
130        op: *const fmpq_poly_struct,
131        i: mp_limb_signed_t,
132        j: mp_limb_signed_t,
133    );
134    pub fn fmpq_poly_reverse(
135        res: *mut fmpq_poly_struct,
136        poly: *const fmpq_poly_struct,
137        n: mp_limb_signed_t,
138    );
139    pub fn fmpq_poly_get_coeff_fmpz(
140        x: *mut fmpz,
141        poly: *const fmpq_poly_struct,
142        n: mp_limb_signed_t,
143    );
144    pub fn fmpq_poly_get_coeff_fmpq(
145        x: *mut fmpq,
146        poly: *const fmpq_poly_struct,
147        n: mp_limb_signed_t,
148    );
149    pub fn fmpq_poly_get_coeff_mpq(
150        x: *mut __mpq_struct,
151        poly: *const fmpq_poly_struct,
152        n: mp_limb_signed_t,
153    );
154    pub fn fmpq_poly_set_coeff_si(
155        poly: *mut fmpq_poly_struct,
156        n: mp_limb_signed_t,
157        x: mp_limb_signed_t,
158    );
159    pub fn fmpq_poly_set_coeff_ui(poly: *mut fmpq_poly_struct, n: mp_limb_signed_t, x: mp_limb_t);
160    pub fn fmpq_poly_set_coeff_fmpz(
161        poly: *mut fmpq_poly_struct,
162        n: mp_limb_signed_t,
163        x: *const fmpz,
164    );
165    pub fn fmpq_poly_set_coeff_fmpq(
166        poly: *mut fmpq_poly_struct,
167        n: mp_limb_signed_t,
168        x: *const fmpq,
169    );
170    pub fn fmpq_poly_set_coeff_mpz(
171        poly: *mut fmpq_poly_struct,
172        n: mp_limb_signed_t,
173        x: *const __mpz_struct,
174    );
175    pub fn fmpq_poly_set_coeff_mpq(
176        poly: *mut fmpq_poly_struct,
177        n: mp_limb_signed_t,
178        x: *const __mpq_struct,
179    );
180    pub fn fmpq_poly_equal(poly1: *const fmpq_poly_struct, poly2: *const fmpq_poly_struct)
181        -> c_int;
182    pub fn _fmpq_poly_cmp(
183        lpoly: *const fmpz,
184        lden: *const fmpz,
185        rpoly: *const fmpz,
186        rden: *const fmpz,
187        len: mp_limb_signed_t,
188    ) -> c_int;
189    pub fn fmpq_poly_cmp(left: *const fmpq_poly_struct, right: *const fmpq_poly_struct) -> c_int;
190    pub fn _fmpq_poly_equal_trunc(
191        poly1: *const fmpz,
192        den1: *const fmpz,
193        len1: mp_limb_signed_t,
194        poly2: *const fmpz,
195        den2: *const fmpz,
196        len2: mp_limb_signed_t,
197        n: mp_limb_signed_t,
198    ) -> c_int;
199    pub fn fmpq_poly_equal_trunc(
200        poly1: *const fmpq_poly_struct,
201        poly2: *const fmpq_poly_struct,
202        n: mp_limb_signed_t,
203    ) -> c_int;
204    pub fn fmpq_poly_is_zero(poly: *const fmpq_poly_struct) -> c_int;
205    pub fn fmpq_poly_is_one(poly: *const fmpq_poly_struct) -> c_int;
206    pub fn fmpq_poly_is_gen(op: *const fmpq_poly_struct) -> c_int;
207    pub fn fmpq_poly_add_si(
208        res: *mut fmpq_poly_struct,
209        poly: *const fmpq_poly_struct,
210        c: mp_limb_signed_t,
211    );
212    pub fn fmpq_poly_sub_si(
213        res: *mut fmpq_poly_struct,
214        poly: *const fmpq_poly_struct,
215        c: mp_limb_signed_t,
216    );
217    pub fn fmpq_poly_si_sub(
218        res: *mut fmpq_poly_struct,
219        c: mp_limb_signed_t,
220        poly: *const fmpq_poly_struct,
221    );
222    pub fn fmpq_poly_add_fmpz(
223        res: *mut fmpq_poly_struct,
224        poly: *const fmpq_poly_struct,
225        c: *const fmpz,
226    );
227    pub fn fmpq_poly_sub_fmpz(
228        res: *mut fmpq_poly_struct,
229        poly: *const fmpq_poly_struct,
230        c: *const fmpz,
231    );
232    pub fn fmpq_poly_fmpz_sub(
233        res: *mut fmpq_poly_struct,
234        c: *const fmpz,
235        poly: *const fmpq_poly_struct,
236    );
237    pub fn fmpq_poly_add_fmpq(
238        res: *mut fmpq_poly_struct,
239        poly: *const fmpq_poly_struct,
240        c: *const fmpq,
241    );
242    pub fn fmpq_poly_sub_fmpq(
243        res: *mut fmpq_poly_struct,
244        poly: *const fmpq_poly_struct,
245        c: *const fmpq,
246    );
247    pub fn fmpq_poly_fmpq_sub(
248        res: *mut fmpq_poly_struct,
249        c: *const fmpq,
250        poly: *const fmpq_poly_struct,
251    );
252    pub fn _fmpq_poly_add(
253        rpoly: *mut fmpz,
254        rden: *mut fmpz,
255        poly1: *const fmpz,
256        den1: *const fmpz,
257        len1: mp_limb_signed_t,
258        poly2: *const fmpz,
259        den2: *const fmpz,
260        len2: mp_limb_signed_t,
261    );
262    pub fn fmpq_poly_add(
263        res: *mut fmpq_poly_struct,
264        poly1: *const fmpq_poly_struct,
265        poly2: *const fmpq_poly_struct,
266    );
267    pub fn _fmpq_poly_add_can(
268        rpoly: *mut fmpz,
269        rden: *mut fmpz,
270        poly1: *const fmpz,
271        den1: *const fmpz,
272        len1: mp_limb_signed_t,
273        poly2: *const fmpz,
274        den2: *const fmpz,
275        len2: mp_limb_signed_t,
276        can: c_int,
277    );
278    pub fn fmpq_poly_add_can(
279        res: *mut fmpq_poly_struct,
280        poly1: *const fmpq_poly_struct,
281        poly2: *const fmpq_poly_struct,
282        can: c_int,
283    );
284    pub fn _fmpq_poly_add_series(
285        rpoly: *mut fmpz,
286        rden: *mut fmpz,
287        poly1: *const fmpz,
288        den1: *const fmpz,
289        len1: mp_limb_signed_t,
290        poly2: *const fmpz,
291        den2: *const fmpz,
292        len2: mp_limb_signed_t,
293        n: mp_limb_signed_t,
294    );
295    pub fn fmpq_poly_add_series(
296        res: *mut fmpq_poly_struct,
297        poly1: *const fmpq_poly_struct,
298        poly2: *const fmpq_poly_struct,
299        n: mp_limb_signed_t,
300    );
301    pub fn _fmpq_poly_add_series_can(
302        rpoly: *mut fmpz,
303        rden: *mut fmpz,
304        poly1: *const fmpz,
305        den1: *const fmpz,
306        len1: mp_limb_signed_t,
307        poly2: *const fmpz,
308        den2: *const fmpz,
309        len2: mp_limb_signed_t,
310        n: mp_limb_signed_t,
311        can: c_int,
312    );
313    pub fn fmpq_poly_add_series_can(
314        res: *mut fmpq_poly_struct,
315        poly1: *const fmpq_poly_struct,
316        poly2: *const fmpq_poly_struct,
317        n: mp_limb_signed_t,
318        can: c_int,
319    );
320    pub fn _fmpq_poly_sub(
321        rpoly: *mut fmpz,
322        rden: *mut fmpz,
323        poly1: *const fmpz,
324        den1: *const fmpz,
325        len1: mp_limb_signed_t,
326        poly2: *const fmpz,
327        den2: *const fmpz,
328        len2: mp_limb_signed_t,
329    );
330    pub fn fmpq_poly_sub(
331        res: *mut fmpq_poly_struct,
332        poly1: *const fmpq_poly_struct,
333        poly2: *const fmpq_poly_struct,
334    );
335    pub fn _fmpq_poly_sub_can(
336        rpoly: *mut fmpz,
337        rden: *mut fmpz,
338        poly1: *const fmpz,
339        den1: *const fmpz,
340        len1: mp_limb_signed_t,
341        poly2: *const fmpz,
342        den2: *const fmpz,
343        len2: mp_limb_signed_t,
344        can: c_int,
345    );
346    pub fn fmpq_poly_sub_can(
347        res: *mut fmpq_poly_struct,
348        poly1: *const fmpq_poly_struct,
349        poly2: *const fmpq_poly_struct,
350        can: c_int,
351    );
352    pub fn _fmpq_poly_sub_series(
353        rpoly: *mut fmpz,
354        rden: *const fmpz,
355        poly1: *const fmpz,
356        den1: *const fmpz,
357        len1: mp_limb_signed_t,
358        poly2: *const fmpz,
359        den2: *const fmpz,
360        len2: mp_limb_signed_t,
361        n: mp_limb_signed_t,
362    );
363    pub fn fmpq_poly_sub_series(
364        res: *mut fmpq_poly_struct,
365        poly1: *const fmpq_poly_struct,
366        poly2: *const fmpq_poly_struct,
367        n: mp_limb_signed_t,
368    );
369    pub fn _fmpq_poly_sub_series_can(
370        rpoly: *mut fmpz,
371        rden: *mut fmpz,
372        poly1: *const fmpz,
373        den1: *const fmpz,
374        len1: mp_limb_signed_t,
375        poly2: *const fmpz,
376        den2: *const fmpz,
377        len2: mp_limb_signed_t,
378        n: mp_limb_signed_t,
379        can: c_int,
380    );
381    pub fn fmpq_poly_sub_series_can(
382        res: *mut fmpq_poly_struct,
383        poly1: *const fmpq_poly_struct,
384        poly2: *const fmpq_poly_struct,
385        n: mp_limb_signed_t,
386        can: c_int,
387    );
388    pub fn _fmpq_poly_scalar_mul_si(
389        rpoly: *mut fmpz,
390        rden: *mut fmpz,
391        poly: *const fmpz,
392        den: *const fmpz,
393        len: mp_limb_signed_t,
394        c: mp_limb_signed_t,
395    );
396    pub fn _fmpq_poly_scalar_mul_ui(
397        rpoly: *mut fmpz,
398        rden: *mut fmpz,
399        poly: *const fmpz,
400        den: *const fmpz,
401        len: mp_limb_signed_t,
402        c: mp_limb_t,
403    );
404    pub fn _fmpq_poly_scalar_mul_fmpz(
405        rpoly: *mut fmpz,
406        rden: *mut fmpz,
407        poly: *const fmpz,
408        den: *const fmpz,
409        len: mp_limb_signed_t,
410        c: *const fmpz,
411    );
412    pub fn _fmpq_poly_scalar_mul_fmpq(
413        rpoly: *mut fmpz,
414        rden: *mut fmpz,
415        poly: *const fmpz,
416        den: *const fmpz,
417        len: mp_limb_signed_t,
418        r: *const fmpz,
419        s: *const fmpz,
420    );
421    pub fn fmpq_poly_scalar_mul_si(
422        rop: *mut fmpq_poly_struct,
423        op: *const fmpq_poly_struct,
424        c: mp_limb_signed_t,
425    );
426    pub fn fmpq_poly_scalar_mul_ui(
427        rop: *mut fmpq_poly_struct,
428        op: *const fmpq_poly_struct,
429        c: mp_limb_t,
430    );
431    pub fn fmpq_poly_scalar_mul_fmpz(
432        rop: *mut fmpq_poly_struct,
433        op: *const fmpq_poly_struct,
434        c: *const fmpz,
435    );
436    pub fn fmpq_poly_scalar_mul_fmpq(
437        rop: *mut fmpq_poly_struct,
438        op: *const fmpq_poly_struct,
439        c: *const fmpq,
440    );
441    pub fn fmpq_poly_scalar_mul_mpz(
442        rop: *mut fmpq_poly_struct,
443        op: *const fmpq_poly_struct,
444        c: *const __mpz_struct,
445    );
446    pub fn fmpq_poly_scalar_mul_mpq(
447        rop: *mut fmpq_poly_struct,
448        op: *const fmpq_poly_struct,
449        c: *const __mpq_struct,
450    );
451    pub fn _fmpq_poly_scalar_div_si(
452        rpoly: *mut fmpz,
453        rden: *mut fmpz,
454        poly: *const fmpz,
455        den: *const fmpz,
456        len: mp_limb_signed_t,
457        c: mp_limb_signed_t,
458    );
459    pub fn _fmpq_poly_scalar_div_ui(
460        rpoly: *mut fmpz,
461        rden: *mut fmpz,
462        poly: *const fmpz,
463        den: *const fmpz,
464        len: mp_limb_signed_t,
465        c: mp_limb_t,
466    );
467    pub fn _fmpq_poly_scalar_div_fmpz(
468        rpoly: *mut fmpz,
469        rden: *mut fmpz,
470        poly: *const fmpz,
471        den: *const fmpz,
472        len: mp_limb_signed_t,
473        c: *const fmpz,
474    );
475    pub fn _fmpq_poly_scalar_div_fmpq(
476        rpoly: *mut fmpz,
477        rden: *mut fmpz,
478        poly: *const fmpz,
479        den: *const fmpz,
480        len: mp_limb_signed_t,
481        r: *const fmpz,
482        s: *const fmpz,
483    );
484    pub fn fmpq_poly_scalar_div_si(
485        rop: *mut fmpq_poly_struct,
486        op: *const fmpq_poly_struct,
487        c: mp_limb_signed_t,
488    );
489    pub fn fmpq_poly_scalar_div_ui(
490        rop: *mut fmpq_poly_struct,
491        op: *const fmpq_poly_struct,
492        c: mp_limb_t,
493    );
494    pub fn fmpq_poly_scalar_div_fmpz(
495        rop: *mut fmpq_poly_struct,
496        op: *const fmpq_poly_struct,
497        c: *const fmpz,
498    );
499    pub fn fmpq_poly_scalar_div_fmpq(
500        rop: *mut fmpq_poly_struct,
501        op: *const fmpq_poly_struct,
502        c: *const fmpq,
503    );
504    pub fn fmpq_poly_scalar_div_mpz(
505        rop: *mut fmpq_poly_struct,
506        op: *const fmpq_poly_struct,
507        c: *const __mpz_struct,
508    );
509    pub fn fmpq_poly_scalar_div_mpq(
510        rop: *mut fmpq_poly_struct,
511        op: *const fmpq_poly_struct,
512        c: *const __mpq_struct,
513    );
514    pub fn _fmpq_poly_mul(
515        rpoly: *mut fmpz,
516        rden: *mut fmpz,
517        poly1: *const fmpz,
518        den1: *const fmpz,
519        len1: mp_limb_signed_t,
520        poly2: *const fmpz,
521        den2: *const fmpz,
522        len2: mp_limb_signed_t,
523    );
524    pub fn fmpq_poly_mul(
525        res: *mut fmpq_poly_struct,
526        poly1: *const fmpq_poly_struct,
527        poly2: *const fmpq_poly_struct,
528    );
529    pub fn _fmpq_poly_mullow(
530        rpoly: *mut fmpz,
531        rden: *mut fmpz,
532        poly1: *const fmpz,
533        den1: *const fmpz,
534        len1: mp_limb_signed_t,
535        poly2: *const fmpz,
536        den2: *const fmpz,
537        len2: mp_limb_signed_t,
538        n: mp_limb_signed_t,
539    );
540    pub fn fmpq_poly_mullow(
541        res: *mut fmpq_poly_struct,
542        poly1: *const fmpq_poly_struct,
543        poly2: *const fmpq_poly_struct,
544        n: mp_limb_signed_t,
545    );
546    pub fn fmpq_poly_addmul(
547        rop: *mut fmpq_poly_struct,
548        op1: *const fmpq_poly_struct,
549        op2: *const fmpq_poly_struct,
550    );
551    pub fn fmpq_poly_submul(
552        rop: *mut fmpq_poly_struct,
553        op1: *const fmpq_poly_struct,
554        op2: *const fmpq_poly_struct,
555    );
556    pub fn _fmpq_poly_pow(
557        rpoly: *mut fmpz,
558        rden: *mut fmpz,
559        poly: *const fmpz,
560        den: *const fmpz,
561        len: mp_limb_signed_t,
562        e: mp_limb_t,
563    );
564    pub fn fmpq_poly_pow(rpoly: *mut fmpq_poly_struct, poly: *const fmpq_poly_struct, e: mp_limb_t);
565    pub fn _fmpq_poly_pow_trunc(
566        res: *mut fmpz,
567        resden: *mut fmpz,
568        f: *const fmpz,
569        fden: *const fmpz,
570        flen: mp_limb_signed_t,
571        exp: mp_limb_t,
572        len: mp_limb_signed_t,
573    );
574    pub fn fmpq_poly_pow_trunc(
575        res: *mut fmpq_poly_struct,
576        poly: *const fmpq_poly_struct,
577        exp: mp_limb_t,
578        len: mp_limb_signed_t,
579    );
580    pub fn fmpq_poly_shift_left(
581        res: *mut fmpq_poly_struct,
582        poly: *const fmpq_poly_struct,
583        n: mp_limb_signed_t,
584    );
585    pub fn fmpq_poly_shift_right(
586        res: *mut fmpq_poly_struct,
587        poly: *const fmpq_poly_struct,
588        n: mp_limb_signed_t,
589    );
590    pub fn _fmpq_poly_divrem(
591        Q: *mut fmpz,
592        q: *mut fmpz,
593        R: *const fmpz,
594        r: *const fmpz,
595        A: *const fmpz,
596        a: *const fmpz,
597        lenA: mp_limb_signed_t,
598        B: *const fmpz,
599        b: *const fmpz,
600        lenB: mp_limb_signed_t,
601        inv: *const fmpz_preinvn_struct,
602    );
603    pub fn fmpq_poly_divrem(
604        Q: *mut fmpq_poly_struct,
605        R: *mut fmpq_poly_struct,
606        poly1: *const fmpq_poly_struct,
607        poly2: *const fmpq_poly_struct,
608    );
609    pub fn _fmpq_poly_div(
610        Q: *mut fmpz,
611        q: *mut fmpz,
612        A: *const fmpz,
613        a: *const fmpz,
614        lenA: mp_limb_signed_t,
615        B: *const fmpz,
616        b: *const fmpz,
617        lenB: mp_limb_signed_t,
618        inv: *const fmpz_preinvn_struct,
619    );
620    pub fn fmpq_poly_div(
621        Q: *mut fmpq_poly_struct,
622        poly1: *const fmpq_poly_struct,
623        poly2: *const fmpq_poly_struct,
624    );
625    pub fn _fmpq_poly_rem(
626        R: *mut fmpz,
627        r: *mut fmpz,
628        A: *const fmpz,
629        a: *const fmpz,
630        lenA: mp_limb_signed_t,
631        B: *const fmpz,
632        b: *const fmpz,
633        lenB: mp_limb_signed_t,
634        inv: *const fmpz_preinvn_struct,
635    );
636    pub fn fmpq_poly_rem(
637        R: *mut fmpq_poly_struct,
638        poly1: *const fmpq_poly_struct,
639        poly2: *const fmpq_poly_struct,
640    );
641    pub fn _fmpq_poly_powers_precompute(
642        B: *const fmpz,
643        denB: *mut fmpz,
644        len: mp_limb_signed_t,
645    ) -> *mut fmpq_poly_struct;
646    pub fn fmpq_poly_powers_precompute(
647        pinv: *mut fmpq_poly_powers_precomp_struct,
648        poly: *const fmpq_poly_struct,
649    );
650    pub fn _fmpq_poly_powers_clear(powers: *const fmpq_poly_struct, len: mp_limb_signed_t);
651    pub fn fmpq_poly_powers_clear(pinv: *const fmpq_poly_powers_precomp_struct);
652    pub fn _fmpq_poly_rem_powers_precomp(
653        A: *mut fmpz,
654        denA: *mut fmpz,
655        m: mp_limb_signed_t,
656        B: *const fmpz,
657        denB: *const fmpz,
658        n: mp_limb_signed_t,
659        powers: *const fmpq_poly_struct,
660    );
661    pub fn fmpq_poly_rem_powers_precomp(
662        R: *mut fmpq_poly_struct,
663        A: *const fmpq_poly_struct,
664        B: *const fmpq_poly_struct,
665        B_inv: *const fmpq_poly_powers_precomp_struct,
666    );
667    pub fn _fmpq_poly_divides(
668        qpoly: *mut fmpz,
669        qden: *mut fmpz,
670        poly1: *const fmpz,
671        den1: *const fmpz,
672        len1: mp_limb_signed_t,
673        poly2: *const fmpz,
674        den2: *const fmpz,
675        len2: mp_limb_signed_t,
676    ) -> c_int;
677    pub fn fmpq_poly_divides(
678        q: *mut fmpq_poly_struct,
679        poly1: *const fmpq_poly_struct,
680        poly2: *const fmpq_poly_struct,
681    ) -> c_int;
682    pub fn fmpq_poly_remove(
683        q: *mut fmpq_poly_struct,
684        poly1: *const fmpq_poly_struct,
685        poly2: *const fmpq_poly_struct,
686    ) -> mp_limb_signed_t;
687    pub fn _fmpq_poly_inv_series_newton(
688        Qinv: *mut fmpz,
689        Qinvden: *mut fmpz,
690        Q: *const fmpz,
691        Qden: *const fmpz,
692        Qlen: mp_limb_signed_t,
693        n: mp_limb_signed_t,
694    );
695    pub fn fmpq_poly_inv_series_newton(
696        Qinv: *mut fmpq_poly_struct,
697        Q: *mut fmpq_poly_struct,
698        n: mp_limb_signed_t,
699    );
700    pub fn _fmpq_poly_inv_series(
701        Qinv: *mut fmpz,
702        Qinvden: *mut fmpz,
703        Q: *const fmpz,
704        Qden: *const fmpz,
705        Qlen: mp_limb_signed_t,
706        n: mp_limb_signed_t,
707    );
708    pub fn fmpq_poly_inv_series(
709        Qinv: *mut fmpq_poly_struct,
710        Q: *const fmpq_poly_struct,
711        n: mp_limb_signed_t,
712    );
713    pub fn _fmpq_poly_div_series(
714        Q: *mut fmpz,
715        denQ: *mut fmpz,
716        A: *const fmpz,
717        denA: *const fmpz,
718        lenA: mp_limb_signed_t,
719        B: *const fmpz,
720        denB: *const fmpz,
721        lenB: mp_limb_signed_t,
722        n: mp_limb_signed_t,
723    );
724    pub fn fmpq_poly_div_series(
725        Q: *mut fmpq_poly_struct,
726        A: *const fmpq_poly_struct,
727        B: *const fmpq_poly_struct,
728        n: mp_limb_signed_t,
729    );
730    pub fn _fmpq_poly_gcd(
731        G: *mut fmpz,
732        denG: *mut fmpz,
733        A: *const fmpz,
734        lenA: mp_limb_signed_t,
735        B: *const fmpz,
736        lenB: mp_limb_signed_t,
737    );
738    pub fn fmpq_poly_gcd(
739        G: *mut fmpq_poly_struct,
740        A: *const fmpq_poly_struct,
741        B: *const fmpq_poly_struct,
742    );
743    pub fn _fmpq_poly_xgcd(
744        G: *mut fmpz,
745        denG: *mut fmpz,
746        S: *mut fmpz,
747        denS: *mut fmpz,
748        T: *mut fmpz,
749        denT: *mut fmpz,
750        A: *const fmpz,
751        denA: *const fmpz,
752        lenA: mp_limb_signed_t,
753        B: *const fmpz,
754        denB: *const fmpz,
755        lenB: mp_limb_signed_t,
756    );
757    pub fn fmpq_poly_xgcd(
758        G: *mut fmpq_poly_struct,
759        S: *mut fmpq_poly_struct,
760        T: *mut fmpq_poly_struct,
761        A: *const fmpq_poly_struct,
762        B: *const fmpq_poly_struct,
763    );
764    pub fn _fmpq_poly_lcm(
765        G: *mut fmpz,
766        denG: *mut fmpz,
767        A: *const fmpz,
768        lenA: mp_limb_signed_t,
769        B: *const fmpz,
770        lenB: mp_limb_signed_t,
771    );
772    pub fn fmpq_poly_lcm(
773        L: *mut fmpq_poly_struct,
774        A: *const fmpq_poly_struct,
775        B: *const fmpq_poly_struct,
776    );
777    pub fn _fmpq_poly_resultant(
778        rnum: *mut fmpz,
779        rden: *mut fmpz,
780        poly1: *const fmpz,
781        den1: *const fmpz,
782        len1: mp_limb_signed_t,
783        poly2: *const fmpz,
784        den2: *const fmpz,
785        len2: mp_limb_signed_t,
786    );
787    pub fn fmpq_poly_resultant(
788        r: *mut fmpq,
789        f: *const fmpq_poly_struct,
790        g: *const fmpq_poly_struct,
791    );
792    pub fn _fmpq_poly_resultant_div(
793        rnum: *mut fmpz,
794        rden: *mut fmpz,
795        poly1: *const fmpz,
796        den1: *const fmpz,
797        len1: mp_limb_signed_t,
798        poly2: *const fmpz,
799        den2: *const fmpz,
800        len2: mp_limb_signed_t,
801        divisor: *const fmpz,
802        nbits: mp_limb_signed_t,
803    );
804    pub fn fmpq_poly_resultant_div(
805        r: *mut fmpq,
806        f: *const fmpq_poly_struct,
807        g: *const fmpq_poly_struct,
808        divisor: *const fmpz,
809        nbits: mp_limb_signed_t,
810    );
811    pub fn _fmpq_poly_derivative(
812        rpoly: *mut fmpz,
813        rden: *mut fmpz,
814        poly: *const fmpz,
815        den: *const fmpz,
816        len: mp_limb_signed_t,
817    );
818    pub fn fmpq_poly_derivative(res: *mut fmpq_poly_struct, poly: *const fmpq_poly_struct);
819    pub fn _fmpq_poly_integral(
820        rpoly: *mut fmpz,
821        rden: *mut fmpz,
822        poly: *const fmpz,
823        den: *const fmpz,
824        len: mp_limb_signed_t,
825    );
826    pub fn fmpq_poly_integral(res: *mut fmpq_poly_struct, poly: *const fmpq_poly_struct);
827    pub fn _fmpq_poly_invsqrt_series(
828        rpoly: *mut fmpz,
829        rden: *mut fmpz,
830        poly: *const fmpz,
831        den: *const fmpz,
832        len: mp_limb_signed_t,
833        n: mp_limb_signed_t,
834    );
835    pub fn fmpq_poly_invsqrt_series(
836        res: *mut fmpq_poly_struct,
837        poly: *const fmpq_poly_struct,
838        n: mp_limb_signed_t,
839    );
840    pub fn _fmpq_poly_sqrt_series(
841        rpoly: *mut fmpz,
842        rden: *mut fmpz,
843        poly: *const fmpz,
844        den: *const fmpz,
845        len: mp_limb_signed_t,
846        n: mp_limb_signed_t,
847    );
848    pub fn fmpq_poly_sqrt_series(
849        res: *mut fmpq_poly_struct,
850        poly: *const fmpq_poly_struct,
851        n: mp_limb_signed_t,
852    );
853    pub fn _fmpq_poly_power_sums(
854        res: *mut fmpz,
855        rden: *mut fmpz,
856        poly: *const fmpz,
857        len: mp_limb_signed_t,
858        n: mp_limb_signed_t,
859    );
860    pub fn fmpq_poly_power_sums(
861        res: *mut fmpq_poly_struct,
862        poly: *const fmpq_poly_struct,
863        n: mp_limb_signed_t,
864    );
865    pub fn _fmpq_poly_power_sums_to_poly(
866        res: *mut fmpz,
867        poly: *const fmpz,
868        den: *const fmpz,
869        len: mp_limb_signed_t,
870    );
871    pub fn fmpq_poly_power_sums_to_fmpz_poly(
872        res: *mut fmpz_poly_struct,
873        Q: *const fmpq_poly_struct,
874    );
875    pub fn fmpq_poly_power_sums_to_poly(res: *mut fmpq_poly_struct, Q: *const fmpq_poly_struct);
876    pub fn _fmpq_poly_log_series(
877        g: *mut fmpz,
878        gden: *mut fmpz,
879        f: *const fmpz,
880        fden: *const fmpz,
881        flen: mp_limb_signed_t,
882        n: mp_limb_signed_t,
883    );
884    pub fn fmpq_poly_log_series(
885        res: *mut fmpq_poly_struct,
886        f: *const fmpq_poly_struct,
887        n: mp_limb_signed_t,
888    );
889    pub fn _fmpq_poly_exp_series(
890        g: *mut fmpz,
891        gden: *mut fmpz,
892        h: *const fmpz,
893        hden: *const fmpz,
894        hlen: mp_limb_signed_t,
895        n: mp_limb_signed_t,
896    );
897    pub fn fmpq_poly_exp_series(
898        res: *mut fmpq_poly_struct,
899        poly: *const fmpq_poly_struct,
900        n: mp_limb_signed_t,
901    );
902    pub fn _fmpq_poly_atan_series(
903        g: *mut fmpz,
904        gden: *mut fmpz,
905        h: *const fmpz,
906        hden: *const fmpz,
907        hlen: mp_limb_signed_t,
908        n: mp_limb_signed_t,
909    );
910    pub fn fmpq_poly_atan_series(
911        res: *mut fmpq_poly_struct,
912        poly: *const fmpq_poly_struct,
913        n: mp_limb_signed_t,
914    );
915    pub fn _fmpq_poly_atanh_series(
916        g: *mut fmpz,
917        gden: *mut fmpz,
918        h: *const fmpz,
919        hden: *const fmpz,
920        hlen: mp_limb_signed_t,
921        n: mp_limb_signed_t,
922    );
923    pub fn fmpq_poly_atanh_series(
924        res: *mut fmpq_poly_struct,
925        poly: *const fmpq_poly_struct,
926        n: mp_limb_signed_t,
927    );
928    pub fn _fmpq_poly_asin_series(
929        g: *mut fmpz,
930        gden: *mut fmpz,
931        h: *const fmpz,
932        hden: *const fmpz,
933        hlen: mp_limb_signed_t,
934        n: mp_limb_signed_t,
935    );
936    pub fn fmpq_poly_asin_series(
937        res: *mut fmpq_poly_struct,
938        poly: *const fmpq_poly_struct,
939        n: mp_limb_signed_t,
940    );
941    pub fn _fmpq_poly_asinh_series(
942        g: *mut fmpz,
943        gden: *mut fmpz,
944        h: *const fmpz,
945        hden: *const fmpz,
946        hlen: mp_limb_signed_t,
947        n: mp_limb_signed_t,
948    );
949    pub fn fmpq_poly_asinh_series(
950        res: *mut fmpq_poly_struct,
951        poly: *const fmpq_poly_struct,
952        n: mp_limb_signed_t,
953    );
954    pub fn _fmpq_poly_tan_series(
955        g: *mut fmpz,
956        gden: *mut fmpz,
957        h: *const fmpz,
958        hden: *const fmpz,
959        hlen: mp_limb_signed_t,
960        n: mp_limb_signed_t,
961    );
962    pub fn fmpq_poly_tan_series(
963        res: *mut fmpq_poly_struct,
964        poly: *const fmpq_poly_struct,
965        n: mp_limb_signed_t,
966    );
967    pub fn _fmpq_poly_sin_series(
968        g: *mut fmpz,
969        gden: *mut fmpz,
970        h: *const fmpz,
971        hden: *const fmpz,
972        hlen: mp_limb_signed_t,
973        n: mp_limb_signed_t,
974    );
975    pub fn fmpq_poly_sin_series(
976        res: *mut fmpq_poly_struct,
977        poly: *const fmpq_poly_struct,
978        n: mp_limb_signed_t,
979    );
980    pub fn _fmpq_poly_cos_series(
981        g: *mut fmpz,
982        gden: *mut fmpz,
983        h: *const fmpz,
984        hden: *const fmpz,
985        hlen: mp_limb_signed_t,
986        n: mp_limb_signed_t,
987    );
988    pub fn fmpq_poly_cos_series(
989        res: *mut fmpq_poly_struct,
990        poly: *const fmpq_poly_struct,
991        n: mp_limb_signed_t,
992    );
993    pub fn _fmpq_poly_sin_cos_series(
994        s: *mut fmpz,
995        sden: *mut fmpz,
996        c: *mut fmpz,
997        cden: *mut fmpz,
998        h: *const fmpz,
999        hden: *const fmpz,
1000        hlen: mp_limb_signed_t,
1001        n: mp_limb_signed_t,
1002    );
1003    pub fn fmpq_poly_sin_cos_series(
1004        res1: *mut fmpq_poly_struct,
1005        res2: *mut fmpq_poly_struct,
1006        poly: *const fmpq_poly_struct,
1007        n: mp_limb_signed_t,
1008    );
1009    pub fn _fmpq_poly_sinh_series(
1010        g: *mut fmpz,
1011        gden: *mut fmpz,
1012        h: *const fmpz,
1013        hden: *const fmpz,
1014        hlen: mp_limb_signed_t,
1015        n: mp_limb_signed_t,
1016    );
1017    pub fn fmpq_poly_sinh_series(
1018        res: *mut fmpq_poly_struct,
1019        poly: *const fmpq_poly_struct,
1020        n: mp_limb_signed_t,
1021    );
1022    pub fn _fmpq_poly_cosh_series(
1023        g: *mut fmpz,
1024        gden: *mut fmpz,
1025        h: *const fmpz,
1026        hden: *const fmpz,
1027        hlen: mp_limb_signed_t,
1028        n: mp_limb_signed_t,
1029    );
1030    pub fn fmpq_poly_cosh_series(
1031        res: *mut fmpq_poly_struct,
1032        poly: *const fmpq_poly_struct,
1033        n: mp_limb_signed_t,
1034    );
1035    pub fn _fmpq_poly_tanh_series(
1036        g: *mut fmpz,
1037        gden: *mut fmpz,
1038        h: *const fmpz,
1039        hden: *const fmpz,
1040        hlen: mp_limb_signed_t,
1041        n: mp_limb_signed_t,
1042    );
1043    pub fn fmpq_poly_tanh_series(
1044        res: *mut fmpq_poly_struct,
1045        poly: *const fmpq_poly_struct,
1046        n: mp_limb_signed_t,
1047    );
1048    pub fn _fmpq_poly_legendre_p(coeffs: *mut fmpz, den: *mut fmpz, n: mp_limb_t);
1049    pub fn fmpq_poly_legendre_p(poly: *mut fmpq_poly_struct, n: mp_limb_t);
1050    pub fn _fmpq_poly_laguerre_l(coeffs: *mut fmpz, den: *mut fmpz, n: mp_limb_t);
1051    pub fn fmpq_poly_laguerre_l(poly: *mut fmpq_poly_struct, n: mp_limb_t);
1052    pub fn _fmpq_poly_gegenbauer_c(coeffs: *mut fmpz, den: *mut fmpz, n: mp_limb_t, a: *const fmpq);
1053    pub fn fmpq_poly_gegenbauer_c(poly: *mut fmpq_poly_struct, n: mp_limb_t, a: *const fmpq);
1054    pub fn _fmpq_poly_evaluate_fmpz(
1055        rnum: *mut fmpz,
1056        rden: *mut fmpz,
1057        poly: *const fmpz,
1058        den: *const fmpz,
1059        len: mp_limb_signed_t,
1060        a: *const fmpz,
1061    );
1062    pub fn fmpq_poly_evaluate_fmpz(res: *mut fmpq, poly: *const fmpq_poly_struct, a: *const fmpz);
1063    pub fn _fmpq_poly_evaluate_fmpq(
1064        rnum: *mut fmpz,
1065        rden: *mut fmpz,
1066        poly: *const fmpz,
1067        den: *const fmpz,
1068        len: mp_limb_signed_t,
1069        anum: *const fmpz,
1070        aden: *const fmpz,
1071    );
1072    pub fn fmpq_poly_evaluate_fmpq(res: *mut fmpq, poly: *const fmpq_poly_struct, a: *const fmpq);
1073    pub fn fmpq_poly_evaluate_mpz(
1074        res: *mut __mpq_struct,
1075        poly: *const fmpq_poly_struct,
1076        a: *const __mpz_struct,
1077    );
1078    pub fn fmpq_poly_evaluate_mpq(
1079        res: *mut __mpq_struct,
1080        poly: *const fmpq_poly_struct,
1081        a: *const __mpq_struct,
1082    );
1083    pub fn _fmpq_poly_interpolate_fmpz_vec(
1084        poly: *mut fmpz,
1085        den: *mut fmpz,
1086        xs: *const fmpz,
1087        ys: *const fmpz,
1088        n: mp_limb_signed_t,
1089    );
1090    pub fn fmpq_poly_interpolate_fmpz_vec(
1091        poly: *mut fmpq_poly_struct,
1092        xs: *const fmpz,
1093        ys: *const fmpz,
1094        n: mp_limb_signed_t,
1095    );
1096    pub fn _fmpq_poly_compose(
1097        res: *mut fmpz,
1098        den: *mut fmpz,
1099        poly1: *const fmpz,
1100        den1: *const fmpz,
1101        len1: mp_limb_signed_t,
1102        poly2: *const fmpz,
1103        den2: *const fmpz,
1104        len2: mp_limb_signed_t,
1105    );
1106    pub fn fmpq_poly_compose(
1107        res: *mut fmpq_poly_struct,
1108        poly1: *const fmpq_poly_struct,
1109        poly2: *const fmpq_poly_struct,
1110    );
1111    pub fn _fmpq_poly_rescale(
1112        res: *mut fmpz,
1113        denr: *mut fmpz,
1114        poly: *const fmpz,
1115        den: *const fmpz,
1116        len: mp_limb_signed_t,
1117        xnum: *const fmpz,
1118        xden: *const fmpz,
1119    );
1120    pub fn fmpq_poly_rescale(
1121        res: *mut fmpq_poly_struct,
1122        poly: *const fmpq_poly_struct,
1123        x: *const fmpq,
1124    );
1125    pub fn _fmpq_poly_compose_series_horner(
1126        res: *mut fmpz,
1127        den: *mut fmpz,
1128        poly1: *const fmpz,
1129        den1: *const fmpz,
1130        len1: mp_limb_signed_t,
1131        poly2: *const fmpz,
1132        den2: *const fmpz,
1133        len2: mp_limb_signed_t,
1134        n: mp_limb_signed_t,
1135    );
1136    pub fn fmpq_poly_compose_series_horner(
1137        res: *mut fmpq_poly_struct,
1138        poly1: *const fmpq_poly_struct,
1139        poly2: *const fmpq_poly_struct,
1140        n: mp_limb_signed_t,
1141    );
1142    pub fn _fmpq_poly_compose_series_brent_kung(
1143        res: *mut fmpz,
1144        den: *mut fmpz,
1145        poly1: *const fmpz,
1146        den1: *const fmpz,
1147        len1: mp_limb_signed_t,
1148        poly2: *const fmpz,
1149        den2: *const fmpz,
1150        len2: mp_limb_signed_t,
1151        n: mp_limb_signed_t,
1152    );
1153    pub fn fmpq_poly_compose_series_brent_kung(
1154        res: *mut fmpq_poly_struct,
1155        poly1: *const fmpq_poly_struct,
1156        poly2: *const fmpq_poly_struct,
1157        n: mp_limb_signed_t,
1158    );
1159    pub fn _fmpq_poly_compose_series(
1160        res: *mut fmpz,
1161        den: *mut fmpz,
1162        poly1: *const fmpz,
1163        den1: *const fmpz,
1164        len1: mp_limb_signed_t,
1165        poly2: *const fmpz,
1166        den2: *const fmpz,
1167        len2: mp_limb_signed_t,
1168        n: mp_limb_signed_t,
1169    );
1170    pub fn fmpq_poly_compose_series(
1171        res: *mut fmpq_poly_struct,
1172        poly1: *const fmpq_poly_struct,
1173        poly2: *const fmpq_poly_struct,
1174        n: mp_limb_signed_t,
1175    );
1176    pub fn _fmpq_poly_revert_series_lagrange(
1177        res: *mut fmpz,
1178        den: *mut fmpz,
1179        poly1: *const fmpz,
1180        den1: *const fmpz,
1181        len1: mp_limb_signed_t,
1182        n: mp_limb_signed_t,
1183    );
1184    pub fn fmpq_poly_revert_series_lagrange(
1185        res: *mut fmpq_poly_struct,
1186        poly: *const fmpq_poly_struct,
1187        n: mp_limb_signed_t,
1188    );
1189    pub fn _fmpq_poly_revert_series_lagrange_fast(
1190        res: *mut fmpz,
1191        den: *mut fmpz,
1192        poly1: *const fmpz,
1193        den1: *const fmpz,
1194        len1: mp_limb_signed_t,
1195        n: mp_limb_signed_t,
1196    );
1197    pub fn fmpq_poly_revert_series_lagrange_fast(
1198        res: *mut fmpq_poly_struct,
1199        poly: *mut fmpq_poly_struct,
1200        n: mp_limb_signed_t,
1201    );
1202    pub fn _fmpq_poly_revert_series_newton(
1203        res: *mut fmpz,
1204        den: *mut fmpz,
1205        poly1: *const fmpz,
1206        den1: *const fmpz,
1207        len1: mp_limb_signed_t,
1208        n: mp_limb_signed_t,
1209    );
1210    pub fn fmpq_poly_revert_series_newton(
1211        res: *mut fmpq_poly_struct,
1212        poly: *const fmpq_poly_struct,
1213        n: mp_limb_signed_t,
1214    );
1215    pub fn _fmpq_poly_revert_series(
1216        res: *mut fmpz,
1217        den: *mut fmpz,
1218        poly1: *const fmpz,
1219        den1: *const fmpz,
1220        len1: mp_limb_signed_t,
1221        n: mp_limb_signed_t,
1222    );
1223    pub fn fmpq_poly_revert_series(
1224        res: *mut fmpq_poly_struct,
1225        poly: *const fmpq_poly_struct,
1226        n: mp_limb_signed_t,
1227    );
1228    pub fn _fmpq_poly_content(
1229        res: *mut fmpq,
1230        poly: *const fmpz,
1231        den: *const fmpz,
1232        len: mp_limb_signed_t,
1233    );
1234    pub fn fmpq_poly_content(res: *mut fmpq, poly: *const fmpq_poly_struct);
1235    pub fn _fmpq_poly_primitive_part(
1236        rpoly: *mut fmpz,
1237        rden: *mut fmpz,
1238        poly: *const fmpz,
1239        den: *const fmpz,
1240        len: mp_limb_signed_t,
1241    );
1242    pub fn fmpq_poly_primitive_part(res: *mut fmpq_poly_struct, poly: *const fmpq_poly_struct);
1243    pub fn _fmpq_poly_is_monic(poly: *const fmpz, den: *const fmpz, len: mp_limb_signed_t)
1244        -> c_int;
1245    pub fn fmpq_poly_is_monic(poly: *const fmpq_poly_struct) -> c_int;
1246    pub fn _fmpq_poly_make_monic(
1247        rpoly: *mut fmpz,
1248        rden: *mut fmpz,
1249        poly: *const fmpz,
1250        den: *const fmpz,
1251        len: mp_limb_signed_t,
1252    );
1253    pub fn fmpq_poly_make_monic(res: *mut fmpq_poly_struct, poly: *const fmpq_poly_struct);
1254    pub fn fmpq_poly_is_squarefree(poly: *const fmpq_poly_struct) -> c_int;
1255    pub fn fmpq_poly_debug(poly: *const fmpq_poly_struct) -> c_int;
1256    pub fn _fmpq_poly_fprint(
1257        file: *mut FILE,
1258        poly: *const fmpz,
1259        den: *const fmpz,
1260        len: mp_limb_signed_t,
1261    ) -> c_int;
1262    pub fn fmpq_poly_fprint(file: *mut FILE, poly: *const fmpq_poly_struct) -> c_int;
1263    pub fn _fmpq_poly_fprint_pretty(
1264        file: *mut FILE,
1265        poly: *const fmpz,
1266        den: *const fmpz,
1267        len: mp_limb_signed_t,
1268        x: *const c_char,
1269    ) -> c_int;
1270    pub fn fmpq_poly_fprint_pretty(
1271        file: *mut FILE,
1272        poly: *const fmpq_poly_struct,
1273        var: *const c_char,
1274    ) -> c_int;
1275    pub fn _fmpq_poly_print(poly: *const fmpz, den: *const fmpz, len: mp_limb_signed_t) -> c_int;
1276    pub fn fmpq_poly_print(poly: *const fmpq_poly_struct) -> c_int;
1277    pub fn _fmpq_poly_print_pretty(
1278        poly: *const fmpz,
1279        den: *const fmpz,
1280        len: mp_limb_signed_t,
1281        x: *const c_char,
1282    ) -> c_int;
1283    pub fn fmpq_poly_print_pretty(poly: *const fmpq_poly_struct, var: *const c_char) -> c_int;
1284    pub fn fmpq_poly_fread(file: *const FILE, poly: *mut fmpq_poly_struct) -> c_int;
1285    pub fn fmpq_poly_read(poly: *mut fmpq_poly_struct) -> c_int;
1286}