flint_sys/
fmpz_mpoly.rs

1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4//! *See the [FLINT documentation](http://flintlib.org/doc/fmpz_mpoly.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpq::{fmpq, fmpq_t};
9use crate::fmpq_poly::fmpq_poly_struct;
10use crate::fmpz::{fmpz, fmpz_t};
11use crate::fmpz_mat::fmpz_mat_struct;
12use crate::fmpz_mod::fmpz_mod_ctx_struct;
13use crate::fmpz_poly::fmpz_poly_struct;
14use crate::mpoly::*;
15use crate::nmod_vec::nmod_t;
16use libc::{c_char, c_int, FILE};
17
18#[repr(C)]
19#[derive(Debug, Copy, Clone)]
20pub struct fmpz_mpoly_ctx_struct {
21    pub minfo: mpoly_ctx_t,
22}
23pub type fmpz_mpoly_ctx_t = [fmpz_mpoly_ctx_struct; 1usize];
24#[repr(C)]
25#[derive(Debug, Copy, Clone)]
26pub struct fmpz_mpoly_struct {
27    pub coeffs: *mut fmpz,
28    pub exps: *mut mp_limb_t,
29    pub alloc: mp_limb_signed_t,
30    pub length: mp_limb_signed_t,
31    pub bits: mp_limb_t,
32}
33pub type fmpz_mpoly_t = [fmpz_mpoly_struct; 1usize];
34extern "C" {
35    pub fn fmpz_mpoly_term_coeff_ref(
36        A: *const fmpz_mpoly_struct,
37        i: mp_limb_signed_t,
38        ctx: *const fmpz_mpoly_ctx_struct,
39    ) -> *mut fmpz;
40}
41extern "C" {
42    pub fn fmpz_mpoly_leadcoeff(A: *const fmpz_mpoly_struct) -> *mut fmpz;
43}
44#[repr(C)]
45#[derive(Debug, Copy, Clone)]
46pub struct fmpz_mpoly_univar_struct {
47    pub coeffs: *mut fmpz_mpoly_struct,
48    pub exps: *mut fmpz,
49    pub alloc: mp_limb_signed_t,
50    pub length: mp_limb_signed_t,
51}
52pub type fmpz_mpoly_univar_t = [fmpz_mpoly_univar_struct; 1usize];
53#[repr(C)]
54#[derive(Debug, Copy, Clone)]
55pub struct fmpz_mpolyd_struct {
56    pub nvars: mp_limb_signed_t,
57    pub degb_alloc: mp_limb_signed_t,
58    pub deg_bounds: *mut mp_limb_signed_t,
59    pub length: mp_limb_signed_t,
60    pub coeff_alloc: mp_limb_signed_t,
61    pub coeffs: *mut fmpz,
62}
63pub type fmpz_mpolyd_t = [fmpz_mpolyd_struct; 1usize];
64extern "C" {
65    pub fn fmpz_mpoly_ctx_init(
66        ctx: *mut fmpz_mpoly_ctx_struct,
67        nvars: mp_limb_signed_t,
68        ord: ordering_t,
69    );
70}
71extern "C" {
72    pub fn fmpz_mpoly_ctx_init_rand(
73        mctx: *mut fmpz_mpoly_ctx_struct,
74        state: *const flint_rand_s,
75        max_nvars: mp_limb_signed_t,
76    );
77}
78extern "C" {
79    pub fn fmpz_mpoly_ctx_clear(ctx: *mut fmpz_mpoly_ctx_struct);
80}
81extern "C" {
82    pub fn fmpz_mpoly_ctx_nvars(ctx: *const fmpz_mpoly_ctx_struct) -> mp_limb_signed_t;
83}
84extern "C" {
85    pub fn fmpz_mpoly_ctx_ord(ctx: *const fmpz_mpoly_ctx_struct) -> ordering_t;
86}
87extern "C" {
88    pub fn fmpz_mpoly_init(A: *mut fmpz_mpoly_struct, ctx: *const fmpz_mpoly_ctx_struct);
89}
90extern "C" {
91    pub fn fmpz_mpoly_init2(
92        A: *mut fmpz_mpoly_struct,
93        alloc: mp_limb_signed_t,
94        ctx: *const fmpz_mpoly_ctx_struct,
95    );
96}
97extern "C" {
98    pub fn fmpz_mpoly_init3(
99        A: *mut fmpz_mpoly_struct,
100        alloc: mp_limb_signed_t,
101        bits: mp_limb_t,
102        ctx: *const fmpz_mpoly_ctx_struct,
103    );
104}
105extern "C" {
106    pub fn _fmpz_mpoly_realloc(
107        Acoeff: *mut *mut fmpz,
108        Aexp: *mut *mut mp_limb_t,
109        Aalloc: *mut mp_limb_signed_t,
110        len: mp_limb_signed_t,
111        N: mp_limb_signed_t,
112    );
113}
114extern "C" {
115    pub fn fmpz_mpoly_realloc(
116        A: *mut fmpz_mpoly_struct,
117        alloc: mp_limb_signed_t,
118        ctx: *const fmpz_mpoly_ctx_struct,
119    );
120}
121extern "C" {
122    pub fn _fmpz_mpoly_fit_length(
123        Acoeff: *mut *mut fmpz,
124        Aexp: *mut *mut mp_limb_t,
125        Aalloc: *mut mp_limb_signed_t,
126        len: mp_limb_signed_t,
127        N: mp_limb_signed_t,
128    );
129}
130extern "C" {
131    pub fn fmpz_mpoly_fit_length(
132        A: *mut fmpz_mpoly_struct,
133        len: mp_limb_signed_t,
134        ctx: *const fmpz_mpoly_ctx_struct,
135    );
136}
137extern "C" {
138    pub fn fmpz_mpoly_fit_length_reset_bits(
139        A: *mut fmpz_mpoly_struct,
140        len: mp_limb_signed_t,
141        bits: mp_limb_t,
142        ctx: *const fmpz_mpoly_ctx_struct,
143    );
144}
145extern "C" {
146    pub fn fmpz_mpoly_clear(A: *mut fmpz_mpoly_struct, ctx: *const fmpz_mpoly_ctx_struct);
147}
148extern "C" {
149    pub fn _fmpz_mpoly_set_length(
150        A: *mut fmpz_mpoly_struct,
151        newlen: mp_limb_signed_t,
152        ctx: *const fmpz_mpoly_ctx_struct,
153    );
154}
155extern "C" {
156    pub fn fmpz_mpoly_truncate(
157        A: *mut fmpz_mpoly_struct,
158        newlen: mp_limb_signed_t,
159        ctx: *const fmpz_mpoly_ctx_struct,
160    );
161}
162extern "C" {
163    pub fn fmpz_mpoly_fit_bits(
164        A: *mut fmpz_mpoly_struct,
165        bits: mp_limb_t,
166        ctx: *const fmpz_mpoly_ctx_struct,
167    );
168}
169extern "C" {
170    pub fn fmpz_mpoly_set_str_pretty(
171        A: *mut fmpz_mpoly_struct,
172        str_: *const c_char,
173        x: *mut *const c_char,
174        ctx: *const fmpz_mpoly_ctx_struct,
175    ) -> c_int;
176}
177extern "C" {
178    pub fn _fmpz_mpoly_get_str_pretty(
179        poly: *const fmpz,
180        exps: *const mp_limb_t,
181        len: mp_limb_signed_t,
182        x: *const *const c_char,
183        bits: mp_limb_signed_t,
184        mctx: *const mpoly_ctx_struct,
185    ) -> *const c_char;
186}
187extern "C" {
188    pub fn fmpz_mpoly_get_str_pretty(
189        A: *const fmpz_mpoly_struct,
190        x: *const *const c_char,
191        ctx: *const fmpz_mpoly_ctx_struct,
192    ) -> *const c_char;
193}
194extern "C" {
195    pub fn _fmpz_mpoly_fprint_pretty(
196        file: *const FILE,
197        poly: *const fmpz,
198        exps: *const mp_limb_t,
199        len: mp_limb_signed_t,
200        x_in: *const *const c_char,
201        bits: mp_limb_t,
202        mctx: *const mpoly_ctx_struct,
203    ) -> c_int;
204}
205extern "C" {
206    pub fn fmpz_mpoly_fprint_pretty(
207        file: *mut FILE,
208        A: *const fmpz_mpoly_struct,
209        x: *const *const c_char,
210        ctx: *const fmpz_mpoly_ctx_struct,
211    ) -> c_int;
212}
213extern "C" {
214    pub fn _fmpz_mpoly_print_pretty(
215        poly: *const fmpz,
216        exps: *const mp_limb_t,
217        len: mp_limb_signed_t,
218        x: *const *const c_char,
219        bits: mp_limb_signed_t,
220        mctx: *const mpoly_ctx_struct,
221    ) -> c_int;
222}
223extern "C" {
224    pub fn fmpz_mpoly_print_pretty(
225        A: *const fmpz_mpoly_struct,
226        x: *const *const c_char,
227        ctx: *const fmpz_mpoly_ctx_struct,
228    ) -> c_int;
229}
230extern "C" {
231    pub fn fmpz_mpoly_gen(
232        poly: *mut fmpz_mpoly_struct,
233        i: mp_limb_signed_t,
234        ctx: *const fmpz_mpoly_ctx_struct,
235    );
236}
237extern "C" {
238    pub fn fmpz_mpoly_is_gen(
239        poly: *const fmpz_mpoly_struct,
240        k: mp_limb_signed_t,
241        ctx: *const fmpz_mpoly_ctx_struct,
242    ) -> c_int;
243}
244extern "C" {
245    pub fn _fmpz_mpoly_set(
246        poly1: *mut fmpz,
247        exps1: *mut mp_limb_t,
248        poly2: *const fmpz,
249        exps2: *const mp_limb_t,
250        n: mp_limb_signed_t,
251        N: mp_limb_signed_t,
252    );
253}
254extern "C" {
255    pub fn fmpz_mpoly_set(
256        A: *mut fmpz_mpoly_struct,
257        B: *const fmpz_mpoly_struct,
258        ctx: *const fmpz_mpoly_ctx_struct,
259    );
260}
261extern "C" {
262    pub fn _fmpz_mpoly_equal(
263        poly1: *const fmpz,
264        exps1: *const mp_limb_t,
265        poly2: *const fmpz,
266        exps2: *const mp_limb_t,
267        n: mp_limb_signed_t,
268        N: mp_limb_signed_t,
269    ) -> c_int;
270}
271extern "C" {
272    pub fn fmpz_mpoly_equal(
273        A: *const fmpz_mpoly_struct,
274        B: *const fmpz_mpoly_struct,
275        ctx: *const fmpz_mpoly_ctx_struct,
276    ) -> c_int;
277}
278extern "C" {
279    pub fn fmpz_mpoly_swap(
280        A: *mut fmpz_mpoly_struct,
281        B: *mut fmpz_mpoly_struct,
282        ctx: *const fmpz_mpoly_ctx_struct,
283    );
284}
285extern "C" {
286    pub fn _fmpz_mpoly_fits_small(poly: *const fmpz, len: mp_limb_signed_t) -> c_int;
287}
288extern "C" {
289    pub fn fmpz_mpoly_max_bits(A: *const fmpz_mpoly_struct) -> mp_limb_signed_t;
290}
291extern "C" {
292    pub fn fmpz_mpoly_is_fmpz(
293        A: *const fmpz_mpoly_struct,
294        ctx: *const fmpz_mpoly_ctx_struct,
295    ) -> c_int;
296}
297extern "C" {
298    pub fn fmpz_mpoly_get_fmpz(
299        c: *mut fmpz,
300        A: *const fmpz_mpoly_struct,
301        ctx: *const fmpz_mpoly_ctx_struct,
302    );
303}
304extern "C" {
305    pub fn fmpz_mpoly_set_fmpz(
306        A: *mut fmpz_mpoly_struct,
307        c: *const fmpz,
308        ctx: *const fmpz_mpoly_ctx_struct,
309    );
310}
311extern "C" {
312    pub fn fmpz_mpoly_set_ui(
313        A: *mut fmpz_mpoly_struct,
314        c: mp_limb_t,
315        ctx: *const fmpz_mpoly_ctx_struct,
316    );
317}
318extern "C" {
319    pub fn fmpz_mpoly_set_si(
320        A: *mut fmpz_mpoly_struct,
321        c: mp_limb_signed_t,
322        ctx: *const fmpz_mpoly_ctx_struct,
323    );
324}
325extern "C" {
326    pub fn fmpz_mpoly_zero(A: *mut fmpz_mpoly_struct, ctx: *const fmpz_mpoly_ctx_struct);
327}
328extern "C" {
329    pub fn fmpz_mpoly_one(A: *mut fmpz_mpoly_struct, ctx: *const fmpz_mpoly_ctx_struct);
330}
331extern "C" {
332    pub fn fmpz_mpoly_equal_fmpz(
333        A: *const fmpz_mpoly_struct,
334        c: *const fmpz,
335        ctx: *const fmpz_mpoly_ctx_struct,
336    ) -> c_int;
337}
338extern "C" {
339    pub fn fmpz_mpoly_equal_ui(
340        A: *const fmpz_mpoly_struct,
341        c: mp_limb_t,
342        ctx: *const fmpz_mpoly_ctx_struct,
343    ) -> c_int;
344}
345extern "C" {
346    pub fn fmpz_mpoly_equal_si(
347        A: *const fmpz_mpoly_struct,
348        c: mp_limb_signed_t,
349        ctx: *const fmpz_mpoly_ctx_struct,
350    ) -> c_int;
351}
352extern "C" {
353    pub fn fmpz_mpoly_is_zero(
354        A: *const fmpz_mpoly_struct,
355        ctx: *const fmpz_mpoly_ctx_struct,
356    ) -> c_int;
357}
358extern "C" {
359    pub fn fmpz_mpoly_is_one(
360        A: *const fmpz_mpoly_struct,
361        ctx: *const fmpz_mpoly_ctx_struct,
362    ) -> c_int;
363}
364extern "C" {
365    pub fn fmpz_mpoly_degrees_fit_si(
366        A: *const fmpz_mpoly_struct,
367        ctx: *const fmpz_mpoly_ctx_struct,
368    ) -> c_int;
369}
370extern "C" {
371    pub fn fmpz_mpoly_degrees_fmpz(
372        degs: *mut *mut fmpz,
373        A: *const fmpz_mpoly_struct,
374        ctx: *const fmpz_mpoly_ctx_struct,
375    );
376}
377extern "C" {
378    pub fn fmpz_mpoly_degrees_si(
379        degs: *mut mp_limb_signed_t,
380        A: *const fmpz_mpoly_struct,
381        ctx: *const fmpz_mpoly_ctx_struct,
382    );
383}
384extern "C" {
385    pub fn fmpz_mpoly_degree_fmpz(
386        deg: *mut fmpz,
387        A: *const fmpz_mpoly_struct,
388        var: mp_limb_signed_t,
389        ctx: *const fmpz_mpoly_ctx_struct,
390    );
391}
392extern "C" {
393    pub fn fmpz_mpoly_degree_si(
394        A: *const fmpz_mpoly_struct,
395        var: mp_limb_signed_t,
396        ctx: *const fmpz_mpoly_ctx_struct,
397    ) -> mp_limb_signed_t;
398}
399extern "C" {
400    pub fn fmpz_mpoly_total_degree_fits_si(
401        A: *const fmpz_mpoly_struct,
402        ctx: *const fmpz_mpoly_ctx_struct,
403    ) -> c_int;
404}
405extern "C" {
406    pub fn fmpz_mpoly_total_degree_fmpz(
407        td: *mut fmpz,
408        A: *const fmpz_mpoly_struct,
409        ctx: *const fmpz_mpoly_ctx_struct,
410    );
411}
412extern "C" {
413    pub fn fmpz_mpoly_total_degree_si(
414        A: *const fmpz_mpoly_struct,
415        ctx: *const fmpz_mpoly_ctx_struct,
416    ) -> mp_limb_signed_t;
417}
418extern "C" {
419    pub fn fmpz_mpoly_used_vars(
420        used: *mut c_int,
421        A: *const fmpz_mpoly_struct,
422        ctx: *const fmpz_mpoly_ctx_struct,
423    );
424}
425extern "C" {
426    pub fn fmpz_mpoly_get_coeff_fmpz_monomial(
427        c: *mut fmpz,
428        A: *const fmpz_mpoly_struct,
429        M: *const fmpz_mpoly_struct,
430        ctx: *const fmpz_mpoly_ctx_struct,
431    );
432}
433extern "C" {
434    pub fn fmpz_mpoly_set_coeff_fmpz_monomial(
435        A: *mut fmpz_mpoly_struct,
436        c: *const fmpz,
437        M: *const fmpz_mpoly_struct,
438        ctx: *const fmpz_mpoly_ctx_struct,
439    );
440}
441extern "C" {
442    pub fn fmpz_mpoly_get_coeff_fmpz_fmpz(
443        c: *mut fmpz,
444        A: *const fmpz_mpoly_struct,
445        exp: *const *const fmpz,
446        ctx: *const fmpz_mpoly_ctx_struct,
447    );
448}
449extern "C" {
450    pub fn fmpz_mpoly_get_coeff_ui_fmpz(
451        A: *const fmpz_mpoly_struct,
452        exp: *const *const fmpz,
453        ctx: *const fmpz_mpoly_ctx_struct,
454    ) -> mp_limb_t;
455}
456extern "C" {
457    pub fn fmpz_mpoly_get_coeff_si_fmpz(
458        A: *const fmpz_mpoly_struct,
459        exp: *const *const fmpz,
460        ctx: *const fmpz_mpoly_ctx_struct,
461    ) -> mp_limb_signed_t;
462}
463extern "C" {
464    pub fn fmpz_mpoly_get_coeff_fmpz_ui(
465        c: *mut fmpz,
466        A: *const fmpz_mpoly_struct,
467        exp: *const mp_limb_t,
468        ctx: *const fmpz_mpoly_ctx_struct,
469    );
470}
471extern "C" {
472    pub fn fmpz_mpoly_get_coeff_ui_ui(
473        A: *const fmpz_mpoly_struct,
474        exp: *const mp_limb_t,
475        ctx: *const fmpz_mpoly_ctx_struct,
476    ) -> mp_limb_t;
477}
478extern "C" {
479    pub fn fmpz_mpoly_get_coeff_si_ui(
480        A: *const fmpz_mpoly_struct,
481        exp: *const mp_limb_t,
482        ctx: *const fmpz_mpoly_ctx_struct,
483    ) -> mp_limb_signed_t;
484}
485extern "C" {
486    pub fn _fmpz_mpoly_set_coeff_fmpz_fmpz(
487        A: *mut fmpz_mpoly_struct,
488        c: *const fmpz,
489        exp: *const fmpz,
490        ctx: *const fmpz_mpoly_ctx_struct,
491    );
492}
493extern "C" {
494    pub fn fmpz_mpoly_set_coeff_fmpz_fmpz(
495        A: *mut fmpz_mpoly_struct,
496        c: *const fmpz,
497        exp: *const *const fmpz,
498        ctx: *const fmpz_mpoly_ctx_struct,
499    );
500}
501extern "C" {
502    pub fn fmpz_mpoly_set_coeff_ui_fmpz(
503        A: *mut fmpz_mpoly_struct,
504        c: mp_limb_t,
505        exp: *const *const fmpz,
506        ctx: *const fmpz_mpoly_ctx_struct,
507    );
508}
509extern "C" {
510    pub fn fmpz_mpoly_set_coeff_si_fmpz(
511        A: *mut fmpz_mpoly_struct,
512        c: mp_limb_signed_t,
513        exp: *const *const fmpz,
514        ctx: *const fmpz_mpoly_ctx_struct,
515    );
516}
517extern "C" {
518    pub fn fmpz_mpoly_set_coeff_fmpz_ui(
519        A: *mut fmpz_mpoly_struct,
520        c: *const fmpz,
521        exp: *const mp_limb_t,
522        ctx: *const fmpz_mpoly_ctx_struct,
523    );
524}
525extern "C" {
526    pub fn fmpz_mpoly_set_coeff_ui_ui(
527        A: *mut fmpz_mpoly_struct,
528        c: mp_limb_t,
529        exp: *const mp_limb_t,
530        ctx: *const fmpz_mpoly_ctx_struct,
531    );
532}
533extern "C" {
534    pub fn fmpz_mpoly_set_coeff_si_ui(
535        A: *mut fmpz_mpoly_struct,
536        c: mp_limb_signed_t,
537        exp: *const mp_limb_t,
538        ctx: *const fmpz_mpoly_ctx_struct,
539    );
540}
541extern "C" {
542    pub fn fmpz_mpoly_get_coeff_vars_ui(
543        C: *mut fmpz_mpoly_struct,
544        A: *const fmpz_mpoly_struct,
545        vars: *const mp_limb_signed_t,
546        exps: *const mp_limb_t,
547        length: mp_limb_signed_t,
548        ctx: *const fmpz_mpoly_ctx_struct,
549    );
550}
551extern "C" {
552    pub fn fmpz_mpoly_is_fmpz_poly(
553        A: *mut fmpz_mpoly_struct,
554        var: mp_limb_signed_t,
555        ctx: *mut fmpz_mpoly_ctx_struct,
556    ) -> c_int;
557}
558extern "C" {
559    pub fn fmpz_mpoly_get_fmpz_poly(
560        A: *mut fmpz_poly_struct,
561        B: *const fmpz_mpoly_struct,
562        var: mp_limb_signed_t,
563        ctx: *const fmpz_mpoly_ctx_struct,
564    ) -> c_int;
565}
566extern "C" {
567    pub fn _fmpz_mpoly_set_fmpz_poly(
568        A: *mut fmpz_mpoly_struct,
569        Abits: mp_limb_t,
570        Bcoeffs: *const fmpz,
571        Blen: mp_limb_signed_t,
572        var: mp_limb_signed_t,
573        ctx: *const fmpz_mpoly_ctx_struct,
574    );
575}
576extern "C" {
577    pub fn fmpz_mpoly_set_fmpz_poly(
578        A: *mut fmpz_mpoly_struct,
579        B: *const fmpz_poly_struct,
580        v: mp_limb_signed_t,
581        ctx: *const fmpz_mpoly_ctx_struct,
582    );
583}
584extern "C" {
585    pub fn fmpz_mpoly_cmp(
586        A: *const fmpz_mpoly_struct,
587        B: *const fmpz_mpoly_struct,
588        ctx: *const fmpz_mpoly_ctx_struct,
589    ) -> c_int;
590}
591extern "C" {
592    pub fn fmpz_mpoly_is_canonical(
593        A: *const fmpz_mpoly_struct,
594        ctx: *const fmpz_mpoly_ctx_struct,
595    ) -> c_int;
596}
597extern "C" {
598    pub fn fmpz_mpoly_length(
599        A: *const fmpz_mpoly_struct,
600        ctx: *const fmpz_mpoly_ctx_struct,
601    ) -> mp_limb_signed_t;
602}
603extern "C" {
604    pub fn fmpz_mpoly_resize(
605        A: *mut fmpz_mpoly_struct,
606        new_length: mp_limb_signed_t,
607        ctx: *const fmpz_mpoly_ctx_struct,
608    );
609}
610extern "C" {
611    pub fn fmpz_mpoly_get_term_coeff_fmpz(
612        c: *mut fmpz,
613        A: *const fmpz_mpoly_struct,
614        i: mp_limb_signed_t,
615        ctx: *const fmpz_mpoly_ctx_struct,
616    );
617}
618extern "C" {
619    pub fn fmpz_mpoly_get_term_coeff_ui(
620        A: *const fmpz_mpoly_struct,
621        i: mp_limb_signed_t,
622        ctx: *const fmpz_mpoly_ctx_struct,
623    ) -> mp_limb_t;
624}
625extern "C" {
626    pub fn fmpz_mpoly_get_term_coeff_si(
627        A: *const fmpz_mpoly_struct,
628        i: mp_limb_signed_t,
629        ctx: *const fmpz_mpoly_ctx_struct,
630    ) -> mp_limb_signed_t;
631}
632extern "C" {
633    pub fn fmpz_mpoly_set_term_coeff_fmpz(
634        A: *mut fmpz_mpoly_struct,
635        i: mp_limb_signed_t,
636        c: *const fmpz,
637        ctx: *const fmpz_mpoly_ctx_struct,
638    );
639}
640extern "C" {
641    pub fn fmpz_mpoly_set_term_coeff_ui(
642        A: *mut fmpz_mpoly_struct,
643        i: mp_limb_signed_t,
644        c: mp_limb_t,
645        ctx: *const fmpz_mpoly_ctx_struct,
646    );
647}
648extern "C" {
649    pub fn fmpz_mpoly_set_term_coeff_si(
650        A: *mut fmpz_mpoly_struct,
651        i: mp_limb_signed_t,
652        c: mp_limb_signed_t,
653        ctx: *const fmpz_mpoly_ctx_struct,
654    );
655}
656extern "C" {
657    pub fn fmpz_mpoly_term_exp_fits_ui(
658        A: *const fmpz_mpoly_struct,
659        i: mp_limb_signed_t,
660        ctx: *const fmpz_mpoly_ctx_struct,
661    ) -> c_int;
662}
663extern "C" {
664    pub fn fmpz_mpoly_term_exp_fits_si(
665        A: *const fmpz_mpoly_struct,
666        i: mp_limb_signed_t,
667        ctx: *const fmpz_mpoly_ctx_struct,
668    ) -> c_int;
669}
670extern "C" {
671    pub fn fmpz_mpoly_get_term_exp_fmpz(
672        exp: *mut *mut fmpz,
673        A: *const fmpz_mpoly_struct,
674        i: mp_limb_signed_t,
675        ctx: *const fmpz_mpoly_ctx_struct,
676    );
677}
678extern "C" {
679    pub fn fmpz_mpoly_get_term_exp_ui(
680        exp: *mut mp_limb_t,
681        A: *const fmpz_mpoly_struct,
682        i: mp_limb_signed_t,
683        ctx: *const fmpz_mpoly_ctx_struct,
684    );
685}
686extern "C" {
687    pub fn fmpz_mpoly_get_term_exp_si(
688        exp: *mut mp_limb_signed_t,
689        A: *const fmpz_mpoly_struct,
690        i: mp_limb_signed_t,
691        ctx: *const fmpz_mpoly_ctx_struct,
692    );
693}
694extern "C" {
695    pub fn fmpz_mpoly_get_term_var_exp_ui(
696        A: *mut fmpz_mpoly_struct,
697        i: mp_limb_signed_t,
698        var: mp_limb_signed_t,
699        ctx: *const fmpz_mpoly_ctx_struct,
700    ) -> mp_limb_t;
701}
702extern "C" {
703    pub fn fmpz_mpoly_get_term_var_exp_si(
704        A: *mut fmpz_mpoly_struct,
705        i: mp_limb_signed_t,
706        var: mp_limb_signed_t,
707        ctx: *const fmpz_mpoly_ctx_struct,
708    ) -> mp_limb_signed_t;
709}
710extern "C" {
711    pub fn fmpz_mpoly_set_term_exp_fmpz(
712        A: *mut fmpz_mpoly_struct,
713        i: mp_limb_signed_t,
714        exp: *const *mut fmpz,
715        ctx: *const fmpz_mpoly_ctx_struct,
716    );
717}
718extern "C" {
719    pub fn fmpz_mpoly_set_term_exp_ui(
720        A: *mut fmpz_mpoly_struct,
721        i: mp_limb_signed_t,
722        exp: *const mp_limb_t,
723        ctx: *const fmpz_mpoly_ctx_struct,
724    );
725}
726extern "C" {
727    pub fn fmpz_mpoly_get_term(
728        M: *mut fmpz_mpoly_struct,
729        A: *const fmpz_mpoly_struct,
730        i: mp_limb_signed_t,
731        ctx: *const fmpz_mpoly_ctx_struct,
732    );
733}
734extern "C" {
735    pub fn fmpz_mpoly_get_term_monomial(
736        M: *mut fmpz_mpoly_struct,
737        A: *const fmpz_mpoly_struct,
738        i: mp_limb_signed_t,
739        ctx: *const fmpz_mpoly_ctx_struct,
740    );
741}
742extern "C" {
743    pub fn fmpz_mpoly_push_term_fmpz_fmpz(
744        A: *mut fmpz_mpoly_struct,
745        c: *const fmpz,
746        exp: *const *const fmpz,
747        ctx: *const fmpz_mpoly_ctx_struct,
748    );
749}
750extern "C" {
751    pub fn fmpz_mpoly_push_term_ui_fmpz(
752        A: *mut fmpz_mpoly_struct,
753        c: mp_limb_t,
754        exp: *const *const fmpz,
755        ctx: *const fmpz_mpoly_ctx_struct,
756    );
757}
758extern "C" {
759    pub fn fmpz_mpoly_push_term_si_fmpz(
760        A: *mut fmpz_mpoly_struct,
761        c: mp_limb_signed_t,
762        exp: *const *const fmpz,
763        ctx: *const fmpz_mpoly_ctx_struct,
764    );
765}
766extern "C" {
767    pub fn fmpz_mpoly_push_term_fmpz_ui(
768        A: *mut fmpz_mpoly_struct,
769        c: *const fmpz,
770        exp: *const mp_limb_t,
771        ctx: *const fmpz_mpoly_ctx_struct,
772    );
773}
774extern "C" {
775    pub fn fmpz_mpoly_push_term_ui_ui(
776        A: *mut fmpz_mpoly_struct,
777        c: mp_limb_t,
778        exp: *const mp_limb_t,
779        ctx: *const fmpz_mpoly_ctx_struct,
780    );
781}
782extern "C" {
783    pub fn fmpz_mpoly_push_term_si_ui(
784        A: *mut fmpz_mpoly_struct,
785        c: mp_limb_signed_t,
786        exp: *const mp_limb_t,
787        ctx: *const fmpz_mpoly_ctx_struct,
788    );
789}
790extern "C" {
791    pub fn fmpz_mpoly_sort_terms(A: *mut fmpz_mpoly_struct, ctx: *const fmpz_mpoly_ctx_struct);
792}
793extern "C" {
794    pub fn fmpz_mpoly_combine_like_terms(
795        A: *mut fmpz_mpoly_struct,
796        ctx: *const fmpz_mpoly_ctx_struct,
797    );
798}
799extern "C" {
800    pub fn fmpz_mpoly_reverse(
801        A: *mut fmpz_mpoly_struct,
802        B: *const fmpz_mpoly_struct,
803        ctx: *const fmpz_mpoly_ctx_struct,
804    );
805}
806extern "C" {
807    pub fn fmpz_mpoly_assert_canonical(
808        A: *mut fmpz_mpoly_struct,
809        ctx: *const fmpz_mpoly_ctx_struct,
810    );
811}
812extern "C" {
813    pub fn _fmpz_mpoly_radix_sort1(
814        A: *mut fmpz_mpoly_struct,
815        left: mp_limb_signed_t,
816        right: mp_limb_signed_t,
817        pos: mp_limb_t,
818        cmpmask: mp_limb_t,
819        totalmask: mp_limb_t,
820    );
821}
822extern "C" {
823    pub fn _fmpz_mpoly_radix_sort(
824        A: *mut fmpz_mpoly_struct,
825        left: mp_limb_signed_t,
826        right: mp_limb_signed_t,
827        pos: mp_limb_t,
828        N: mp_limb_signed_t,
829        cmpmask: *const mp_limb_t,
830    );
831}
832extern "C" {
833    pub fn _fmpz_mpoly_push_exp_ffmpz(
834        A: *mut fmpz_mpoly_struct,
835        exp: *const fmpz,
836        ctx: *const fmpz_mpoly_ctx_struct,
837    );
838}
839extern "C" {
840    pub fn _fmpz_mpoly_push_exp_pfmpz(
841        A: *mut fmpz_mpoly_struct,
842        exp: *const *mut fmpz,
843        ctx: *const fmpz_mpoly_ctx_struct,
844    );
845}
846extern "C" {
847    pub fn _fmpz_mpoly_push_exp_ui(
848        A: *mut fmpz_mpoly_struct,
849        exp: *const mp_limb_t,
850        ctx: *const fmpz_mpoly_ctx_struct,
851    );
852}
853extern "C" {
854    pub fn fmpz_mpoly_randtest_bound(
855        A: *mut fmpz_mpoly_struct,
856        state: *const flint_rand_s,
857        length: mp_limb_signed_t,
858        coeff_bits: mp_limb_t,
859        exp_bound: mp_limb_t,
860        ctx: *const fmpz_mpoly_ctx_struct,
861    );
862}
863extern "C" {
864    pub fn fmpz_mpoly_randtest_bounds(
865        A: *mut fmpz_mpoly_struct,
866        state: *const flint_rand_s,
867        length: mp_limb_signed_t,
868        coeff_bits: mp_limb_t,
869        exp_bounds: *const mp_limb_t,
870        ctx: *const fmpz_mpoly_ctx_struct,
871    );
872}
873extern "C" {
874    pub fn fmpz_mpoly_randtest_bits(
875        A: *mut fmpz_mpoly_struct,
876        state: *const flint_rand_s,
877        length: mp_limb_signed_t,
878        coeff_bits: mp_limb_t,
879        exp_bits: mp_limb_t,
880        ctx: *const fmpz_mpoly_ctx_struct,
881    );
882}
883extern "C" {
884    pub fn fmpz_mpoly_add_fmpz(
885        A: *mut fmpz_mpoly_struct,
886        B: *const fmpz_mpoly_struct,
887        c: *const fmpz,
888        ctx: *const fmpz_mpoly_ctx_struct,
889    );
890}
891extern "C" {
892    pub fn fmpz_mpoly_add_ui(
893        A: *mut fmpz_mpoly_struct,
894        B: *const fmpz_mpoly_struct,
895        c: mp_limb_t,
896        ctx: *const fmpz_mpoly_ctx_struct,
897    );
898}
899extern "C" {
900    pub fn fmpz_mpoly_add_si(
901        A: *mut fmpz_mpoly_struct,
902        B: *const fmpz_mpoly_struct,
903        c: mp_limb_signed_t,
904        ctx: *const fmpz_mpoly_ctx_struct,
905    );
906}
907extern "C" {
908    pub fn fmpz_mpoly_sub_fmpz(
909        A: *mut fmpz_mpoly_struct,
910        B: *const fmpz_mpoly_struct,
911        c: *const fmpz,
912        ctx: *const fmpz_mpoly_ctx_struct,
913    );
914}
915extern "C" {
916    pub fn fmpz_mpoly_sub_ui(
917        A: *mut fmpz_mpoly_struct,
918        B: *const fmpz_mpoly_struct,
919        c: mp_limb_t,
920        ctx: *const fmpz_mpoly_ctx_struct,
921    );
922}
923extern "C" {
924    pub fn fmpz_mpoly_sub_si(
925        A: *mut fmpz_mpoly_struct,
926        B: *const fmpz_mpoly_struct,
927        c: mp_limb_signed_t,
928        ctx: *const fmpz_mpoly_ctx_struct,
929    );
930}
931extern "C" {
932    pub fn fmpz_mpoly_add(
933        A: *mut fmpz_mpoly_struct,
934        B: *const fmpz_mpoly_struct,
935        C: *const fmpz_mpoly_struct,
936        ctx: *const fmpz_mpoly_ctx_struct,
937    );
938}
939extern "C" {
940    pub fn _fmpz_mpoly_add(
941        poly1: *mut fmpz,
942        exps1: *mut mp_limb_t,
943        poly2: *const fmpz,
944        exps2: *const mp_limb_t,
945        len2: mp_limb_signed_t,
946        poly3: *const fmpz,
947        exps3: *const mp_limb_t,
948        len3: mp_limb_signed_t,
949        N: mp_limb_signed_t,
950        cmpmask: *const mp_limb_t,
951    ) -> mp_limb_signed_t;
952}
953extern "C" {
954    pub fn fmpz_mpoly_sub(
955        A: *mut fmpz_mpoly_struct,
956        B: *const fmpz_mpoly_struct,
957        C: *const fmpz_mpoly_struct,
958        ctx: *const fmpz_mpoly_ctx_struct,
959    );
960}
961extern "C" {
962    pub fn _fmpz_mpoly_sub(
963        poly1: *mut fmpz,
964        exps1: *mut mp_limb_t,
965        poly2: *const fmpz,
966        exps2: *const mp_limb_t,
967        len2: mp_limb_signed_t,
968        poly3: *const fmpz,
969        exps3: *const mp_limb_t,
970        len3: mp_limb_signed_t,
971        N: mp_limb_signed_t,
972        cmpmask: *const mp_limb_t,
973    ) -> mp_limb_signed_t;
974}
975extern "C" {
976    pub fn fmpz_mpoly_neg(
977        A: *mut fmpz_mpoly_struct,
978        B: *const fmpz_mpoly_struct,
979        ctx: *const fmpz_mpoly_ctx_struct,
980    );
981}
982extern "C" {
983    pub fn fmpz_mpoly_scalar_mul_fmpz(
984        A: *mut fmpz_mpoly_struct,
985        B: *const fmpz_mpoly_struct,
986        c: *const fmpz,
987        ctx: *const fmpz_mpoly_ctx_struct,
988    );
989}
990extern "C" {
991    pub fn fmpz_mpoly_scalar_mul_si(
992        A: *mut fmpz_mpoly_struct,
993        B: *const fmpz_mpoly_struct,
994        c: mp_limb_signed_t,
995        ctx: *const fmpz_mpoly_ctx_struct,
996    );
997}
998extern "C" {
999    pub fn fmpz_mpoly_scalar_mul_ui(
1000        A: *mut fmpz_mpoly_struct,
1001        B: *const fmpz_mpoly_struct,
1002        c: mp_limb_t,
1003        ctx: *const fmpz_mpoly_ctx_struct,
1004    );
1005}
1006extern "C" {
1007    pub fn fmpz_mpoly_scalar_fmma(
1008        A: *mut fmpz_mpoly_struct,
1009        B: *const fmpz_mpoly_struct,
1010        c: *const fmpz,
1011        D: *const fmpz_mpoly_struct,
1012        e: *const fmpz,
1013        ctx: *const fmpz_mpoly_ctx_struct,
1014    );
1015}
1016extern "C" {
1017    pub fn fmpz_mpoly_scalar_divexact_fmpz(
1018        A: *mut fmpz_mpoly_struct,
1019        B: *const fmpz_mpoly_struct,
1020        c: *const fmpz,
1021        ctx: *const fmpz_mpoly_ctx_struct,
1022    );
1023}
1024extern "C" {
1025    pub fn fmpz_mpoly_scalar_divexact_si(
1026        A: *mut fmpz_mpoly_struct,
1027        B: *const fmpz_mpoly_struct,
1028        c: mp_limb_signed_t,
1029        ctx: *const fmpz_mpoly_ctx_struct,
1030    );
1031}
1032extern "C" {
1033    pub fn fmpz_mpoly_scalar_divexact_ui(
1034        A: *mut fmpz_mpoly_struct,
1035        B: *const fmpz_mpoly_struct,
1036        c: mp_limb_t,
1037        ctx: *const fmpz_mpoly_ctx_struct,
1038    );
1039}
1040extern "C" {
1041    pub fn fmpz_mpoly_scalar_divides_fmpz(
1042        A: *const fmpz_mpoly_struct,
1043        B: *const fmpz_mpoly_struct,
1044        c: *const fmpz,
1045        ctx: *const fmpz_mpoly_ctx_struct,
1046    ) -> c_int;
1047}
1048extern "C" {
1049    pub fn fmpz_mpoly_scalar_divides_si(
1050        A: *const fmpz_mpoly_struct,
1051        B: *const fmpz_mpoly_struct,
1052        c: mp_limb_signed_t,
1053        ctx: *const fmpz_mpoly_ctx_struct,
1054    ) -> c_int;
1055}
1056extern "C" {
1057    pub fn fmpz_mpoly_scalar_divides_ui(
1058        A: *const fmpz_mpoly_struct,
1059        B: *const fmpz_mpoly_struct,
1060        c: mp_limb_t,
1061        ctx: *const fmpz_mpoly_ctx_struct,
1062    ) -> c_int;
1063}
1064extern "C" {
1065    pub fn fmpz_mpoly_derivative(
1066        A: *mut fmpz_mpoly_struct,
1067        B: *const fmpz_mpoly_struct,
1068        var: mp_limb_signed_t,
1069        ctx: *const fmpz_mpoly_ctx_struct,
1070    );
1071}
1072extern "C" {
1073    pub fn fmpz_mpoly_integral(
1074        A: *mut fmpz_mpoly_struct,
1075        scale: *mut fmpz,
1076        B: *const fmpz_mpoly_struct,
1077        var: mp_limb_signed_t,
1078        ctx: *const fmpz_mpoly_ctx_struct,
1079    );
1080}
1081extern "C" {
1082    pub fn _fmpz_pow_ui_is_not_feasible(bbits: mp_limb_t, e: mp_limb_t) -> c_int;
1083}
1084extern "C" {
1085    pub fn _fmpz_pow_fmpz_is_not_feasible(bbits: mp_limb_t, e: *const fmpz) -> c_int;
1086}
1087extern "C" {
1088    pub fn fmpz_mpoly_evaluate_all_fmpz(
1089        ev: *mut fmpz,
1090        A: *const fmpz_mpoly_struct,
1091        vals: *const *const fmpz,
1092        ctx: *const fmpz_mpoly_ctx_struct,
1093    ) -> c_int;
1094}
1095extern "C" {
1096    pub fn fmpz_mpoly_evaluate_all_nmod(
1097        A: *mut fmpz_mpoly_struct,
1098        alphas: *const mp_limb_t,
1099        ctx: *const fmpz_mpoly_ctx_struct,
1100        fpctx: nmod_t,
1101    ) -> mp_limb_t;
1102}
1103extern "C" {
1104    pub fn fmpz_mpoly_evaluate_all_fmpz_mod(
1105        ev: *mut fmpz,
1106        A: *const fmpz_mpoly_struct,
1107        alphas: *const fmpz,
1108        ctx: *const fmpz_mpoly_ctx_struct,
1109        fpctx: *const fmpz_mod_ctx_struct,
1110    );
1111}
1112extern "C" {
1113    pub fn fmpz_mpoly_evaluate_one_fmpz(
1114        A: *mut fmpz_mpoly_struct,
1115        B: *const fmpz_mpoly_struct,
1116        var: mp_limb_signed_t,
1117        val: *const fmpz,
1118        ctx: *const fmpz_mpoly_ctx_struct,
1119    ) -> c_int;
1120}
1121extern "C" {
1122    pub fn fmpz_mpoly_compose_fmpz_poly(
1123        A: *mut fmpz_poly_struct,
1124        B: *const fmpz_mpoly_struct,
1125        C: *const *const fmpz_poly_struct,
1126        ctxB: *const fmpz_mpoly_ctx_struct,
1127    ) -> c_int;
1128}
1129extern "C" {
1130    pub fn _fmpz_mpoly_compose_mat(
1131        A: *mut fmpz_mpoly_struct,
1132        B: *const fmpz_mpoly_struct,
1133        M: *const fmpz_mat_struct,
1134        ctxB: *const fmpz_mpoly_ctx_struct,
1135        ctxAC: *const fmpz_mpoly_ctx_struct,
1136    );
1137}
1138extern "C" {
1139    pub fn fmpz_mpoly_compose_fmpz_mpoly_geobucket(
1140        A: *mut fmpz_mpoly_struct,
1141        B: *const fmpz_mpoly_struct,
1142        C: *const *const fmpz_mpoly_struct,
1143        ctxB: *const fmpz_mpoly_ctx_struct,
1144        ctxAC: *const fmpz_mpoly_ctx_struct,
1145    ) -> c_int;
1146}
1147extern "C" {
1148    pub fn fmpz_mpoly_compose_fmpz_mpoly_horner(
1149        A: *mut fmpz_mpoly_struct,
1150        B: *const fmpz_mpoly_struct,
1151        C: *const *const fmpz_mpoly_struct,
1152        ctxB: *const fmpz_mpoly_ctx_struct,
1153        ctxAC: *const fmpz_mpoly_ctx_struct,
1154    ) -> c_int;
1155}
1156extern "C" {
1157    pub fn fmpz_mpoly_compose_fmpz_mpoly(
1158        A: *mut fmpz_mpoly_struct,
1159        B: *const fmpz_mpoly_struct,
1160        C: *const *const fmpz_mpoly_struct,
1161        ctxB: *const fmpz_mpoly_ctx_struct,
1162        ctxAC: *const fmpz_mpoly_ctx_struct,
1163    ) -> c_int;
1164}
1165extern "C" {
1166    pub fn fmpz_mpoly_compose_fmpz_mpoly_gen(
1167        A: *mut fmpz_mpoly_struct,
1168        B: *const fmpz_mpoly_struct,
1169        c: *const mp_limb_signed_t,
1170        ctxB: *const fmpz_mpoly_ctx_struct,
1171        ctxAC: *const fmpz_mpoly_ctx_struct,
1172    );
1173}
1174extern "C" {
1175    pub fn fmpz_mpoly_mul(
1176        A: *mut fmpz_mpoly_struct,
1177        B: *const fmpz_mpoly_struct,
1178        C: *const fmpz_mpoly_struct,
1179        ctx: *const fmpz_mpoly_ctx_struct,
1180    );
1181}
1182extern "C" {
1183    pub fn fmpz_mpoly_mul_johnson(
1184        A: *mut fmpz_mpoly_struct,
1185        B: *const fmpz_mpoly_struct,
1186        C: *const fmpz_mpoly_struct,
1187        ctx: *const fmpz_mpoly_ctx_struct,
1188    );
1189}
1190extern "C" {
1191    pub fn fmpz_mpoly_mul_heap_threaded(
1192        A: *mut fmpz_mpoly_struct,
1193        B: *const fmpz_mpoly_struct,
1194        C: *const fmpz_mpoly_struct,
1195        ctx: *const fmpz_mpoly_ctx_struct,
1196    );
1197}
1198extern "C" {
1199    pub fn fmpz_mpoly_mul_array(
1200        A: *mut fmpz_mpoly_struct,
1201        B: *const fmpz_mpoly_struct,
1202        C: *const fmpz_mpoly_struct,
1203        ctx: *const fmpz_mpoly_ctx_struct,
1204    ) -> c_int;
1205}
1206extern "C" {
1207    pub fn fmpz_mpoly_mul_array_threaded(
1208        A: *mut fmpz_mpoly_struct,
1209        B: *const fmpz_mpoly_struct,
1210        C: *const fmpz_mpoly_struct,
1211        ctx: *const fmpz_mpoly_ctx_struct,
1212    ) -> c_int;
1213}
1214extern "C" {
1215    pub fn fmpz_mpoly_mul_dense(
1216        A: *mut fmpz_mpoly_struct,
1217        B: *const fmpz_mpoly_struct,
1218        C: *const fmpz_mpoly_struct,
1219        ctx: *const fmpz_mpoly_ctx_struct,
1220    ) -> c_int;
1221}
1222extern "C" {
1223    pub fn _fmpz_mpoly_mul_johnson(
1224        poly1: *mut *mut fmpz,
1225        exp1: *mut *mut mp_limb_t,
1226        alloc: *mut mp_limb_signed_t,
1227        poly2: *const fmpz,
1228        exp2: *const mp_limb_t,
1229        len2: mp_limb_signed_t,
1230        poly3: *const fmpz,
1231        exp3: *const mp_limb_t,
1232        len3: mp_limb_signed_t,
1233        bits: mp_limb_t,
1234        N: mp_limb_signed_t,
1235        cmpmask: *const mp_limb_t,
1236    ) -> mp_limb_signed_t;
1237}
1238extern "C" {
1239    pub fn _fmpz_mpoly_mul_johnson_maxfields(
1240        A: *mut fmpz_mpoly_struct,
1241        B: *const fmpz_mpoly_struct,
1242        maxBfields: *const fmpz,
1243        C: *const fmpz_mpoly_struct,
1244        maxCfields: *const fmpz,
1245        ctx: *const fmpz_mpoly_ctx_struct,
1246    );
1247}
1248extern "C" {
1249    pub fn _fmpz_mpoly_mul_heap_threaded_pool_maxfields(
1250        A: *mut fmpz_mpoly_struct,
1251        B: *const fmpz_mpoly_struct,
1252        maxBfields: *const fmpz,
1253        C: *const fmpz_mpoly_struct,
1254        maxCfields: *const fmpz,
1255        ctx: *const fmpz_mpoly_ctx_struct,
1256        handles: *const thread_pool_handle,
1257        num_handles: mp_limb_signed_t,
1258    );
1259}
1260extern "C" {
1261    pub fn _fmpz_mpoly_mul_array_DEG(
1262        A: *mut fmpz_mpoly_struct,
1263        B: *const fmpz_mpoly_struct,
1264        maxBfields: *const fmpz,
1265        C: *const fmpz_mpoly_struct,
1266        maxCfields: *const fmpz,
1267        ctx: *const fmpz_mpoly_ctx_struct,
1268    ) -> c_int;
1269}
1270extern "C" {
1271    pub fn _fmpz_mpoly_mul_array_LEX(
1272        A: *mut fmpz_mpoly_struct,
1273        B: *const fmpz_mpoly_struct,
1274        maxBfields: *const fmpz,
1275        C: *const fmpz_mpoly_struct,
1276        maxCfields: *const fmpz,
1277        ctx: *const fmpz_mpoly_ctx_struct,
1278    ) -> c_int;
1279}
1280extern "C" {
1281    pub fn _fmpz_mpoly_mul_array_threaded_pool_DEG(
1282        A: *mut fmpz_mpoly_struct,
1283        B: *const fmpz_mpoly_struct,
1284        maxBfields: *const fmpz,
1285        C: *const fmpz_mpoly_struct,
1286        maxCfields: *const fmpz,
1287        ctx: *const fmpz_mpoly_ctx_struct,
1288        handles: *const thread_pool_handle,
1289        num_handles: mp_limb_signed_t,
1290    ) -> c_int;
1291}
1292extern "C" {
1293    pub fn _fmpz_mpoly_mul_array_threaded_pool_LEX(
1294        A: *mut fmpz_mpoly_struct,
1295        B: *const fmpz_mpoly_struct,
1296        maxBfields: *const fmpz,
1297        C: *const fmpz_mpoly_struct,
1298        maxCfields: *const fmpz,
1299        ctx: *const fmpz_mpoly_ctx_struct,
1300        handles: *const thread_pool_handle,
1301        num_handles: mp_limb_signed_t,
1302    ) -> c_int;
1303}
1304extern "C" {
1305    pub fn _fmpz_mpoly_mul_dense(
1306        P: *mut fmpz_mpoly_struct,
1307        A: *const fmpz_mpoly_struct,
1308        maxAfields: *const fmpz,
1309        B: *const fmpz_mpoly_struct,
1310        maxBfields: *const fmpz,
1311        ctx: *const fmpz_mpoly_ctx_struct,
1312    ) -> c_int;
1313}
1314extern "C" {
1315    pub fn fmpz_mpoly_pow_fmpz(
1316        A: *mut fmpz_mpoly_struct,
1317        B: *const fmpz_mpoly_struct,
1318        k: *const fmpz,
1319        ctx: *const fmpz_mpoly_ctx_struct,
1320    ) -> c_int;
1321}
1322extern "C" {
1323    pub fn fmpz_mpoly_pow_ui(
1324        A: *mut fmpz_mpoly_struct,
1325        B: *const fmpz_mpoly_struct,
1326        k: mp_limb_t,
1327        ctx: *const fmpz_mpoly_ctx_struct,
1328    ) -> c_int;
1329}
1330extern "C" {
1331    pub fn fmpz_mpoly_divides(
1332        Q: *mut fmpz_mpoly_struct,
1333        A: *const fmpz_mpoly_struct,
1334        B: *const fmpz_mpoly_struct,
1335        ctx: *const fmpz_mpoly_ctx_struct,
1336    ) -> c_int;
1337}
1338extern "C" {
1339    pub fn fmpz_mpoly_divides_monagan_pearce(
1340        Q: *mut fmpz_mpoly_struct,
1341        A: *const fmpz_mpoly_struct,
1342        B: *const fmpz_mpoly_struct,
1343        ctx: *const fmpz_mpoly_ctx_struct,
1344    ) -> c_int;
1345}
1346extern "C" {
1347    pub fn fmpz_mpoly_divides_heap_threaded(
1348        Q: *mut fmpz_mpoly_struct,
1349        A: *const fmpz_mpoly_struct,
1350        B: *const fmpz_mpoly_struct,
1351        ctx: *const fmpz_mpoly_ctx_struct,
1352    ) -> c_int;
1353}
1354extern "C" {
1355    pub fn _fmpz_mpoly_divides_heap_threaded_pool(
1356        Q: *mut fmpz_mpoly_struct,
1357        A: *const fmpz_mpoly_struct,
1358        B: *const fmpz_mpoly_struct,
1359        ctx: *const fmpz_mpoly_ctx_struct,
1360        handles: *const thread_pool_handle,
1361        num_handles: mp_limb_signed_t,
1362    ) -> c_int;
1363}
1364extern "C" {
1365    pub fn _fmpz_mpoly_divides_array(
1366        poly1: *mut *mut fmpz,
1367        exp1: *mut *mut mp_limb_t,
1368        alloc: *mut mp_limb_signed_t,
1369        poly2: *const fmpz,
1370        exp2: *const mp_limb_t,
1371        len2: mp_limb_signed_t,
1372        poly3: *const fmpz,
1373        exp3: *const mp_limb_t,
1374        len3: mp_limb_signed_t,
1375        mults: *const mp_limb_signed_t,
1376        num: mp_limb_signed_t,
1377        bits: mp_limb_signed_t,
1378    ) -> mp_limb_signed_t;
1379}
1380extern "C" {
1381    pub fn fmpz_mpoly_divides_array(
1382        poly1: *mut fmpz_mpoly_struct,
1383        poly2: *const fmpz_mpoly_struct,
1384        poly3: *const fmpz_mpoly_struct,
1385        ctx: *const fmpz_mpoly_ctx_struct,
1386    ) -> c_int;
1387}
1388extern "C" {
1389    pub fn mpoly_divides_select_exps(
1390        S: *const fmpz_mpoly_struct,
1391        zctx: *const fmpz_mpoly_ctx_struct,
1392        nworkers: mp_limb_signed_t,
1393        Aexp: *const mp_limb_t,
1394        Alen: mp_limb_signed_t,
1395        Bexp: *const mp_limb_t,
1396        Blen: mp_limb_signed_t,
1397        bits: mp_limb_t,
1398    ) -> c_int;
1399}
1400extern "C" {
1401    pub fn _fmpz_mpoly_divides_monagan_pearce(
1402        poly1: *mut *mut fmpz,
1403        exp1: *mut *mut mp_limb_t,
1404        alloc: *mut mp_limb_signed_t,
1405        poly2: *const fmpz,
1406        exp2: *const mp_limb_t,
1407        len2: mp_limb_signed_t,
1408        poly3: *const fmpz,
1409        exp3: *const mp_limb_t,
1410        len3: mp_limb_signed_t,
1411        bits: mp_limb_t,
1412        N: mp_limb_signed_t,
1413        cmpmask: *const mp_limb_t,
1414    ) -> mp_limb_signed_t;
1415}
1416extern "C" {
1417    pub fn fmpz_mpoly_divrem(
1418        Q: *mut fmpz_mpoly_struct,
1419        R: *mut fmpz_mpoly_struct,
1420        A: *const fmpz_mpoly_struct,
1421        B: *const fmpz_mpoly_struct,
1422        ctx: *const fmpz_mpoly_ctx_struct,
1423    );
1424}
1425extern "C" {
1426    pub fn fmpz_mpoly_quasidivrem(
1427        scale: *mut fmpz,
1428        Q: *mut fmpz_mpoly_struct,
1429        R: *mut fmpz_mpoly_struct,
1430        A: *const fmpz_mpoly_struct,
1431        B: *const fmpz_mpoly_struct,
1432        ctx: *const fmpz_mpoly_ctx_struct,
1433    );
1434}
1435extern "C" {
1436    pub fn fmpz_mpoly_div(
1437        Q: *mut fmpz_mpoly_struct,
1438        A: *const fmpz_mpoly_struct,
1439        B: *const fmpz_mpoly_struct,
1440        ctx: *const fmpz_mpoly_ctx_struct,
1441    );
1442}
1443extern "C" {
1444    pub fn fmpz_mpoly_quasidiv(
1445        scale: *mut fmpz,
1446        Q: *mut fmpz_mpoly_struct,
1447        A: *const fmpz_mpoly_struct,
1448        B: *const fmpz_mpoly_struct,
1449        ctx: *const fmpz_mpoly_ctx_struct,
1450    );
1451}
1452extern "C" {
1453    pub fn fmpz_mpoly_divrem_ideal(
1454        Q: *mut *mut fmpz_mpoly_struct,
1455        R: *mut fmpz_mpoly_struct,
1456        A: *const fmpz_mpoly_struct,
1457        B: *const *const fmpz_mpoly_struct,
1458        len: mp_limb_signed_t,
1459        ctx: *const fmpz_mpoly_ctx_struct,
1460    );
1461}
1462extern "C" {
1463    pub fn fmpz_mpoly_quasidivrem_ideal(
1464        scale: *mut fmpz,
1465        Q: *mut *mut fmpz_mpoly_struct,
1466        R: *mut fmpz_mpoly_struct,
1467        A: *const fmpz_mpoly_struct,
1468        B: *const *const fmpz_mpoly_struct,
1469        len: mp_limb_signed_t,
1470        ctx: *const fmpz_mpoly_ctx_struct,
1471    );
1472}
1473extern "C" {
1474    pub fn fmpz_mpoly_divexact(
1475        Q: *mut fmpz_mpoly_struct,
1476        A: *const fmpz_mpoly_struct,
1477        B: *const fmpz_mpoly_struct,
1478        ctx: *const fmpz_mpoly_ctx_struct,
1479    );
1480}
1481extern "C" {
1482    pub fn _fmpz_mpoly_div_monagan_pearce(
1483        polyq: *mut *mut fmpz,
1484        expq: *mut *mut mp_limb_t,
1485        allocq: *mut mp_limb_signed_t,
1486        poly2: *const fmpz,
1487        exp2: *const mp_limb_t,
1488        len2: mp_limb_signed_t,
1489        poly3: *const fmpz,
1490        exp3: *const mp_limb_t,
1491        len3: mp_limb_signed_t,
1492        bits: mp_limb_signed_t,
1493        N: mp_limb_signed_t,
1494        cmpmask: *const mp_limb_t,
1495    ) -> mp_limb_signed_t;
1496}
1497extern "C" {
1498    pub fn fmpz_mpoly_div_monagan_pearce(
1499        q: *mut fmpz_mpoly_struct,
1500        poly2: *const fmpz_mpoly_struct,
1501        poly3: *const fmpz_mpoly_struct,
1502        ctx: *const fmpz_mpoly_ctx_struct,
1503    );
1504}
1505extern "C" {
1506    pub fn _fmpz_mpoly_divrem_monagan_pearce(
1507        lenr: *mut mp_limb_signed_t,
1508        polyq: *mut *mut fmpz,
1509        expq: *mut *mut mp_limb_t,
1510        allocq: *mut mp_limb_signed_t,
1511        polyr: *mut *mut fmpz,
1512        expr: *mut *mut mp_limb_t,
1513        allocr: *mut mp_limb_signed_t,
1514        poly2: *const fmpz,
1515        exp2: *const mp_limb_t,
1516        len2: mp_limb_signed_t,
1517        poly3: *const fmpz,
1518        exp3: *const mp_limb_t,
1519        len3: mp_limb_signed_t,
1520        bits: mp_limb_signed_t,
1521        N: mp_limb_signed_t,
1522        cmpmask: *const mp_limb_t,
1523    ) -> mp_limb_signed_t;
1524}
1525extern "C" {
1526    pub fn fmpz_mpoly_divrem_monagan_pearce(
1527        q: *mut fmpz_mpoly_struct,
1528        r: *mut fmpz_mpoly_struct,
1529        poly2: *const fmpz_mpoly_struct,
1530        poly3: *const fmpz_mpoly_struct,
1531        ctx: *const fmpz_mpoly_ctx_struct,
1532    );
1533}
1534extern "C" {
1535    pub fn _fmpz_mpoly_divrem_array(
1536        lenr: *mut mp_limb_signed_t,
1537        polyq: *mut *mut fmpz,
1538        expq: *mut *mut mp_limb_t,
1539        allocq: *mut mp_limb_signed_t,
1540        polyr: *mut *mut fmpz,
1541        expr: *mut *mut mp_limb_t,
1542        allocr: *mut mp_limb_signed_t,
1543        poly2: *const fmpz,
1544        exp2: *const mp_limb_t,
1545        len2: mp_limb_signed_t,
1546        poly3: *const fmpz,
1547        exp3: *const mp_limb_t,
1548        len3: mp_limb_signed_t,
1549        mults: *const mp_limb_signed_t,
1550        num: mp_limb_signed_t,
1551        bits: mp_limb_signed_t,
1552    ) -> mp_limb_signed_t;
1553}
1554extern "C" {
1555    pub fn fmpz_mpoly_divrem_array(
1556        q: *mut fmpz_mpoly_struct,
1557        r: *mut fmpz_mpoly_struct,
1558        poly2: *const fmpz_mpoly_struct,
1559        poly3: *const fmpz_mpoly_struct,
1560        ctx: *const fmpz_mpoly_ctx_struct,
1561    ) -> c_int;
1562}
1563extern "C" {
1564    pub fn fmpz_mpoly_quasidivrem_heap(
1565        scale: *mut fmpz,
1566        q: *mut fmpz_mpoly_struct,
1567        r: *mut fmpz_mpoly_struct,
1568        poly2: *const fmpz_mpoly_struct,
1569        poly3: *const fmpz_mpoly_struct,
1570        ctx: *const fmpz_mpoly_ctx_struct,
1571    );
1572}
1573extern "C" {
1574    pub fn fmpz_mpoly_quasidiv_heap(
1575        scale: *mut fmpz,
1576        q: *mut fmpz_mpoly_struct,
1577        poly2: *const fmpz_mpoly_struct,
1578        poly3: *const fmpz_mpoly_struct,
1579        ctx: *const fmpz_mpoly_ctx_struct,
1580    );
1581}
1582extern "C" {
1583    pub fn _fmpz_mpoly_divrem_ideal_monagan_pearce(
1584        polyq: *mut *mut fmpz_mpoly_struct,
1585        polyr: *mut *mut fmpz,
1586        expr: *mut *mut mp_limb_t,
1587        allocr: *mut mp_limb_signed_t,
1588        poly2: *const fmpz,
1589        exp2: *const mp_limb_t,
1590        len2: mp_limb_signed_t,
1591        poly3: *const *const fmpz_mpoly_struct,
1592        exp3: *const *const mp_limb_t,
1593        len: mp_limb_signed_t,
1594        N: mp_limb_signed_t,
1595        bits: mp_limb_signed_t,
1596        ctx: *const fmpz_mpoly_ctx_struct,
1597        cmpmask: *const mp_limb_t,
1598    ) -> mp_limb_signed_t;
1599}
1600extern "C" {
1601    pub fn fmpz_mpoly_divrem_ideal_monagan_pearce(
1602        q: *mut *mut fmpz_mpoly_struct,
1603        r: *mut fmpz_mpoly_struct,
1604        poly2: *const fmpz_mpoly_struct,
1605        poly3: *const *const fmpz_mpoly_struct,
1606        len: mp_limb_signed_t,
1607        ctx: *const fmpz_mpoly_ctx_struct,
1608    );
1609}
1610extern "C" {
1611    pub fn fmpz_mpoly_quasidivrem_ideal_heap(
1612        scale: *mut fmpz,
1613        q: *mut *mut fmpz_mpoly_struct,
1614        r: *mut fmpz_mpoly_struct,
1615        poly2: *const fmpz_mpoly_struct,
1616        poly3: *const *const fmpz_mpoly_struct,
1617        len: mp_limb_signed_t,
1618        ctx: *const fmpz_mpoly_ctx_struct,
1619    );
1620}
1621extern "C" {
1622    pub fn _fmpz_mpoly_sqrt_heap(
1623        polyq: *mut *mut fmpz,
1624        expq: *mut *mut mp_limb_t,
1625        allocq: *mut mp_limb_signed_t,
1626        poly2: *const fmpz,
1627        exp2: *const mp_limb_t,
1628        len2: mp_limb_signed_t,
1629        bits: mp_limb_t,
1630        mctx: *const mpoly_ctx_struct,
1631        check: c_int,
1632    ) -> mp_limb_signed_t;
1633}
1634extern "C" {
1635    pub fn fmpz_mpoly_sqrt_heap(
1636        q: *mut fmpz_mpoly_struct,
1637        poly2: *const fmpz_mpoly_struct,
1638        ctx: *const fmpz_mpoly_ctx_struct,
1639        check: c_int,
1640    ) -> c_int;
1641}
1642extern "C" {
1643    pub fn fmpz_mpoly_sqrt(
1644        q: *mut fmpz_mpoly_struct,
1645        poly2: *const fmpz_mpoly_struct,
1646        ctx: *const fmpz_mpoly_ctx_struct,
1647    ) -> c_int;
1648}
1649extern "C" {
1650    pub fn fmpz_mpoly_is_square(
1651        poly2: *const fmpz_mpoly_struct,
1652        ctx: *const fmpz_mpoly_ctx_struct,
1653    ) -> c_int;
1654}
1655extern "C" {
1656    pub fn fmpz_mpoly_term_content(
1657        M: *mut fmpz_mpoly_struct,
1658        A: *const fmpz_mpoly_struct,
1659        ctx: *const fmpz_mpoly_ctx_struct,
1660    );
1661}
1662extern "C" {
1663    pub fn fmpz_mpoly_content_vars(
1664        g: *mut fmpz_mpoly_struct,
1665        A: *const fmpz_mpoly_struct,
1666        vars: *const mp_limb_signed_t,
1667        vars_length: mp_limb_signed_t,
1668        ctx: *const fmpz_mpoly_ctx_struct,
1669    ) -> c_int;
1670}
1671extern "C" {
1672    pub fn fmpz_mpoly_gcd(
1673        G: *mut fmpz_mpoly_struct,
1674        A: *const fmpz_mpoly_struct,
1675        B: *const fmpz_mpoly_struct,
1676        ctx: *const fmpz_mpoly_ctx_struct,
1677    ) -> c_int;
1678}
1679extern "C" {
1680    pub fn fmpz_mpoly_gcd_cofactors(
1681        G: *mut fmpz_mpoly_struct,
1682        Abar: *mut fmpz_mpoly_struct,
1683        Bbar: *mut fmpz_mpoly_struct,
1684        A: *const fmpz_mpoly_struct,
1685        B: *const fmpz_mpoly_struct,
1686        ctx: *const fmpz_mpoly_ctx_struct,
1687    ) -> c_int;
1688}
1689extern "C" {
1690    pub fn fmpz_mpoly_deflation(
1691        shift: *mut fmpz,
1692        stride: *mut fmpz,
1693        A: *const fmpz_mpoly_struct,
1694        ctx: *const fmpz_mpoly_ctx_struct,
1695    );
1696}
1697extern "C" {
1698    pub fn fmpz_mpoly_deflate(
1699        A: *mut fmpz_mpoly_struct,
1700        B: *const fmpz_mpoly_struct,
1701        shift: *const fmpz,
1702        stride: *const fmpz,
1703        ctx: *const fmpz_mpoly_ctx_struct,
1704    );
1705}
1706extern "C" {
1707    pub fn fmpz_mpoly_inflate(
1708        A: *mut fmpz_mpoly_struct,
1709        B: *const fmpz_mpoly_struct,
1710        shift: *const fmpz,
1711        stride: *const fmpz,
1712        ctx: *const fmpz_mpoly_ctx_struct,
1713    );
1714}
1715extern "C" {
1716    pub fn fmpz_mpoly_gcd_hensel(
1717        G: *mut fmpz_mpoly_struct,
1718        A: *const fmpz_mpoly_struct,
1719        B: *const fmpz_mpoly_struct,
1720        ctx: *const fmpz_mpoly_ctx_struct,
1721    ) -> c_int;
1722}
1723extern "C" {
1724    pub fn fmpz_mpoly_gcd_brown(
1725        G: *mut fmpz_mpoly_struct,
1726        A: *const fmpz_mpoly_struct,
1727        B: *const fmpz_mpoly_struct,
1728        ctx: *const fmpz_mpoly_ctx_struct,
1729    ) -> c_int;
1730}
1731extern "C" {
1732    pub fn fmpz_mpoly_gcd_subresultant(
1733        G: *mut fmpz_mpoly_struct,
1734        A: *const fmpz_mpoly_struct,
1735        B: *const fmpz_mpoly_struct,
1736        ctx: *const fmpz_mpoly_ctx_struct,
1737    ) -> c_int;
1738}
1739extern "C" {
1740    pub fn fmpz_mpoly_gcd_zippel(
1741        G: *mut fmpz_mpoly_struct,
1742        A: *const fmpz_mpoly_struct,
1743        B: *const fmpz_mpoly_struct,
1744        ctx: *const fmpz_mpoly_ctx_struct,
1745    ) -> c_int;
1746}
1747extern "C" {
1748    pub fn fmpz_mpoly_gcd_zippel2(
1749        G: *mut fmpz_mpoly_struct,
1750        A: *const fmpz_mpoly_struct,
1751        B: *const fmpz_mpoly_struct,
1752        ctx: *const fmpz_mpoly_ctx_struct,
1753    ) -> c_int;
1754}
1755extern "C" {
1756    pub fn fmpz_mpoly_univar_init(
1757        A: *mut fmpz_mpoly_univar_struct,
1758        ctx: *const fmpz_mpoly_ctx_struct,
1759    );
1760}
1761extern "C" {
1762    pub fn fmpz_mpoly_univar_clear(
1763        A: *mut fmpz_mpoly_univar_struct,
1764        ctx: *const fmpz_mpoly_ctx_struct,
1765    );
1766}
1767extern "C" {
1768    pub fn fmpz_mpoly_univar_fit_length(
1769        A: *mut fmpz_mpoly_univar_struct,
1770        length: mp_limb_signed_t,
1771        ctx: *const fmpz_mpoly_ctx_struct,
1772    );
1773}
1774extern "C" {
1775    pub fn fmpz_mpoly_univar_print_pretty(
1776        A: *const fmpz_mpoly_univar_struct,
1777        x: *const *const c_char,
1778        ctx: *const fmpz_mpoly_ctx_struct,
1779    );
1780}
1781extern "C" {
1782    pub fn fmpz_mpoly_univar_assert_canonical(
1783        A: *const fmpz_mpoly_univar_struct,
1784        ctx: *const fmpz_mpoly_ctx_struct,
1785    );
1786}
1787extern "C" {
1788    pub fn fmpz_mpoly_univar_zero(
1789        A: *mut fmpz_mpoly_univar_struct,
1790        ctx: *const fmpz_mpoly_ctx_struct,
1791    );
1792}
1793extern "C" {
1794    pub fn fmpz_mpoly_univar_set_coeff_ui(
1795        A: *mut fmpz_mpoly_univar_struct,
1796        e: mp_limb_t,
1797        c: *const fmpz_mpoly_struct,
1798        ctx: *const fmpz_mpoly_ctx_struct,
1799    );
1800}
1801extern "C" {
1802    pub fn fmpz_mpoly_to_univar(
1803        A: *mut fmpz_mpoly_univar_struct,
1804        B: *const fmpz_mpoly_struct,
1805        var: mp_limb_signed_t,
1806        ctx: *const fmpz_mpoly_ctx_struct,
1807    );
1808}
1809extern "C" {
1810    pub fn _fmpz_mpoly_from_univar(
1811        A: *mut fmpz_mpoly_struct,
1812        Abits: mp_limb_t,
1813        B: *const fmpz_mpoly_univar_struct,
1814        var: mp_limb_signed_t,
1815        ctx: *const fmpz_mpoly_ctx_struct,
1816    );
1817}
1818extern "C" {
1819    pub fn fmpz_mpoly_from_univar(
1820        A: *mut fmpz_mpoly_struct,
1821        B: *const fmpz_mpoly_univar_struct,
1822        var: mp_limb_signed_t,
1823        ctx: *const fmpz_mpoly_ctx_struct,
1824    );
1825}
1826extern "C" {
1827    pub fn fmpz_mpoly_univar_swap(
1828        A: *mut fmpz_mpoly_univar_struct,
1829        B: *mut fmpz_mpoly_univar_struct,
1830        ctx: *const fmpz_mpoly_ctx_struct,
1831    );
1832}
1833extern "C" {
1834    pub fn fmpz_mpoly_univar_degree_fits_si(
1835        A: *mut fmpz_mpoly_univar_struct,
1836        ctx: *const fmpz_mpoly_ctx_struct,
1837    ) -> c_int;
1838}
1839extern "C" {
1840    pub fn fmpz_mpoly_univar_length(
1841        A: *mut fmpz_mpoly_univar_struct,
1842        ctx: *const fmpz_mpoly_ctx_struct,
1843    ) -> mp_limb_signed_t;
1844}
1845extern "C" {
1846    pub fn fmpz_mpoly_univar_get_term_exp_si(
1847        A: *mut fmpz_mpoly_univar_struct,
1848        i: mp_limb_signed_t,
1849        ctx: *const fmpz_mpoly_ctx_struct,
1850    ) -> mp_limb_signed_t;
1851}
1852extern "C" {
1853    pub fn fmpz_mpoly_univar_get_term_coeff(
1854        c: *mut fmpz_mpoly_struct,
1855        A: *const fmpz_mpoly_univar_struct,
1856        i: mp_limb_signed_t,
1857        ctx: *const fmpz_mpoly_ctx_struct,
1858    );
1859}
1860extern "C" {
1861    pub fn fmpz_mpoly_univar_swap_term_coeff(
1862        c: *mut fmpz_mpoly_struct,
1863        A: *mut fmpz_mpoly_univar_struct,
1864        i: mp_limb_signed_t,
1865        ctx: *const fmpz_mpoly_ctx_struct,
1866    );
1867}
1868extern "C" {
1869    pub fn fmpz_mpoly_univar_pseudo_gcd(
1870        gx: *mut fmpz_mpoly_univar_struct,
1871        ax: *const fmpz_mpoly_univar_struct,
1872        bx: *const fmpz_mpoly_univar_struct,
1873        ctx: *const fmpz_mpoly_ctx_struct,
1874    ) -> c_int;
1875}
1876extern "C" {
1877    pub fn fmpz_mpoly_univar_resultant(
1878        d: *mut fmpz_mpoly_struct,
1879        ax: *const fmpz_mpoly_univar_struct,
1880        bx: *const fmpz_mpoly_univar_struct,
1881        ctx: *const fmpz_mpoly_ctx_struct,
1882    ) -> c_int;
1883}
1884extern "C" {
1885    pub fn fmpz_mpoly_univar_discriminant(
1886        d: *mut fmpz_mpoly_struct,
1887        fx: *const fmpz_mpoly_univar_struct,
1888        ctx: *const fmpz_mpoly_ctx_struct,
1889    ) -> c_int;
1890}
1891extern "C" {
1892    pub fn fmpz_mpoly_resultant(
1893        R: *mut fmpz_mpoly_struct,
1894        A: *const fmpz_mpoly_struct,
1895        B: *const fmpz_mpoly_struct,
1896        var: mp_limb_signed_t,
1897        ctx: *const fmpz_mpoly_ctx_struct,
1898    ) -> c_int;
1899}
1900extern "C" {
1901    pub fn fmpz_mpoly_discriminant(
1902        R: *mut fmpz_mpoly_struct,
1903        A: *const fmpz_mpoly_struct,
1904        var: mp_limb_signed_t,
1905        ctx: *const fmpz_mpoly_ctx_struct,
1906    ) -> c_int;
1907}
1908extern "C" {
1909    pub fn mpoly_void_ring_init_fmpz_mpoly_ctx(
1910        R: *mut _bindgen_ty_22,
1911        ctx: *const fmpz_mpoly_ctx_struct,
1912    );
1913}
1914extern "C" {
1915    pub fn fmpz_mpoly_pow_fps(
1916        A: *mut fmpz_mpoly_struct,
1917        B: *const fmpz_mpoly_struct,
1918        k: mp_limb_t,
1919        ctx: *const fmpz_mpoly_ctx_struct,
1920    );
1921}
1922extern "C" {
1923    pub fn fmpz_mpolyl_lead_coeff(
1924        c: *mut fmpz_mpoly_struct,
1925        A: *const fmpz_mpoly_struct,
1926        num_vars: mp_limb_signed_t,
1927        ctx: *const fmpz_mpoly_ctx_struct,
1928    );
1929}
1930extern "C" {
1931    pub fn fmpz_mpolyl_content(
1932        g: *mut fmpz_mpoly_struct,
1933        A: *const fmpz_mpoly_struct,
1934        num_vars: mp_limb_signed_t,
1935        ctx: *const fmpz_mpoly_ctx_struct,
1936    ) -> c_int;
1937}
1938extern "C" {
1939    pub fn _fmpz_mpoly_to_fmpz_poly_deflate(
1940        A: *mut fmpz_poly_struct,
1941        B: *const fmpz_mpoly_struct,
1942        var: mp_limb_signed_t,
1943        Bshift: *const mp_limb_t,
1944        Bstride: *const mp_limb_t,
1945        ctx: *const fmpz_mpoly_ctx_struct,
1946    );
1947}
1948extern "C" {
1949    pub fn _fmpz_mpoly_from_fmpz_poly_inflate(
1950        A: *mut fmpz_mpoly_struct,
1951        Abits: mp_limb_t,
1952        B: *const fmpz_poly_struct,
1953        var: mp_limb_signed_t,
1954        Ashift: *const mp_limb_t,
1955        Astride: *const mp_limb_t,
1956        ctx: *const fmpz_mpoly_ctx_struct,
1957    );
1958}
1959extern "C" {
1960    pub fn fmpz_mpoly_repack_bits(
1961        A: *mut fmpz_mpoly_struct,
1962        B: *const fmpz_mpoly_struct,
1963        Abits: mp_limb_t,
1964        ctx: *const fmpz_mpoly_ctx_struct,
1965    ) -> c_int;
1966}
1967extern "C" {
1968    pub fn fmpz_mpoly_repack_bits_inplace(
1969        A: *mut fmpz_mpoly_struct,
1970        Abits: mp_limb_t,
1971        ctx: *mut fmpz_mpoly_ctx_struct,
1972    ) -> c_int;
1973}
1974#[repr(C)]
1975#[derive(Debug, Copy, Clone)]
1976pub struct _fmpz_mpoly_stripe_struct {
1977    pub big_mem: *mut c_char,
1978    pub big_mem_alloc: mp_limb_signed_t,
1979    pub N: mp_limb_signed_t,
1980    pub bits: mp_limb_t,
1981    pub cmpmask: *const mp_limb_t,
1982    pub startidx: *mut mp_limb_signed_t,
1983    pub endidx: *mut mp_limb_signed_t,
1984    pub emin: *mut mp_limb_t,
1985    pub emax: *mut mp_limb_t,
1986    pub coeff_bits: mp_limb_t,
1987    pub upperclosed: c_int,
1988    pub flint_small: c_int,
1989}
1990pub type fmpz_mpoly_stripe_struct = _fmpz_mpoly_stripe_struct;
1991pub type fmpz_mpoly_stripe_t = [fmpz_mpoly_stripe_struct; 1usize];
1992#[repr(C)]
1993#[derive(Debug, Copy, Clone)]
1994pub struct fmpz_mpolyd_ctx_struct {
1995    pub nvars: mp_limb_signed_t,
1996    pub perm: *mut mp_limb_signed_t,
1997}
1998pub type fmpz_mpolyd_ctx_t = [fmpz_mpolyd_ctx_struct; 1usize];
1999extern "C" {
2000    pub fn fmpz_mpolyd_init(poly: *mut fmpz_mpolyd_struct, nvars: mp_limb_signed_t);
2001}
2002extern "C" {
2003    pub fn fmpz_mpolyd_fit_length(poly: *mut fmpz_mpolyd_struct, len: mp_limb_signed_t);
2004}
2005extern "C" {
2006    pub fn fmpz_mpolyd_clear(poly: *mut fmpz_mpolyd_struct);
2007}
2008#[repr(C)]
2009#[derive(Debug, Copy, Clone)]
2010pub struct _bindgen_ty_23 {
2011    pub powers: *mut fmpz,
2012    pub length: mp_limb_signed_t,
2013    pub alloc: mp_limb_signed_t,
2014    pub tmp: fmpz_t,
2015}
2016pub type fmpz_pow_cache_t = [_bindgen_ty_23; 1usize];
2017extern "C" {
2018    pub fn fmpz_pow_cache_init(T: *mut _bindgen_ty_23, val: *mut fmpz);
2019}
2020extern "C" {
2021    pub fn fmpz_pow_cache_clear(T: *mut _bindgen_ty_23);
2022}
2023extern "C" {
2024    pub fn fmpz_pow_cache_mulpow_ui(
2025        a: *mut fmpz,
2026        b: *mut fmpz,
2027        k: mp_limb_t,
2028        T: *mut _bindgen_ty_23,
2029    ) -> c_int;
2030}
2031extern "C" {
2032    pub fn fmpz_pow_cache_mulpow_fmpz(
2033        a: *mut fmpz,
2034        b: *mut fmpz,
2035        k: *mut fmpz,
2036        T: *mut _bindgen_ty_23,
2037    ) -> c_int;
2038}
2039extern "C" {
2040    pub fn fmpz_mpoly_to_mpoly_perm_deflate_threaded_pool(
2041        A: *mut fmpz_mpoly_struct,
2042        lctx: *mut fmpz_mpoly_ctx_struct,
2043        B: *mut fmpz_mpoly_struct,
2044        ctx: *mut fmpz_mpoly_ctx_struct,
2045        perm: *const mp_limb_signed_t,
2046        shift: *const mp_limb_t,
2047        stride: *const mp_limb_t,
2048        handles: *const thread_pool_handle,
2049        num_handles: mp_limb_signed_t,
2050    );
2051}
2052extern "C" {
2053    pub fn fmpz_mpoly_from_mpoly_perm_inflate(
2054        A: *mut fmpz_mpoly_struct,
2055        Abits: mp_limb_t,
2056        ctx: *mut fmpz_mpoly_ctx_struct,
2057        B: *mut fmpz_mpoly_struct,
2058        lctx: *mut fmpz_mpoly_ctx_struct,
2059        perm: *const mp_limb_signed_t,
2060        shift: *const mp_limb_t,
2061        stride: *const mp_limb_t,
2062    );
2063}
2064extern "C" {
2065    pub fn fmpz_mpoly_height(
2066        max: *mut fmpz,
2067        A: *mut fmpz_mpoly_struct,
2068        ctx: *mut fmpz_mpoly_ctx_struct,
2069    );
2070}
2071extern "C" {
2072    pub fn fmpz_mpoly_heights(
2073        max: *mut fmpz,
2074        sum: *mut fmpz,
2075        A: *mut fmpz_mpoly_struct,
2076        ctx: *mut fmpz_mpoly_ctx_struct,
2077    );
2078}
2079#[repr(C)]
2080#[derive(Debug, Copy, Clone)]
2081pub struct fmpz_mpoly_geobucket {
2082    pub polys: [fmpz_mpoly_struct; 32usize],
2083    pub temps: [fmpz_mpoly_struct; 32usize],
2084    pub length: mp_limb_signed_t,
2085}
2086pub type fmpz_mpoly_geobucket_struct = fmpz_mpoly_geobucket;
2087pub type fmpz_mpoly_geobucket_t = [fmpz_mpoly_geobucket_struct; 1usize];
2088extern "C" {
2089    pub fn fmpz_mpoly_geobucket_init(
2090        B: *mut fmpz_mpoly_geobucket_struct,
2091        ctx: *mut fmpz_mpoly_ctx_struct,
2092    );
2093}
2094extern "C" {
2095    pub fn fmpz_mpoly_geobucket_clear(
2096        B: *mut fmpz_mpoly_geobucket_struct,
2097        ctx: *mut fmpz_mpoly_ctx_struct,
2098    );
2099}
2100extern "C" {
2101    pub fn fmpz_mpoly_geobucket_empty(
2102        p: *mut fmpz_mpoly_struct,
2103        B: *mut fmpz_mpoly_geobucket_struct,
2104        ctx: *mut fmpz_mpoly_ctx_struct,
2105    );
2106}
2107extern "C" {
2108    pub fn fmpz_mpoly_geobucket_fit_length(
2109        B: *mut fmpz_mpoly_geobucket_struct,
2110        i: mp_limb_signed_t,
2111        ctx: *mut fmpz_mpoly_ctx_struct,
2112    );
2113}
2114extern "C" {
2115    pub fn fmpz_mpoly_geobucket_set(
2116        B: *mut fmpz_mpoly_geobucket_struct,
2117        p: *mut fmpz_mpoly_struct,
2118        ctx: *mut fmpz_mpoly_ctx_struct,
2119    );
2120}
2121extern "C" {
2122    pub fn fmpz_mpoly_geobucket_add(
2123        B: *mut fmpz_mpoly_geobucket_struct,
2124        p: *mut fmpz_mpoly_struct,
2125        ctx: *mut fmpz_mpoly_ctx_struct,
2126    );
2127}
2128extern "C" {
2129    pub fn fmpz_mpoly_geobucket_sub(
2130        B: *mut fmpz_mpoly_geobucket_struct,
2131        p: *mut fmpz_mpoly_struct,
2132        ctx: *mut fmpz_mpoly_ctx_struct,
2133    );
2134}
2135extern "C" {
2136    pub fn _fmpz_mpoly_mul_array_chunked_DEG(
2137        P: *mut fmpz_mpoly_struct,
2138        A: *mut fmpz_mpoly_struct,
2139        B: *mut fmpz_mpoly_struct,
2140        degb: mp_limb_t,
2141        ctx: *mut fmpz_mpoly_ctx_struct,
2142    );
2143}
2144extern "C" {
2145    pub fn _fmpz_mpoly_mul_array_chunked_LEX(
2146        P: *mut fmpz_mpoly_struct,
2147        A: *mut fmpz_mpoly_struct,
2148        B: *mut fmpz_mpoly_struct,
2149        mults: *const mp_limb_t,
2150        ctx: *mut fmpz_mpoly_ctx_struct,
2151    );
2152}
2153extern "C" {
2154    pub fn _fmpz_mpoly_addmul_array1_slong1(
2155        poly1: *mut mp_limb_t,
2156        poly2: *const mp_limb_signed_t,
2157        exp2: *const mp_limb_t,
2158        len2: mp_limb_signed_t,
2159        poly3: *const mp_limb_signed_t,
2160        exp3: *const mp_limb_t,
2161        len3: mp_limb_signed_t,
2162    );
2163}
2164extern "C" {
2165    pub fn _fmpz_mpoly_addmul_array1_slong(
2166        poly1: *mut mp_limb_t,
2167        poly2: *const mp_limb_signed_t,
2168        exp2: *const mp_limb_t,
2169        len2: mp_limb_signed_t,
2170        poly3: *const mp_limb_signed_t,
2171        exp3: *const mp_limb_t,
2172        len3: mp_limb_signed_t,
2173    );
2174}
2175extern "C" {
2176    pub fn _fmpz_mpoly_addmul_array1_slong2(
2177        poly1: *mut mp_limb_t,
2178        poly2: *const mp_limb_signed_t,
2179        exp2: *const mp_limb_t,
2180        len2: mp_limb_signed_t,
2181        poly3: *const mp_limb_signed_t,
2182        exp3: *const mp_limb_t,
2183        len3: mp_limb_signed_t,
2184    );
2185}
2186extern "C" {
2187    pub fn _fmpz_mpoly_addmul_array1_fmpz(
2188        poly1: *mut fmpz,
2189        poly2: *const fmpz,
2190        exp2: *const mp_limb_t,
2191        len2: mp_limb_signed_t,
2192        poly3: *const fmpz,
2193        exp3: *const mp_limb_t,
2194        len3: mp_limb_signed_t,
2195    );
2196}
2197extern "C" {
2198    pub fn _fmpz_mpoly_submul_array1_slong(
2199        poly1: *mut mp_limb_t,
2200        poly2: *const mp_limb_signed_t,
2201        exp2: *const mp_limb_t,
2202        len2: mp_limb_signed_t,
2203        poly3: *const mp_limb_signed_t,
2204        exp3: *const mp_limb_t,
2205        len3: mp_limb_signed_t,
2206    );
2207}
2208extern "C" {
2209    pub fn _fmpz_mpoly_submul_array1_slong2(
2210        poly1: *mut mp_limb_t,
2211        poly2: *const mp_limb_signed_t,
2212        exp2: *const mp_limb_t,
2213        len2: mp_limb_signed_t,
2214        poly3: *const mp_limb_signed_t,
2215        exp3: *const mp_limb_t,
2216        len3: mp_limb_signed_t,
2217    );
2218}
2219extern "C" {
2220    pub fn _fmpz_mpoly_submul_array1_slong1(
2221        poly1: *mut mp_limb_t,
2222        poly2: *const mp_limb_signed_t,
2223        exp2: *const mp_limb_t,
2224        len2: mp_limb_signed_t,
2225        poly3: *const mp_limb_signed_t,
2226        exp3: *const mp_limb_t,
2227        len3: mp_limb_signed_t,
2228    );
2229}
2230extern "C" {
2231    pub fn _fmpz_mpoly_submul_array1_fmpz(
2232        poly1: *mut fmpz,
2233        poly2: *const fmpz,
2234        exp2: *const mp_limb_t,
2235        len2: mp_limb_signed_t,
2236        poly3: *const fmpz,
2237        exp3: *const mp_limb_t,
2238        len3: mp_limb_signed_t,
2239    );
2240}
2241extern "C" {
2242    pub fn _fmpz_mpoly_submul_array1_slong_1(
2243        poly1: *mut mp_limb_t,
2244        d: mp_limb_signed_t,
2245        exp2: mp_limb_t,
2246        poly3: *const mp_limb_signed_t,
2247        exp3: *const mp_limb_t,
2248        len3: mp_limb_signed_t,
2249    );
2250}
2251extern "C" {
2252    pub fn _fmpz_mpoly_submul_array1_slong2_1(
2253        poly1: *mut mp_limb_t,
2254        d: mp_limb_signed_t,
2255        exp2: mp_limb_t,
2256        poly3: *const mp_limb_signed_t,
2257        exp3: *const mp_limb_t,
2258        len3: mp_limb_signed_t,
2259    );
2260}
2261extern "C" {
2262    pub fn _fmpz_mpoly_submul_array1_fmpz_1(
2263        poly1: *mut fmpz,
2264        d: *mut fmpz,
2265        exp2: mp_limb_t,
2266        poly3: *const fmpz,
2267        exp3: *const mp_limb_t,
2268        len3: mp_limb_signed_t,
2269    );
2270}
2271extern "C" {
2272    pub fn fmpz_mpoly_append_array_sm1_LEX(
2273        P: *mut fmpz_mpoly_struct,
2274        Plen: mp_limb_signed_t,
2275        coeff_array: *mut mp_limb_t,
2276        mults: *const mp_limb_t,
2277        num: mp_limb_signed_t,
2278        array_size: mp_limb_signed_t,
2279        top: mp_limb_signed_t,
2280    ) -> mp_limb_signed_t;
2281}
2282extern "C" {
2283    pub fn fmpz_mpoly_append_array_sm2_LEX(
2284        P: *mut fmpz_mpoly_struct,
2285        Plen: mp_limb_signed_t,
2286        coeff_array: *mut mp_limb_t,
2287        mults: *const mp_limb_t,
2288        num: mp_limb_signed_t,
2289        array_size: mp_limb_signed_t,
2290        top: mp_limb_signed_t,
2291    ) -> mp_limb_signed_t;
2292}
2293extern "C" {
2294    pub fn fmpz_mpoly_append_array_sm3_LEX(
2295        P: *mut fmpz_mpoly_struct,
2296        Plen: mp_limb_signed_t,
2297        coeff_array: *mut mp_limb_t,
2298        mults: *const mp_limb_t,
2299        num: mp_limb_signed_t,
2300        array_size: mp_limb_signed_t,
2301        top: mp_limb_signed_t,
2302    ) -> mp_limb_signed_t;
2303}
2304extern "C" {
2305    pub fn fmpz_mpoly_append_array_fmpz_LEX(
2306        P: *mut fmpz_mpoly_struct,
2307        Plen: mp_limb_signed_t,
2308        coeff_array: *mut fmpz,
2309        mults: *const mp_limb_t,
2310        num: mp_limb_signed_t,
2311        array_size: mp_limb_signed_t,
2312        top: mp_limb_signed_t,
2313    ) -> mp_limb_signed_t;
2314}
2315extern "C" {
2316    pub fn fmpz_mpoly_append_array_sm1_DEGLEX(
2317        P: *mut fmpz_mpoly_struct,
2318        Plen: mp_limb_signed_t,
2319        coeff_array: *mut mp_limb_t,
2320        top: mp_limb_signed_t,
2321        nvars: mp_limb_signed_t,
2322        degb: mp_limb_signed_t,
2323    ) -> mp_limb_signed_t;
2324}
2325extern "C" {
2326    pub fn fmpz_mpoly_append_array_sm2_DEGLEX(
2327        P: *mut fmpz_mpoly_struct,
2328        Plen: mp_limb_signed_t,
2329        coeff_array: *mut mp_limb_t,
2330        top: mp_limb_signed_t,
2331        nvars: mp_limb_signed_t,
2332        degb: mp_limb_signed_t,
2333    ) -> mp_limb_signed_t;
2334}
2335extern "C" {
2336    pub fn fmpz_mpoly_append_array_sm3_DEGLEX(
2337        P: *mut fmpz_mpoly_struct,
2338        Plen: mp_limb_signed_t,
2339        coeff_array: *mut mp_limb_t,
2340        top: mp_limb_signed_t,
2341        nvars: mp_limb_signed_t,
2342        degb: mp_limb_signed_t,
2343    ) -> mp_limb_signed_t;
2344}
2345extern "C" {
2346    pub fn fmpz_mpoly_append_array_fmpz_DEGLEX(
2347        P: *mut fmpz_mpoly_struct,
2348        Plen: mp_limb_signed_t,
2349        coeff_array: *mut fmpz,
2350        top: mp_limb_signed_t,
2351        nvars: mp_limb_signed_t,
2352        degb: mp_limb_signed_t,
2353    ) -> mp_limb_signed_t;
2354}
2355extern "C" {
2356    pub fn fmpz_mpoly_append_array_sm1_DEGREVLEX(
2357        P: *mut fmpz_mpoly_struct,
2358        Plen: mp_limb_signed_t,
2359        coeff_array: *mut mp_limb_t,
2360        top: mp_limb_signed_t,
2361        nvars: mp_limb_signed_t,
2362        degb: mp_limb_signed_t,
2363    ) -> mp_limb_signed_t;
2364}
2365extern "C" {
2366    pub fn fmpz_mpoly_append_array_sm2_DEGREVLEX(
2367        P: *mut fmpz_mpoly_struct,
2368        Plen: mp_limb_signed_t,
2369        coeff_array: *mut mp_limb_t,
2370        top: mp_limb_signed_t,
2371        nvars: mp_limb_signed_t,
2372        degb: mp_limb_signed_t,
2373    ) -> mp_limb_signed_t;
2374}
2375extern "C" {
2376    pub fn fmpz_mpoly_append_array_sm3_DEGREVLEX(
2377        P: *mut fmpz_mpoly_struct,
2378        Plen: mp_limb_signed_t,
2379        coeff_array: *mut mp_limb_t,
2380        top: mp_limb_signed_t,
2381        nvars: mp_limb_signed_t,
2382        degb: mp_limb_signed_t,
2383    ) -> mp_limb_signed_t;
2384}
2385extern "C" {
2386    pub fn fmpz_mpoly_append_array_fmpz_DEGREVLEX(
2387        P: *mut fmpz_mpoly_struct,
2388        Plen: mp_limb_signed_t,
2389        coeff_array: *mut fmpz,
2390        top: mp_limb_signed_t,
2391        nvars: mp_limb_signed_t,
2392        degb: mp_limb_signed_t,
2393    ) -> mp_limb_signed_t;
2394}
2395extern "C" {
2396    pub fn _fmpz_mpoly_from_ulong_array(
2397        poly1: *mut *mut fmpz,
2398        exp1: *mut *mut mp_limb_t,
2399        alloc: *mut mp_limb_signed_t,
2400        poly2: *mut mp_limb_t,
2401        mults: *const mp_limb_signed_t,
2402        num: mp_limb_signed_t,
2403        bits: mp_limb_signed_t,
2404        k: mp_limb_signed_t,
2405    ) -> mp_limb_signed_t;
2406}
2407extern "C" {
2408    pub fn _fmpz_mpoly_from_ulong_array2(
2409        poly1: *mut *mut fmpz,
2410        exp1: *mut *mut mp_limb_t,
2411        alloc: *mut mp_limb_signed_t,
2412        poly2: *mut mp_limb_t,
2413        mults: *const mp_limb_signed_t,
2414        num: mp_limb_signed_t,
2415        bits: mp_limb_signed_t,
2416        k: mp_limb_signed_t,
2417    ) -> mp_limb_signed_t;
2418}
2419extern "C" {
2420    pub fn _fmpz_mpoly_from_ulong_array1(
2421        poly1: *mut *mut fmpz,
2422        exp1: *mut *mut mp_limb_t,
2423        alloc: *mut mp_limb_signed_t,
2424        poly2: *mut mp_limb_t,
2425        mults: *const mp_limb_signed_t,
2426        num: mp_limb_signed_t,
2427        bits: mp_limb_signed_t,
2428        k: mp_limb_signed_t,
2429    ) -> mp_limb_signed_t;
2430}
2431extern "C" {
2432    pub fn _fmpz_mpoly_from_fmpz_array(
2433        poly1: *mut *mut fmpz,
2434        exp1: *mut *mut mp_limb_t,
2435        alloc: *mut mp_limb_signed_t,
2436        poly2: *mut fmpz,
2437        mults: *const mp_limb_signed_t,
2438        num: mp_limb_signed_t,
2439        bits: mp_limb_signed_t,
2440        k: mp_limb_signed_t,
2441    ) -> mp_limb_signed_t;
2442}
2443extern "C" {
2444    pub fn _fmpz_mpoly_to_ulong_array2(
2445        p: *mut mp_limb_t,
2446        coeffs: *const fmpz,
2447        exps: *const mp_limb_t,
2448        len: mp_limb_signed_t,
2449    );
2450}
2451extern "C" {
2452    pub fn _fmpz_mpoly_to_ulong_array1(
2453        p: *mut mp_limb_t,
2454        coeffs: *const fmpz,
2455        exps: *const mp_limb_t,
2456        len: mp_limb_signed_t,
2457    );
2458}
2459extern "C" {
2460    pub fn _fmpz_mpoly_to_ulong_array(
2461        p: *mut mp_limb_t,
2462        coeffs: *const fmpz,
2463        exps: *const mp_limb_t,
2464        len: mp_limb_signed_t,
2465    );
2466}
2467extern "C" {
2468    pub fn _fmpz_mpoly_to_fmpz_array(
2469        p: *mut fmpz,
2470        coeffs: *const fmpz,
2471        exps: *const mp_limb_t,
2472        len: mp_limb_signed_t,
2473    );
2474}
2475extern "C" {
2476    pub fn _fmpz_mpoly_sub_uiuiui_fmpz(c: *mut mp_limb_t, d: *mut fmpz);
2477}
2478extern "C" {
2479    pub fn _fmpz_mpoly_add_uiuiui_fmpz(c: *mut mp_limb_t, d: *mut fmpz);
2480}
2481extern "C" {
2482    pub fn _fmpz_mpoly_submul_uiuiui_fmpz(
2483        c: *mut mp_limb_t,
2484        d1: mp_limb_signed_t,
2485        d2: mp_limb_signed_t,
2486    );
2487}
2488extern "C" {
2489    pub fn _fmpz_mpoly_addmul_uiuiui_fmpz(
2490        c: *mut mp_limb_t,
2491        d1: mp_limb_signed_t,
2492        d2: mp_limb_signed_t,
2493    );
2494}
2495extern "C" {
2496    pub fn _fmpz_mpoly_get_mpz_signed_uiuiui(sm: *mut mp_limb_t, x: fmpz, t: mpz_ptr)
2497        -> mpz_srcptr;
2498}
2499extern "C" {
2500    pub fn flint_mpz_add_signed_uiuiui(
2501        a: mpz_ptr,
2502        b: mpz_srcptr,
2503        c2: mp_limb_t,
2504        c1: mp_limb_t,
2505        c0: mp_limb_t,
2506    );
2507}
2508extern "C" {
2509    pub fn fmpz_mpoly_remainder_test(
2510        r: *mut fmpz_mpoly_struct,
2511        g: *const fmpz_mpoly_struct,
2512        ctx: *const fmpz_mpoly_ctx_struct,
2513    );
2514}
2515extern "C" {
2516    pub fn fmpz_mpoly_remainder_strongtest(
2517        r: *mut fmpz_mpoly_struct,
2518        g: *const fmpz_mpoly_struct,
2519        ctx: *const fmpz_mpoly_ctx_struct,
2520    );
2521}