flint_sys/
mpoly.rs

1#![allow(non_camel_case_types)]
2#![allow(non_upper_case_globals)]
3#![allow(non_snake_case)]
4
5//! *See the [FLINT documentation](http://flintlib.org/doc/mpoly.html).
6
7use crate::deps::*;
8use crate::flint::*;
9use crate::fmpz::{fmpz, fmpz_t};
10use crate::fmpz_mat::fmpz_mat_struct;
11use libc::{c_char, c_int, c_uchar, c_uint, c_void};
12
13pub type ordering_t = c_uint;
14pub const ordering_t_ORD_LEX: ordering_t = 0;
15pub const ordering_t_ORD_DEGLEX: ordering_t = 1;
16pub const ordering_t_ORD_DEGREVLEX: ordering_t = 2;
17
18extern "C" {
19    pub fn mpoly_divide_threads(n: mp_limb_signed_t, la: f64, lb: f64) -> mp_limb_signed_t;
20}
21#[repr(C)]
22#[derive(Debug, Copy, Clone)]
23pub struct mpoly_ctx_struct {
24    pub nvars: mp_limb_signed_t,
25    pub nfields: mp_limb_signed_t,
26    pub ord: ordering_t,
27    pub deg: c_int,
28    pub rev: c_int,
29    pub lut_words_per_exp: [mp_limb_signed_t; 64usize],
30    pub lut_fix_bits: [c_uchar; 64usize],
31}
32pub type mpoly_ctx_t = [mpoly_ctx_struct; 1usize];
33extern "C" {
34    pub fn mpoly_ctx_init(ctx: *mut mpoly_ctx_struct, nvars: mp_limb_signed_t, ord: ordering_t);
35}
36extern "C" {
37    pub fn mpoly_ctx_init_rand(
38        mctx: *mut mpoly_ctx_struct,
39        state: *mut flint_rand_s,
40        max_nvars: mp_limb_signed_t,
41    );
42}
43extern "C" {
44    pub fn mpoly_monomial_randbits_fmpz(
45        exp: *mut fmpz,
46        state: *mut flint_rand_s,
47        exp_bits: mp_limb_t,
48        mctx: *mut mpoly_ctx_struct,
49    );
50}
51extern "C" {
52    pub fn mpoly_ctx_clear(mctx: *mut mpoly_ctx_struct);
53}
54extern "C" {
55    pub fn mpoly_words_per_exp_sp(bits: mp_limb_t, mctx: *mut mpoly_ctx_struct)
56        -> mp_limb_signed_t;
57}
58extern "C" {
59    pub fn mpoly_words_per_exp_mp(bits: mp_limb_t, mctx: *mut mpoly_ctx_struct)
60        -> mp_limb_signed_t;
61}
62extern "C" {
63    pub fn mpoly_words_per_exp(bits: mp_limb_t, mctx: *mut mpoly_ctx_struct) -> mp_limb_signed_t;
64}
65extern "C" {
66    pub fn mpoly_fix_bits(bits: mp_limb_t, mctx: *mut mpoly_ctx_struct) -> mp_limb_t;
67}
68#[repr(C)]
69#[derive(Debug, Copy, Clone)]
70pub struct mpoly_heap_t {
71    pub i: mp_limb_t,
72    pub j: mp_limb_t,
73    pub next: *mut mpoly_heap_t,
74}
75#[repr(C)]
76#[derive(Debug, Copy, Clone)]
77pub struct mpoly_nheap_t {
78    pub i: mp_limb_t,
79    pub j: mp_limb_t,
80    pub next: *mut mpoly_nheap_t,
81    pub p: mp_limb_signed_t,
82}
83#[repr(C)]
84#[derive(Debug, Copy, Clone)]
85pub struct mpoly_heap1_s {
86    pub exp: mp_limb_t,
87    pub next: *mut c_void,
88}
89#[repr(C)]
90#[derive(Debug, Copy, Clone)]
91pub struct mpoly_heap_s {
92    pub exp: *mut mp_limb_t,
93    pub next: *mut c_void,
94}
95#[repr(C)]
96#[derive(Debug, Copy, Clone)]
97pub struct mpoly_rbnode_ui_struct {
98    pub key: mp_limb_t,
99    pub up: mp_limb_signed_t,
100    pub left: mp_limb_signed_t,
101    pub right: mp_limb_signed_t,
102    pub color: c_int,
103}
104#[repr(C)]
105#[derive(Debug, Copy, Clone)]
106pub struct mpoly_rbtree_ui_struct {
107    pub length: mp_limb_signed_t,
108    pub nodes: *mut mpoly_rbnode_ui_struct,
109    pub node_alloc: mp_limb_signed_t,
110    pub data: *mut c_char,
111    pub data_alloc: mp_limb_signed_t,
112    pub data_size: mp_limb_signed_t,
113}
114pub type mpoly_rbtree_ui_t = [mpoly_rbtree_ui_struct; 1usize];
115extern "C" {
116    pub fn mpoly_rbtree_ui_init(T: *mut mpoly_rbtree_ui_struct, data_size: mp_limb_signed_t);
117}
118extern "C" {
119    pub fn mpoly_rbtree_ui_clear(T: *mut mpoly_rbtree_ui_struct);
120}
121extern "C" {
122    pub fn mpoly_rbtree_ui_lookup(
123        T: *mut mpoly_rbtree_ui_struct,
124        its_new: *mut c_int,
125        key: mp_limb_t,
126    ) -> *mut c_void;
127}
128extern "C" {
129    pub fn mpoly_rbtree_ui_head(T: *mut mpoly_rbtree_ui_struct) -> mp_limb_signed_t;
130}
131#[repr(C)]
132#[derive(Debug, Copy, Clone)]
133pub struct mpoly_rbnode_fmpz_struct {
134    pub key: fmpz_t,
135    pub up: mp_limb_signed_t,
136    pub left: mp_limb_signed_t,
137    pub right: mp_limb_signed_t,
138    pub color: c_int,
139}
140#[repr(C)]
141#[derive(Debug, Copy, Clone)]
142pub struct mpoly_rbtree_fmpz_struct {
143    pub length: mp_limb_signed_t,
144    pub nodes: *mut mpoly_rbnode_fmpz_struct,
145    pub node_alloc: mp_limb_signed_t,
146    pub data: *mut c_char,
147    pub data_alloc: mp_limb_signed_t,
148    pub data_size: mp_limb_signed_t,
149}
150pub type mpoly_rbtree_fmpz_t = [mpoly_rbtree_fmpz_struct; 1usize];
151extern "C" {
152    pub fn mpoly_rbtree_fmpz_init(T: *mut mpoly_rbtree_fmpz_struct, data_size: mp_limb_signed_t);
153}
154extern "C" {
155    pub fn mpoly_rbtree_fmpz_clear(T: *mut mpoly_rbtree_fmpz_struct);
156}
157extern "C" {
158    pub fn mpoly_rbtree_fmpz_lookup(
159        T: *mut mpoly_rbtree_fmpz_struct,
160        its_new: *mut c_int,
161        key: *mut fmpz,
162    ) -> *mut c_void;
163}
164extern "C" {
165    pub fn mpoly_rbtree_fmpz_head(T: *mut mpoly_rbtree_fmpz_struct) -> mp_limb_signed_t;
166}
167extern "C" {
168    pub fn mpoly_ordering_randtest(state: *mut flint_rand_s) -> ordering_t;
169}
170extern "C" {
171    pub fn mpoly_ordering_isdeg(mctx: *mut mpoly_ctx_struct) -> c_int;
172}
173extern "C" {
174    pub fn mpoly_ordering_isrev(mctx: *mut mpoly_ctx_struct) -> c_int;
175}
176extern "C" {
177    pub fn mpoly_ordering_print(ord: ordering_t);
178}
179extern "C" {
180    pub fn mpoly_monomial_zero(exp_ptr: *mut mp_limb_t, N: mp_limb_signed_t);
181}
182extern "C" {
183    pub fn mpoly_monomial_add(
184        exp_ptr: *mut mp_limb_t,
185        exp2: *const mp_limb_t,
186        exp3: *const mp_limb_t,
187        N: mp_limb_signed_t,
188    );
189}
190extern "C" {
191    pub fn mpoly_monomial_add_mp(
192        exp_ptr: *mut mp_limb_t,
193        exp2: *const mp_limb_t,
194        exp3: *const mp_limb_t,
195        N: mp_limb_signed_t,
196    );
197}
198extern "C" {
199    pub fn mpoly_monomial_sub(
200        exp_ptr: *mut mp_limb_t,
201        exp2: *const mp_limb_t,
202        exp3: *const mp_limb_t,
203        N: mp_limb_signed_t,
204    );
205}
206extern "C" {
207    pub fn mpoly_monomial_sub_mp(
208        exp_ptr: *mut mp_limb_t,
209        exp2: *const mp_limb_t,
210        exp3: *const mp_limb_t,
211        N: mp_limb_signed_t,
212    );
213}
214extern "C" {
215    pub fn mpoly_monomial_madd(
216        exp1: *mut mp_limb_t,
217        exp2: *const mp_limb_t,
218        scalar: mp_limb_t,
219        exp3: *const mp_limb_t,
220        N: mp_limb_signed_t,
221    );
222}
223extern "C" {
224    pub fn mpoly_monomial_madd_mp(
225        exp1: *mut mp_limb_t,
226        exp2: *const mp_limb_t,
227        scalar: mp_limb_t,
228        exp3: *const mp_limb_t,
229        N: mp_limb_signed_t,
230    );
231}
232extern "C" {
233    pub fn mpoly_monomial_madd_inplace_mp(
234        exp12: *mut mp_limb_t,
235        scalar: mp_limb_t,
236        exp3: *const mp_limb_t,
237        N: mp_limb_signed_t,
238    );
239}
240extern "C" {
241    pub fn mpoly_monomial_msub(
242        exp1: *mut mp_limb_t,
243        exp2: *const mp_limb_t,
244        scalar: mp_limb_t,
245        exp3: *const mp_limb_t,
246        N: mp_limb_signed_t,
247    );
248}
249extern "C" {
250    pub fn mpoly_monomial_msub_mp(
251        exp1: *mut mp_limb_t,
252        exp2: *const mp_limb_t,
253        scalar: mp_limb_t,
254        exp3: *const mp_limb_t,
255        N: mp_limb_signed_t,
256    );
257}
258extern "C" {
259    pub fn mpoly_monomial_msub_ui_array(
260        exp1: *mut mp_limb_t,
261        exp2: *const mp_limb_t,
262        scalar: *const mp_limb_t,
263        scalar_limbs: mp_limb_signed_t,
264        exp3: *const mp_limb_t,
265        N: mp_limb_signed_t,
266    );
267}
268extern "C" {
269    pub fn mpoly_monomial_madd_ui_array(
270        exp1: *mut mp_limb_t,
271        exp2: *const mp_limb_t,
272        scalar: *const mp_limb_t,
273        scalar_limbs: mp_limb_signed_t,
274        exp3: *const mp_limb_t,
275        N: mp_limb_signed_t,
276    );
277}
278extern "C" {
279    pub fn mpoly_monomial_madd_fmpz(
280        exp1: *mut mp_limb_t,
281        exp2: *const mp_limb_t,
282        scalar: *mut fmpz,
283        exp3: *const mp_limb_t,
284        N: mp_limb_signed_t,
285    );
286}
287extern "C" {
288    pub fn mpoly_overflow_mask_sp(bits: mp_limb_t) -> mp_limb_t;
289}
290extern "C" {
291    pub fn mpoly_monomial_max1(
292        exp2: mp_limb_t,
293        exp3: mp_limb_t,
294        bits: mp_limb_t,
295        mask: mp_limb_t,
296    ) -> mp_limb_t;
297}
298extern "C" {
299    pub fn mpoly_monomial_max(
300        exp1: *mut mp_limb_t,
301        exp2: *const mp_limb_t,
302        exp3: *const mp_limb_t,
303        bits: mp_limb_t,
304        N: mp_limb_signed_t,
305        mask: mp_limb_t,
306    );
307}
308extern "C" {
309    pub fn mpoly_monomial_min1(
310        exp2: mp_limb_t,
311        exp3: mp_limb_t,
312        bits: mp_limb_t,
313        mask: mp_limb_t,
314    ) -> mp_limb_t;
315}
316extern "C" {
317    pub fn mpoly_monomial_min(
318        exp1: *mut mp_limb_t,
319        exp2: *const mp_limb_t,
320        exp3: *const mp_limb_t,
321        bits: mp_limb_t,
322        N: mp_limb_signed_t,
323        mask: mp_limb_t,
324    );
325}
326extern "C" {
327    pub fn mpoly_monomial_max_mp(
328        exp1: *mut mp_limb_t,
329        exp2: *const mp_limb_t,
330        exp3: *const mp_limb_t,
331        bits: mp_limb_t,
332        N: mp_limb_signed_t,
333    );
334}
335extern "C" {
336    pub fn mpoly_monomial_min_mp(
337        exp1: *mut mp_limb_t,
338        exp2: *const mp_limb_t,
339        exp3: *const mp_limb_t,
340        bits: mp_limb_t,
341        N: mp_limb_signed_t,
342    );
343}
344extern "C" {
345    pub fn mpoly_monomial_overflows(
346        exp2: *mut mp_limb_t,
347        N: mp_limb_signed_t,
348        mask: mp_limb_t,
349    ) -> c_int;
350}
351extern "C" {
352    pub fn mpoly_monomial_overflows_mp(
353        exp_ptr: *mut mp_limb_t,
354        N: mp_limb_signed_t,
355        bits: mp_limb_t,
356    ) -> c_int;
357}
358extern "C" {
359    pub fn mpoly_monomial_overflows1(exp: mp_limb_t, mask: mp_limb_t) -> c_int;
360}
361extern "C" {
362    pub fn mpoly_monomial_divides(
363        exp_ptr: *mut mp_limb_t,
364        exp2: *const mp_limb_t,
365        exp3: *const mp_limb_t,
366        N: mp_limb_signed_t,
367        mask: mp_limb_t,
368    ) -> c_int;
369}
370extern "C" {
371    pub fn mpoly_monomial_halves(
372        exp_ptr: *mut mp_limb_t,
373        exp2: *const mp_limb_t,
374        N: mp_limb_signed_t,
375        mask: mp_limb_t,
376    ) -> c_int;
377}
378extern "C" {
379    pub fn mpoly_monomial_divides_mp(
380        exp_ptr: *mut mp_limb_t,
381        exp2: *const mp_limb_t,
382        exp3: *const mp_limb_t,
383        N: mp_limb_signed_t,
384        bits: mp_limb_t,
385    ) -> c_int;
386}
387extern "C" {
388    pub fn mpoly_monomial_halves_mp(
389        exp_ptr: *mut mp_limb_t,
390        exp2: *const mp_limb_t,
391        N: mp_limb_signed_t,
392        bits: mp_limb_t,
393    ) -> c_int;
394}
395extern "C" {
396    pub fn mpoly_monomial_divides_test(
397        exp2: *const mp_limb_t,
398        exp3: *const mp_limb_t,
399        N: mp_limb_signed_t,
400        mask: mp_limb_t,
401    ) -> c_int;
402}
403extern "C" {
404    pub fn mpoly_monomial_divides_mp_test(
405        exp2: *const mp_limb_t,
406        exp3: *const mp_limb_t,
407        N: mp_limb_signed_t,
408        bits: mp_limb_t,
409    ) -> c_int;
410}
411extern "C" {
412    pub fn mpoly_monomial_divides1(
413        exp_ptr: *mut mp_limb_t,
414        exp2: mp_limb_t,
415        exp3: mp_limb_t,
416        mask: mp_limb_t,
417    ) -> c_int;
418}
419extern "C" {
420    pub fn mpoly_monomial_halves1(
421        exp_ptr: *mut mp_limb_t,
422        exp2: mp_limb_t,
423        mask: mp_limb_t,
424    ) -> c_int;
425}
426extern "C" {
427    pub fn mpoly_monomial_set(exp2: *mut mp_limb_t, exp3: *const mp_limb_t, N: mp_limb_signed_t);
428}
429extern "C" {
430    pub fn mpoly_monomial_set_extra(
431        exp2: *mut mp_limb_t,
432        exp3: *const mp_limb_t,
433        N: mp_limb_signed_t,
434        offset: mp_limb_signed_t,
435        extra: mp_limb_t,
436    );
437}
438extern "C" {
439    pub fn mpoly_copy_monomials(
440        exp1: *mut mp_limb_t,
441        exp2: *const mp_limb_t,
442        len: mp_limb_signed_t,
443        N: mp_limb_signed_t,
444    );
445}
446extern "C" {
447    pub fn mpoly_monomial_swap(exp2: *mut mp_limb_t, exp3: *mut mp_limb_t, N: mp_limb_signed_t);
448}
449extern "C" {
450    pub fn mpoly_monomial_mul_ui(
451        exp2: *mut mp_limb_t,
452        exp3: *const mp_limb_t,
453        N: mp_limb_signed_t,
454        c: mp_limb_t,
455    );
456}
457extern "C" {
458    pub fn mpoly_monomial_mul_ui_mp(
459        exp2: *mut mp_limb_t,
460        exp3: *const mp_limb_t,
461        N: mp_limb_signed_t,
462        c: mp_limb_t,
463    );
464}
465extern "C" {
466    pub fn mpoly_monomial_mul_fmpz(
467        exp2: *mut mp_limb_t,
468        exp3: *const mp_limb_t,
469        N: mp_limb_signed_t,
470        c: *mut fmpz,
471    );
472}
473extern "C" {
474    pub fn mpoly_monomial_is_zero(exp: *const mp_limb_t, N: mp_limb_signed_t) -> c_int;
475}
476extern "C" {
477    pub fn mpoly_monomial_equal(
478        exp2: *const mp_limb_t,
479        exp3: *const mp_limb_t,
480        N: mp_limb_signed_t,
481    ) -> c_int;
482}
483extern "C" {
484    pub fn mpoly_monomial_equal_extra(
485        exp2: *const mp_limb_t,
486        exp3: *const mp_limb_t,
487        N: mp_limb_signed_t,
488        offset: mp_limb_signed_t,
489        extra: mp_limb_t,
490    ) -> c_int;
491}
492extern "C" {
493    pub fn mpoly_monomial_cmp1(a: mp_limb_t, b: mp_limb_t, cmpmask: mp_limb_t) -> c_int;
494}
495extern "C" {
496    pub fn mpoly_monomial_gt1(a: mp_limb_t, b: mp_limb_t, cmpmask: mp_limb_t) -> c_int;
497}
498extern "C" {
499    pub fn mpoly_monomial_ge1(a: mp_limb_t, b: mp_limb_t, cmpmask: mp_limb_t) -> c_int;
500}
501extern "C" {
502    pub fn mpoly_monomial_lt(
503        exp3: *const mp_limb_t,
504        exp2: *const mp_limb_t,
505        N: mp_limb_signed_t,
506        cmpmask: *const mp_limb_t,
507    ) -> c_int;
508}
509extern "C" {
510    pub fn mpoly_monomial_gt(
511        exp3: *const mp_limb_t,
512        exp2: *const mp_limb_t,
513        N: mp_limb_signed_t,
514        cmpmask: *const mp_limb_t,
515    ) -> c_int;
516}
517extern "C" {
518    pub fn mpoly_monomial_lt_nomask(
519        exp2: *const mp_limb_t,
520        exp3: *const mp_limb_t,
521        N: mp_limb_signed_t,
522    ) -> c_int;
523}
524extern "C" {
525    pub fn mpoly_monomial_gt_nomask(
526        exp2: *const mp_limb_t,
527        exp3: *const mp_limb_t,
528        N: mp_limb_signed_t,
529    ) -> c_int;
530}
531extern "C" {
532    pub fn mpoly_monomial_lt_nomask_extra(
533        exp2: *const mp_limb_t,
534        exp3: *const mp_limb_t,
535        N: mp_limb_signed_t,
536        offset: mp_limb_signed_t,
537        extra: mp_limb_t,
538    ) -> c_int;
539}
540extern "C" {
541    pub fn mpoly_monomial_gt_nomask_extra(
542        exp2: *const mp_limb_t,
543        exp3: *const mp_limb_t,
544        N: mp_limb_signed_t,
545        offset: mp_limb_signed_t,
546        extra: mp_limb_t,
547    ) -> c_int;
548}
549extern "C" {
550    pub fn mpoly_monomial_cmp(
551        exp2: *const mp_limb_t,
552        exp3: *const mp_limb_t,
553        N: mp_limb_signed_t,
554        cmpmask: *const mp_limb_t,
555    ) -> c_int;
556}
557extern "C" {
558    pub fn mpoly_monomial_cmp_nomask(
559        exp2: *const mp_limb_t,
560        exp3: *const mp_limb_t,
561        N: mp_limb_signed_t,
562    ) -> c_int;
563}
564extern "C" {
565    pub fn mpoly_monomial_cmp_nomask_extra(
566        exp2: *const mp_limb_t,
567        exp3: *const mp_limb_t,
568        N: mp_limb_signed_t,
569        offset: mp_limb_signed_t,
570        extra: mp_limb_t,
571    ) -> c_int;
572}
573extern "C" {
574    pub fn mpoly_monomial_divides_tight(
575        e1: mp_limb_signed_t,
576        e2: mp_limb_signed_t,
577        prods: *mut mp_limb_signed_t,
578        num: mp_limb_signed_t,
579    ) -> c_int;
580}
581extern "C" {
582    pub fn mpoly_max_degrees_tight(
583        max_exp: *mut mp_limb_signed_t,
584        exps: *mut mp_limb_t,
585        len: mp_limb_signed_t,
586        prods: *mut mp_limb_signed_t,
587        num: mp_limb_signed_t,
588    );
589}
590extern "C" {
591    pub fn mpoly_geobucket_clog4(x: mp_limb_signed_t) -> mp_limb_signed_t;
592}
593extern "C" {
594    pub fn pack_exp2(e0: mp_limb_t, e1: mp_limb_t) -> mp_limb_t;
595}
596extern "C" {
597    pub fn pack_exp3(e0: mp_limb_t, e1: mp_limb_t, e2: mp_limb_t) -> mp_limb_t;
598}
599extern "C" {
600    pub fn extract_exp(e: mp_limb_t, idx: c_int, nvars: c_int) -> mp_limb_t;
601}
602extern "C" {
603    pub fn _mpoly_bidegree(
604        Aexps: *const mp_limb_t,
605        Abits: mp_limb_t,
606        mctx: *mut mpoly_ctx_struct,
607    ) -> mp_limb_t;
608}
609extern "C" {
610    pub fn mpoly_gen_fields_ui(
611        exp: *mut mp_limb_t,
612        var: mp_limb_signed_t,
613        mctx: *mut mpoly_ctx_struct,
614    );
615}
616extern "C" {
617    pub fn mpoly_gen_fields_fmpz(
618        exp: *mut fmpz,
619        var: mp_limb_signed_t,
620        mctx: *mut mpoly_ctx_struct,
621    );
622}
623extern "C" {
624    pub fn mpoly_gen_bits_required(var: mp_limb_signed_t, mctx: *mut mpoly_ctx_struct)
625        -> mp_limb_t;
626}
627extern "C" {
628    pub fn mpoly_gen_index(v: mp_limb_signed_t, mctx: *mut mpoly_ctx_struct) -> mp_limb_signed_t;
629}
630extern "C" {
631    pub fn mpoly_gen_offset_shift_sp(
632        offset: *mut mp_limb_signed_t,
633        shift: *mut mp_limb_signed_t,
634        var: mp_limb_signed_t,
635        bits: mp_limb_t,
636        mctx: *mut mpoly_ctx_struct,
637    );
638}
639extern "C" {
640    pub fn mpoly_gen_monomial_offset_shift_sp(
641        mexp: *mut mp_limb_t,
642        offset: *mut mp_limb_signed_t,
643        shift: *mut mp_limb_signed_t,
644        var: mp_limb_signed_t,
645        bits: mp_limb_t,
646        mctx: *mut mpoly_ctx_struct,
647    );
648}
649extern "C" {
650    pub fn mpoly_gen_monomial_sp(
651        oneexp: *mut mp_limb_t,
652        var: mp_limb_signed_t,
653        bits: mp_limb_t,
654        mctx: *mut mpoly_ctx_struct,
655    );
656}
657extern "C" {
658    pub fn mpoly_gen_offset_mp(
659        var: mp_limb_signed_t,
660        bits: mp_limb_t,
661        mctx: *mut mpoly_ctx_struct,
662    ) -> mp_limb_signed_t;
663}
664extern "C" {
665    pub fn mpoly_gen_monomial_offset_mp(
666        mexp: *mut mp_limb_t,
667        var: mp_limb_signed_t,
668        bits: mp_limb_t,
669        mctx: *mut mpoly_ctx_struct,
670    ) -> mp_limb_signed_t;
671}
672extern "C" {
673    pub fn fmpz_mat_mul_vec(v: *mut fmpz, M: *mut fmpz_mat_struct, u: *mut fmpz);
674}
675extern "C" {
676    pub fn mpoly_compose_mat_gen(
677        M: *mut fmpz_mat_struct,
678        c: *const mp_limb_signed_t,
679        mctxB: *mut mpoly_ctx_struct,
680        mctxAC: *mut mpoly_ctx_struct,
681    );
682}
683extern "C" {
684    pub fn mpoly_compose_mat_fill_column(
685        M: *mut fmpz_mat_struct,
686        Cexp: *const mp_limb_t,
687        Cbits: mp_limb_t,
688        Bvar: mp_limb_signed_t,
689        mctxB: *mut mpoly_ctx_struct,
690        mctxAC: *mut mpoly_ctx_struct,
691    );
692}
693extern "C" {
694    pub fn mpoly_get_cmpmask(
695        cmpmask: *mut mp_limb_t,
696        N: mp_limb_signed_t,
697        bits: mp_limb_t,
698        mctx: *mut mpoly_ctx_struct,
699    );
700}
701extern "C" {
702    pub fn mpoly_get_ovfmask(
703        ovfmask: *mut mp_limb_t,
704        N: mp_limb_signed_t,
705        bits: mp_limb_t,
706        mctx: *mut mpoly_ctx_struct,
707    );
708}
709extern "C" {
710    pub fn mpoly_monomials_cmp(
711        Aexps: *const mp_limb_t,
712        Abits: mp_limb_t,
713        Bexps: *const mp_limb_t,
714        Bbits: mp_limb_t,
715        length: mp_limb_signed_t,
716        mctx: *mut mpoly_ctx_struct,
717    ) -> c_int;
718}
719extern "C" {
720    pub fn mpoly_exp_bits_required_ui(
721        user_exp: *const mp_limb_t,
722        mctx: *mut mpoly_ctx_struct,
723    ) -> mp_limb_t;
724}
725extern "C" {
726    pub fn mpoly_exp_bits_required_ffmpz(
727        user_exp: *const fmpz,
728        mctx: *mut mpoly_ctx_struct,
729    ) -> mp_limb_t;
730}
731extern "C" {
732    pub fn mpoly_exp_bits_required_pfmpz(
733        user_exp: *const *mut fmpz,
734        mctx: *mut mpoly_ctx_struct,
735    ) -> mp_limb_t;
736}
737extern "C" {
738    pub fn mpoly_gen_pow_exp_bits_required(
739        v: mp_limb_signed_t,
740        e: mp_limb_t,
741        mctx: *mut mpoly_ctx_struct,
742    ) -> mp_limb_t;
743}
744extern "C" {
745    pub fn mpoly_is_poly(
746        Aexps: *const mp_limb_t,
747        Alen: mp_limb_signed_t,
748        Abits: mp_limb_t,
749        var: mp_limb_signed_t,
750        mctx: *mut mpoly_ctx_struct,
751    ) -> c_int;
752}
753extern "C" {
754    pub fn mpoly_pack_vec_ui(
755        exp1: *mut mp_limb_t,
756        exp2: *const mp_limb_t,
757        bits: mp_limb_t,
758        nfields: mp_limb_signed_t,
759        len: mp_limb_signed_t,
760    );
761}
762extern "C" {
763    pub fn mpoly_pack_vec_fmpz(
764        exp1: *mut mp_limb_t,
765        exp2: *const fmpz,
766        bits: mp_limb_t,
767        nfields: mp_limb_signed_t,
768        len: mp_limb_signed_t,
769    );
770}
771extern "C" {
772    pub fn mpoly_unpack_vec_ui(
773        exp1: *mut mp_limb_t,
774        exp2: *const mp_limb_t,
775        bits: mp_limb_t,
776        nfields: mp_limb_signed_t,
777        len: mp_limb_signed_t,
778    );
779}
780extern "C" {
781    pub fn mpoly_unpack_vec_fmpz(
782        exp1: *mut fmpz,
783        exp2: *const mp_limb_t,
784        bits: mp_limb_t,
785        nfields: mp_limb_signed_t,
786        len: mp_limb_signed_t,
787    );
788}
789extern "C" {
790    pub fn mpoly_get_monomial_ui_unpacked_ffmpz(
791        user_exps: *mut mp_limb_t,
792        poly_exps: *const fmpz,
793        mctx: *mut mpoly_ctx_struct,
794    );
795}
796extern "C" {
797    pub fn mpoly_get_monomial_ffmpz_unpacked_ffmpz(
798        user_exps: *mut fmpz,
799        poly_exps: *const fmpz,
800        mctx: *mut mpoly_ctx_struct,
801    );
802}
803extern "C" {
804    pub fn mpoly_get_monomial_pfmpz_unpacked_ffmpz(
805        user_exps: *mut *mut fmpz,
806        poly_exps: *const fmpz,
807        mctx: *mut mpoly_ctx_struct,
808    );
809}
810extern "C" {
811    pub fn mpoly_get_monomial_ui_unpacked_ui(
812        user_exps: *mut mp_limb_t,
813        poly_exps: *const mp_limb_t,
814        mctx: *mut mpoly_ctx_struct,
815    );
816}
817extern "C" {
818    pub fn mpoly_get_monomial_ui_sp(
819        user_exps: *mut mp_limb_t,
820        poly_exps: *const mp_limb_t,
821        bits: mp_limb_t,
822        mctx: *mut mpoly_ctx_struct,
823    );
824}
825extern "C" {
826    pub fn mpoly_get_monomial_ui_mp(
827        user_exps: *mut mp_limb_t,
828        poly_exps: *const mp_limb_t,
829        bits: mp_limb_t,
830        mctx: *mut mpoly_ctx_struct,
831    );
832}
833extern "C" {
834    pub fn mpoly_get_monomial_si_mp(
835        user_exps: *mut mp_limb_signed_t,
836        poly_exps: *const mp_limb_t,
837        bits: mp_limb_t,
838        mctx: *mut mpoly_ctx_struct,
839    );
840}
841extern "C" {
842    pub fn mpoly_get_monomial_ui(
843        user_exps: *mut mp_limb_t,
844        poly_exps: *const mp_limb_t,
845        bits: mp_limb_t,
846        mctx: *mut mpoly_ctx_struct,
847    );
848}
849extern "C" {
850    pub fn mpoly_get_monomial_si(
851        user_exps: *mut mp_limb_signed_t,
852        poly_exps: *const mp_limb_t,
853        bits: mp_limb_t,
854        mctx: *mut mpoly_ctx_struct,
855    );
856}
857extern "C" {
858    pub fn mpoly_get_monomial_var_exp_ui_sp(
859        poly_exps: *const mp_limb_t,
860        var: mp_limb_signed_t,
861        bits: mp_limb_t,
862        mctx: *mut mpoly_ctx_struct,
863    ) -> mp_limb_t;
864}
865extern "C" {
866    pub fn mpoly_get_monomial_var_exp_ui_mp(
867        poly_exps: *const mp_limb_t,
868        var: mp_limb_signed_t,
869        bits: mp_limb_t,
870        mctx: *mut mpoly_ctx_struct,
871    ) -> mp_limb_t;
872}
873extern "C" {
874    pub fn mpoly_get_monomial_var_exp_si_mp(
875        poly_exps: *const mp_limb_t,
876        var: mp_limb_signed_t,
877        bits: mp_limb_t,
878        mctx: *mut mpoly_ctx_struct,
879    ) -> mp_limb_signed_t;
880}
881extern "C" {
882    pub fn mpoly_get_monomial_var_exp_ui(
883        poly_exps: *const mp_limb_t,
884        var: mp_limb_signed_t,
885        bits: mp_limb_t,
886        mctx: *mut mpoly_ctx_struct,
887    ) -> mp_limb_t;
888}
889extern "C" {
890    pub fn mpoly_get_monomial_var_exp_si(
891        poly_exps: *const mp_limb_t,
892        var: mp_limb_signed_t,
893        bits: mp_limb_t,
894        mctx: *mut mpoly_ctx_struct,
895    ) -> mp_limb_signed_t;
896}
897extern "C" {
898    pub fn mpoly_get_monomial_ffmpz(
899        exps: *mut fmpz,
900        poly_exps: *const mp_limb_t,
901        bits: mp_limb_t,
902        mctx: *mut mpoly_ctx_struct,
903    );
904}
905extern "C" {
906    pub fn mpoly_get_monomial_pfmpz(
907        exps: *mut *mut fmpz,
908        poly_exps: *const mp_limb_t,
909        bits: mp_limb_t,
910        mctx: *mut mpoly_ctx_struct,
911    );
912}
913extern "C" {
914    pub fn mpoly_set_monomial_ui(
915        exp1: *mut mp_limb_t,
916        exp2: *const mp_limb_t,
917        bits: mp_limb_t,
918        mctx: *mut mpoly_ctx_struct,
919    );
920}
921extern "C" {
922    pub fn mpoly_set_monomial_ffmpz(
923        exp1: *mut mp_limb_t,
924        exp2: *const fmpz,
925        bits: mp_limb_t,
926        mctx: *mut mpoly_ctx_struct,
927    );
928}
929extern "C" {
930    pub fn mpoly_set_monomial_pfmpz(
931        exp1: *mut mp_limb_t,
932        exp2: *const *mut fmpz,
933        bits: mp_limb_t,
934        mctx: *mut mpoly_ctx_struct,
935    );
936}
937extern "C" {
938    pub fn mpoly_repack_monomials(
939        exps1: *mut mp_limb_t,
940        bits1: mp_limb_t,
941        exps2: *const mp_limb_t,
942        bits2: mp_limb_t,
943        len: mp_limb_signed_t,
944        mctx: *mut mpoly_ctx_struct,
945    ) -> c_int;
946}
947extern "C" {
948    pub fn mpoly_pack_monomials_tight(
949        exp1: *mut mp_limb_t,
950        exp2: *const mp_limb_t,
951        len: mp_limb_signed_t,
952        mults: *const mp_limb_signed_t,
953        num: mp_limb_signed_t,
954        bits: mp_limb_signed_t,
955    );
956}
957extern "C" {
958    pub fn mpoly_unpack_monomials_tight(
959        e1: *mut mp_limb_t,
960        e2: *mut mp_limb_t,
961        len: mp_limb_signed_t,
962        mults: *mut mp_limb_signed_t,
963        num: mp_limb_signed_t,
964        bits: mp_limb_signed_t,
965    );
966}
967extern "C" {
968    pub fn mpoly_monomial_exists(
969        index: *mut mp_limb_signed_t,
970        poly_exps: *const mp_limb_t,
971        exp: *const mp_limb_t,
972        len: mp_limb_signed_t,
973        N: mp_limb_signed_t,
974        cmpmask: *const mp_limb_t,
975    ) -> c_int;
976}
977extern "C" {
978    pub fn mpoly_monomial_index1_nomask(
979        Aexps: *mut mp_limb_t,
980        Alen: mp_limb_signed_t,
981        e: mp_limb_t,
982    ) -> mp_limb_signed_t;
983}
984extern "C" {
985    pub fn mpoly_monomial_index_ui(
986        Aexp: *const mp_limb_t,
987        Abits: mp_limb_t,
988        Alength: mp_limb_signed_t,
989        exp: *const mp_limb_t,
990        mctx: *mut mpoly_ctx_struct,
991    ) -> mp_limb_signed_t;
992}
993extern "C" {
994    pub fn mpoly_monomial_index_pfmpz(
995        Aexp: *const mp_limb_t,
996        Abits: mp_limb_t,
997        Alength: mp_limb_signed_t,
998        exp: *const *mut fmpz,
999        mctx: *mut mpoly_ctx_struct,
1000    ) -> mp_limb_signed_t;
1001}
1002extern "C" {
1003    pub fn mpoly_monomial_index_monomial(
1004        Aexp: *const mp_limb_t,
1005        Abits: mp_limb_t,
1006        Alength: mp_limb_signed_t,
1007        Mexp: *const mp_limb_t,
1008        Mbits: mp_limb_t,
1009        mctx: *mut mpoly_ctx_struct,
1010    ) -> mp_limb_signed_t;
1011}
1012extern "C" {
1013    pub fn mpoly_min_fields_ui_sp(
1014        min_fields: *mut mp_limb_t,
1015        poly_exps: *const mp_limb_t,
1016        len: mp_limb_signed_t,
1017        bits: mp_limb_t,
1018        mctx: *mut mpoly_ctx_struct,
1019    );
1020}
1021extern "C" {
1022    pub fn mpoly_min_fields_fmpz(
1023        min_fields: *mut fmpz,
1024        poly_exps: *const mp_limb_t,
1025        len: mp_limb_signed_t,
1026        bits: mp_limb_t,
1027        mctx: *mut mpoly_ctx_struct,
1028    );
1029}
1030extern "C" {
1031    pub fn mpoly_max_fields_ui_sp(
1032        max_fields: *mut mp_limb_t,
1033        poly_exps: *const mp_limb_t,
1034        len: mp_limb_signed_t,
1035        bits: mp_limb_t,
1036        mctx: *mut mpoly_ctx_struct,
1037    );
1038}
1039extern "C" {
1040    pub fn mpoly_max_fields_fmpz(
1041        max_fields: *mut fmpz,
1042        poly_exps: *const mp_limb_t,
1043        len: mp_limb_signed_t,
1044        bits: mp_limb_t,
1045        mctx: *mut mpoly_ctx_struct,
1046    );
1047}
1048extern "C" {
1049    pub fn mpoly_degrees_fit_si(
1050        poly_exps: *const mp_limb_t,
1051        len: mp_limb_signed_t,
1052        bits: mp_limb_t,
1053        mctx: *mut mpoly_ctx_struct,
1054    ) -> c_int;
1055}
1056extern "C" {
1057    pub fn mpoly_degrees_si(
1058        user_degs: *mut mp_limb_signed_t,
1059        poly_exps: *const mp_limb_t,
1060        len: mp_limb_signed_t,
1061        bits: mp_limb_t,
1062        mctx: *mut mpoly_ctx_struct,
1063    );
1064}
1065extern "C" {
1066    pub fn mpoly_degrees_si_threaded(
1067        user_degs: *mut mp_limb_signed_t,
1068        poly_exps: *const mp_limb_t,
1069        len: mp_limb_signed_t,
1070        bits: mp_limb_t,
1071        mctx: *mut mpoly_ctx_struct,
1072        handles: *const thread_pool_handle,
1073        num_handles: mp_limb_signed_t,
1074    );
1075}
1076extern "C" {
1077    pub fn mpoly_degrees_ffmpz(
1078        user_degs: *mut fmpz,
1079        poly_exps: *const mp_limb_t,
1080        len: mp_limb_signed_t,
1081        bits: mp_limb_t,
1082        mctx: *mut mpoly_ctx_struct,
1083    );
1084}
1085extern "C" {
1086    pub fn mpoly_degrees_pfmpz(
1087        user_degs: *mut *mut fmpz,
1088        poly_exps: *const mp_limb_t,
1089        len: mp_limb_signed_t,
1090        bits: mp_limb_t,
1091        mctx: *mut mpoly_ctx_struct,
1092    );
1093}
1094extern "C" {
1095    pub fn mpoly_degree_si(
1096        poly_exps: *const mp_limb_t,
1097        len: mp_limb_signed_t,
1098        bits: mp_limb_t,
1099        var: mp_limb_signed_t,
1100        mctx: *mut mpoly_ctx_struct,
1101    ) -> mp_limb_signed_t;
1102}
1103extern "C" {
1104    pub fn mpoly_degree_fmpz(
1105        deg: *mut fmpz,
1106        poly_exps: *const mp_limb_t,
1107        len: mp_limb_signed_t,
1108        bits: mp_limb_t,
1109        var: mp_limb_signed_t,
1110        mctx: *mut mpoly_ctx_struct,
1111    );
1112}
1113extern "C" {
1114    pub fn mpoly_total_degree_fits_si(
1115        exps: *const mp_limb_t,
1116        len: mp_limb_signed_t,
1117        bits: mp_limb_t,
1118        mctx: *mut mpoly_ctx_struct,
1119    ) -> c_int;
1120}
1121extern "C" {
1122    pub fn mpoly_total_degree_si(
1123        exps: *const mp_limb_t,
1124        len: mp_limb_signed_t,
1125        bits: mp_limb_t,
1126        mctx: *mut mpoly_ctx_struct,
1127    ) -> mp_limb_signed_t;
1128}
1129extern "C" {
1130    pub fn mpoly_total_degree_fmpz(
1131        totdeg: *mut fmpz,
1132        exps: *const mp_limb_t,
1133        len: mp_limb_signed_t,
1134        bits: mp_limb_t,
1135        mctx: *mut mpoly_ctx_struct,
1136    );
1137}
1138extern "C" {
1139    pub fn mpoly_total_degree_fmpz_ref(
1140        totdeg: *mut fmpz,
1141        exps: *const mp_limb_t,
1142        len: mp_limb_signed_t,
1143        bits: mp_limb_t,
1144        mctx: *mut mpoly_ctx_struct,
1145    );
1146}
1147extern "C" {
1148    pub fn mpoly_used_vars_or(
1149        used: *mut c_int,
1150        exps: *const mp_limb_t,
1151        len: mp_limb_signed_t,
1152        bits: mp_limb_t,
1153        mctx: *mut mpoly_ctx_struct,
1154    );
1155}
1156extern "C" {
1157    pub fn mpoly_monomial_cmp_general(
1158        Aexp: *mut mp_limb_t,
1159        Abits: mp_limb_t,
1160        Bexp: *mut mp_limb_t,
1161        Bbits: mp_limb_t,
1162        mctx: *mut mpoly_ctx_struct,
1163    ) -> c_int;
1164}
1165extern "C" {
1166    pub fn mpoly_search_monomials(
1167        e_ind: *mut *mut mp_limb_signed_t,
1168        e: *mut mp_limb_t,
1169        e_score: *mut mp_limb_signed_t,
1170        t1: *mut mp_limb_signed_t,
1171        t2: *mut mp_limb_signed_t,
1172        t3: *mut mp_limb_signed_t,
1173        lower: mp_limb_signed_t,
1174        upper: mp_limb_signed_t,
1175        a: *const mp_limb_t,
1176        a_len: mp_limb_signed_t,
1177        b: *const mp_limb_t,
1178        b_len: mp_limb_signed_t,
1179        N: mp_limb_signed_t,
1180        cmpmask: *const mp_limb_t,
1181    );
1182}
1183extern "C" {
1184    pub fn mpoly_main_variable_split_LEX(
1185        ind: *mut mp_limb_signed_t,
1186        pexp: *mut mp_limb_t,
1187        Aexp: *const mp_limb_t,
1188        l1: mp_limb_signed_t,
1189        Alen: mp_limb_signed_t,
1190        mults: *const mp_limb_t,
1191        num: mp_limb_signed_t,
1192        Abits: mp_limb_signed_t,
1193    );
1194}
1195extern "C" {
1196    pub fn mpoly_main_variable_split_DEG(
1197        ind: *mut mp_limb_signed_t,
1198        pexp: *mut mp_limb_t,
1199        Aexp: *const mp_limb_t,
1200        l1: mp_limb_signed_t,
1201        Alen: mp_limb_signed_t,
1202        deg: mp_limb_t,
1203        num: mp_limb_signed_t,
1204        Abits: mp_limb_signed_t,
1205    );
1206}
1207extern "C" {
1208    pub fn mpoly_term_exp_fits_si(
1209        exps: *mut mp_limb_t,
1210        bits: mp_limb_t,
1211        n: mp_limb_signed_t,
1212        mctx: *mut mpoly_ctx_struct,
1213    ) -> c_int;
1214}
1215extern "C" {
1216    pub fn mpoly_term_exp_fits_ui(
1217        exps: *mut mp_limb_t,
1218        bits: mp_limb_t,
1219        n: mp_limb_signed_t,
1220        mctx: *mut mpoly_ctx_struct,
1221    ) -> c_int;
1222}
1223extern "C" {
1224    pub fn mpoly_is_gen(
1225        exps: *mut mp_limb_t,
1226        var: mp_limb_signed_t,
1227        bits: mp_limb_t,
1228        mctx: *mut mpoly_ctx_struct,
1229    ) -> c_int;
1230}
1231extern "C" {
1232    pub fn mpoly_monomials_valid_test(
1233        exps: *mut mp_limb_t,
1234        len: mp_limb_signed_t,
1235        bits: mp_limb_t,
1236        mctx: *mut mpoly_ctx_struct,
1237    ) -> c_int;
1238}
1239extern "C" {
1240    pub fn mpoly_monomials_overflow_test(
1241        exps: *mut mp_limb_t,
1242        len: mp_limb_signed_t,
1243        bits: mp_limb_t,
1244        mctx: *mut mpoly_ctx_struct,
1245    ) -> c_int;
1246}
1247extern "C" {
1248    pub fn mpoly_monomials_inorder_test(
1249        exps: *mut mp_limb_t,
1250        len: mp_limb_signed_t,
1251        bits: mp_limb_t,
1252        mctx: *mut mpoly_ctx_struct,
1253    ) -> c_int;
1254}
1255extern "C" {
1256    pub fn mpoly_reverse(
1257        Aexp: *mut mp_limb_t,
1258        Bexp: *const mp_limb_t,
1259        len: mp_limb_signed_t,
1260        N: mp_limb_signed_t,
1261    );
1262}
1263extern "C" {
1264    pub fn mpoly_monomials_deflation(
1265        shift: *mut fmpz,
1266        stride: *mut fmpz,
1267        Aexps: *const mp_limb_t,
1268        Abits: mp_limb_t,
1269        Alength: mp_limb_signed_t,
1270        mctx: *mut mpoly_ctx_struct,
1271    );
1272}
1273extern "C" {
1274    pub fn mpoly_monomials_deflate(
1275        Aexps: *mut mp_limb_t,
1276        Abits: mp_limb_t,
1277        Bexps: *const mp_limb_t,
1278        Bbits: mp_limb_t,
1279        Blength: mp_limb_signed_t,
1280        shift: *const fmpz,
1281        stride: *const fmpz,
1282        mctx: *mut mpoly_ctx_struct,
1283    );
1284}
1285extern "C" {
1286    pub fn mpoly_monomials_inflate(
1287        Aexps: *mut mp_limb_t,
1288        Abits: mp_limb_t,
1289        Bexps: *const mp_limb_t,
1290        Bbits: mp_limb_t,
1291        Blength: mp_limb_signed_t,
1292        shift: *const fmpz,
1293        stride: *const fmpz,
1294        mctx: *mut mpoly_ctx_struct,
1295    );
1296}
1297extern "C" {
1298    pub fn _mpoly_gen_shift_right(
1299        Aexp: *mut mp_limb_t,
1300        Abits: mp_limb_t,
1301        Alength: mp_limb_signed_t,
1302        var: mp_limb_signed_t,
1303        amount: mp_limb_t,
1304        mctx: *mut mpoly_ctx_struct,
1305    );
1306}
1307extern "C" {
1308    pub fn _mpoly_gen_shift_right_fmpz(
1309        Aexp: *mut mp_limb_t,
1310        Abits: mp_limb_t,
1311        Alength: mp_limb_signed_t,
1312        var: mp_limb_signed_t,
1313        amount: *mut fmpz,
1314        mctx: *mut mpoly_ctx_struct,
1315    );
1316}
1317extern "C" {
1318    pub fn _mpoly_gen_shift_left(
1319        Aexp: *mut mp_limb_t,
1320        Abits: mp_limb_t,
1321        Alength: mp_limb_signed_t,
1322        var: mp_limb_signed_t,
1323        amount: mp_limb_t,
1324        mctx: *mut mpoly_ctx_struct,
1325    );
1326}
1327extern "C" {
1328    pub fn mpoly_monomials_shift_right_ui(
1329        Aexps: *mut mp_limb_t,
1330        Abits: mp_limb_t,
1331        Alength: mp_limb_signed_t,
1332        user_exps: *const mp_limb_t,
1333        mctx: *mut mpoly_ctx_struct,
1334    );
1335}
1336extern "C" {
1337    pub fn mpoly_monomials_shift_right_ffmpz(
1338        Aexps: *mut mp_limb_t,
1339        Abits: mp_limb_t,
1340        Alength: mp_limb_signed_t,
1341        user_exps: *const fmpz,
1342        mctx: *mut mpoly_ctx_struct,
1343    );
1344}
1345extern "C" {
1346    pub fn mpoly1_fill_marks(
1347        Dcoeffs: *mut *mut mp_limb_t,
1348        Dlen: *mut mp_limb_signed_t,
1349        Dalloc: *mut mp_limb_signed_t,
1350        Aexps: *const mp_limb_t,
1351        Alen: mp_limb_signed_t,
1352        Abits: mp_limb_t,
1353        mctx: *mut mpoly_ctx_struct,
1354    );
1355}
1356extern "C" {
1357    pub fn mpoly2_fill_marks(
1358        Dcoeffs: *mut *mut mp_limb_t,
1359        Dlen: *mut mp_limb_signed_t,
1360        Dalloc: *mut mp_limb_signed_t,
1361        Aexps: *const mp_limb_t,
1362        Alen: mp_limb_signed_t,
1363        Abits: mp_limb_t,
1364        mctx: *mut mpoly_ctx_struct,
1365    );
1366}
1367extern "C" {
1368    pub fn mpoly_to_mpolyl_perm_deflate(
1369        Aexps: *mut mp_limb_t,
1370        Abits: mp_limb_t,
1371        Actx: *mut mpoly_ctx_struct,
1372        Bexps: *mut mp_limb_t,
1373        Bbits: mp_limb_t,
1374        Bctx: *mut mpoly_ctx_struct,
1375        length: mp_limb_signed_t,
1376        perm: *const mp_limb_signed_t,
1377        shift: *const mp_limb_t,
1378        stride: *const mp_limb_t,
1379    );
1380}
1381extern "C" {
1382    pub fn mpoly_from_mpolyl_perm_inflate(
1383        Bexps: *mut mp_limb_t,
1384        Bbits: mp_limb_t,
1385        Bctx: *mut mpoly_ctx_struct,
1386        Aexps: *mut mp_limb_t,
1387        Abits: mp_limb_t,
1388        Actx: *mut mpoly_ctx_struct,
1389        length: mp_limb_signed_t,
1390        perm: *const mp_limb_signed_t,
1391        shift: *const mp_limb_t,
1392        stride: *const mp_limb_t,
1393    );
1394}
1395#[repr(C)]
1396#[derive(Debug, Copy, Clone)]
1397pub struct mpoly_gcd_info_struct {
1398    pub Amax_exp: *mut mp_limb_t,
1399    pub Amin_exp: *mut mp_limb_t,
1400    pub Astride: *mut mp_limb_t,
1401    pub Adeflate_deg: *mut mp_limb_signed_t,
1402    pub Alead_count: *mut mp_limb_signed_t,
1403    pub Atail_count: *mut mp_limb_signed_t,
1404    pub Bmax_exp: *mut mp_limb_t,
1405    pub Bmin_exp: *mut mp_limb_t,
1406    pub Bstride: *mut mp_limb_t,
1407    pub Bdeflate_deg: *mut mp_limb_signed_t,
1408    pub Blead_count: *mut mp_limb_signed_t,
1409    pub Btail_count: *mut mp_limb_signed_t,
1410    pub Gmin_exp: *mut mp_limb_t,
1411    pub Abarmin_exp: *mut mp_limb_t,
1412    pub Bbarmin_exp: *mut mp_limb_t,
1413    pub Gstride: *mut mp_limb_t,
1414    pub Gterm_count_est: *mut mp_limb_signed_t,
1415    pub Gdeflate_deg_bound: *mut mp_limb_signed_t,
1416    pub Gbits: mp_limb_t,
1417    pub Abarbits: mp_limb_t,
1418    pub Bbarbits: mp_limb_t,
1419    pub mvars: mp_limb_signed_t,
1420    pub Adeflate_tdeg: mp_limb_signed_t,
1421    pub Bdeflate_tdeg: mp_limb_signed_t,
1422    pub Adensity: f64,
1423    pub Bdensity: f64,
1424    pub hensel_time: f64,
1425    pub brown_time: f64,
1426    pub zippel_time: f64,
1427    pub zippel2_time: f64,
1428    pub hensel_perm: *mut mp_limb_signed_t,
1429    pub brown_perm: *mut mp_limb_signed_t,
1430    pub zippel_perm: *mut mp_limb_signed_t,
1431    pub zippel2_perm: *mut mp_limb_signed_t,
1432    pub can_use: c_uint,
1433    pub Gdeflate_deg_bounds_are_nice: c_int,
1434    pub data: *mut c_char,
1435}
1436pub type mpoly_gcd_info_t = [mpoly_gcd_info_struct; 1usize];
1437extern "C" {
1438    pub fn mpoly_gcd_info_init(I: *mut mpoly_gcd_info_struct, nvars: mp_limb_signed_t);
1439}
1440extern "C" {
1441    pub fn mpoly_gcd_info_clear(I: *mut mpoly_gcd_info_struct);
1442}
1443extern "C" {
1444    pub fn mpoly_gcd_info_limits(
1445        Amax_exp: *mut mp_limb_t,
1446        Amin_exp: *mut mp_limb_t,
1447        Amax_exp_count: *mut mp_limb_signed_t,
1448        Amin_exp_count: *mut mp_limb_signed_t,
1449        Aexps: *const mp_limb_t,
1450        Abits: mp_limb_t,
1451        Alength: mp_limb_signed_t,
1452        mctx: *mut mpoly_ctx_struct,
1453    );
1454}
1455extern "C" {
1456    pub fn mpoly_gcd_info_stride(
1457        strides: *mut mp_limb_t,
1458        Aexps: *const mp_limb_t,
1459        Abits: mp_limb_t,
1460        Alength: mp_limb_signed_t,
1461        Amax_exp: *const mp_limb_t,
1462        Amin_exp: *const mp_limb_t,
1463        Bexps: *const mp_limb_t,
1464        Bbits: mp_limb_t,
1465        Blength: mp_limb_signed_t,
1466        Bmax_exp: *const mp_limb_t,
1467        Bmin_exp: *const mp_limb_t,
1468        mctx: *mut mpoly_ctx_struct,
1469    );
1470}
1471extern "C" {
1472    pub fn mpoly_gcd_info_set_perm(
1473        I: *mut mpoly_gcd_info_struct,
1474        Alength: mp_limb_signed_t,
1475        Blength: mp_limb_signed_t,
1476        mctx: *mut mpoly_ctx_struct,
1477    );
1478}
1479extern "C" {
1480    pub fn mpoly_gcd_info_get_brown_upper_limit(
1481        I: *mut mpoly_gcd_info_struct,
1482        var: mp_limb_signed_t,
1483        bound: mp_limb_signed_t,
1484    ) -> mp_limb_signed_t;
1485}
1486extern "C" {
1487    pub fn mpoly_gcd_info_measure_hensel(
1488        I: *mut mpoly_gcd_info_struct,
1489        Alength: mp_limb_signed_t,
1490        Blength: mp_limb_signed_t,
1491        mctx: *mut mpoly_ctx_struct,
1492    );
1493}
1494extern "C" {
1495    pub fn mpoly_gcd_info_measure_brown(
1496        I: *mut mpoly_gcd_info_struct,
1497        Alength: mp_limb_signed_t,
1498        Blength: mp_limb_signed_t,
1499        mctx: *mut mpoly_ctx_struct,
1500    );
1501}
1502extern "C" {
1503    pub fn mpoly_gcd_info_measure_bma(
1504        I: *mut mpoly_gcd_info_struct,
1505        Alength: mp_limb_signed_t,
1506        Blength: mp_limb_signed_t,
1507        mctx: *mut mpoly_ctx_struct,
1508    );
1509}
1510extern "C" {
1511    pub fn mpoly_gcd_info_measure_zippel(
1512        I: *mut mpoly_gcd_info_struct,
1513        Alength: mp_limb_signed_t,
1514        Blength: mp_limb_signed_t,
1515        mctx: *mut mpoly_ctx_struct,
1516    );
1517}
1518extern "C" {
1519    pub fn mpoly_gcd_info_measure_zippel2(
1520        I: *mut mpoly_gcd_info_struct,
1521        Alength: mp_limb_signed_t,
1522        Blength: mp_limb_signed_t,
1523        mctx: *mut mpoly_ctx_struct,
1524    );
1525}
1526extern "C" {
1527    pub fn mpoly_monomial_cofactors(
1528        Abarexps: *mut fmpz,
1529        Bbarexps: *mut fmpz,
1530        Aexps: *const mp_limb_t,
1531        Abits: mp_limb_t,
1532        Bexps: *const mp_limb_t,
1533        Bbits: mp_limb_t,
1534        length: mp_limb_signed_t,
1535        mctx: *mut mpoly_ctx_struct,
1536    ) -> c_int;
1537}
1538extern "C" {
1539    pub fn mpoly_is_proved_not_square(
1540        Aexps: *const mp_limb_t,
1541        Alen: mp_limb_signed_t,
1542        Abits: mp_limb_t,
1543        N: mp_limb_signed_t,
1544        t: *mut mp_limb_t,
1545    ) -> c_int;
1546}
1547extern "C" {
1548    pub fn mpoly_remove_var_powers(
1549        var_powers: *mut fmpz,
1550        Aexps: *mut mp_limb_t,
1551        Abits: mp_limb_t,
1552        Alen: mp_limb_signed_t,
1553        mctx: *mut mpoly_ctx_struct,
1554    );
1555}
1556extern "C" {
1557    pub fn _mpoly_compress_exps(
1558        V: *mut mp_limb_signed_t,
1559        D: *mut mp_limb_signed_t,
1560        deg: *mut mp_limb_signed_t,
1561        S: *mut mp_limb_signed_t,
1562        n: mp_limb_signed_t,
1563        l: mp_limb_signed_t,
1564    ) -> mp_limb_signed_t;
1565}
1566extern "C" {
1567    pub fn mpoly_test_irreducible(
1568        Aexps: *mut mp_limb_t,
1569        Abits: mp_limb_t,
1570        Alen: mp_limb_signed_t,
1571        ctx: *mut mpoly_ctx_struct,
1572    ) -> c_int;
1573}
1574extern "C" {
1575    pub fn _mpoly_test_irreducible(
1576        Aexps: *mut mp_limb_signed_t,
1577        stride: mp_limb_signed_t,
1578        Alen: mp_limb_signed_t,
1579        nvars: mp_limb_signed_t,
1580        state: *mut flint_rand_s,
1581        tries_left: mp_limb_signed_t,
1582    ) -> c_int;
1583}
1584#[repr(C)]
1585#[derive(Debug, Copy, Clone)]
1586pub struct mpoly_compression_struct {
1587    pub mvars: mp_limb_signed_t,
1588    pub nvars: mp_limb_signed_t,
1589    pub exps: *mut mp_limb_signed_t,
1590    pub exps_alloc: mp_limb_signed_t,
1591    pub rest: *mut mp_limb_signed_t,
1592    pub rest_alloc: mp_limb_signed_t,
1593    pub umat: *mut mp_limb_signed_t,
1594    pub deltas: *mut mp_limb_signed_t,
1595    pub degs: *mut mp_limb_signed_t,
1596    pub is_trivial: c_int,
1597    pub is_perm: c_int,
1598    pub is_irred: c_int,
1599}
1600pub type mpoly_compression_t = [mpoly_compression_struct; 1usize];
1601extern "C" {
1602    pub fn mpoly_compression_init(M: *mut mpoly_compression_struct);
1603}
1604extern "C" {
1605    pub fn mpoly_compression_clear(M: *mut mpoly_compression_struct);
1606}
1607extern "C" {
1608    pub fn mpoly_compression_set(
1609        M: *mut mpoly_compression_struct,
1610        Aexps: *const mp_limb_t,
1611        Abits: mp_limb_t,
1612        Alen: mp_limb_signed_t,
1613        mctx: *mut mpoly_ctx_struct,
1614    );
1615}
1616extern "C" {
1617    pub fn mpoly_bivar_cld_bounds(l: *mut mp_limb_signed_t, n: mp_limb_signed_t);
1618}
1619extern "C" {
1620    pub fn _slong_array_fit_length(
1621        array: *mut *mut mp_limb_signed_t,
1622        alloc: *mut mp_limb_signed_t,
1623        len: mp_limb_signed_t,
1624    );
1625}
1626extern "C" {
1627    pub fn _mpoly_heap_pop1(
1628        heap: *mut mpoly_heap1_s,
1629        heap_len: *mut mp_limb_signed_t,
1630        maskhi: mp_limb_t,
1631    ) -> *mut c_void;
1632}
1633extern "C" {
1634    pub fn _mpoly_heap_insert1(
1635        heap: *mut mpoly_heap1_s,
1636        exp: mp_limb_t,
1637        x: *mut c_void,
1638        next_loc: *mut mp_limb_signed_t,
1639        heap_len: *mut mp_limb_signed_t,
1640        maskhi: mp_limb_t,
1641    );
1642}
1643extern "C" {
1644    pub fn _mpoly_heap_pop(
1645        heap: *mut mpoly_heap_s,
1646        heap_len: *mut mp_limb_signed_t,
1647        N: mp_limb_signed_t,
1648        cmpmask: *const mp_limb_t,
1649    ) -> *mut c_void;
1650}
1651extern "C" {
1652    pub fn _mpoly_heap_insert(
1653        heap: *mut mpoly_heap_s,
1654        exp: *mut mp_limb_t,
1655        x: *mut c_void,
1656        next_loc: *mut mp_limb_signed_t,
1657        heap_len: *mut mp_limb_signed_t,
1658        N: mp_limb_signed_t,
1659        cmpmask: *const mp_limb_t,
1660    ) -> c_int;
1661}
1662#[repr(C)]
1663#[derive(Debug, Copy, Clone)]
1664pub struct mpoly_univar_struct {
1665    pub coeffs: *mut c_char,
1666    pub exps: *mut fmpz,
1667    pub length: mp_limb_signed_t,
1668    pub alloc: mp_limb_signed_t,
1669}
1670pub type mpoly_univar_t = [mpoly_univar_struct; 1usize];
1671#[repr(C)]
1672#[derive(Debug, Copy, Clone)]
1673pub struct _bindgen_ty_22 {
1674    pub elem_size: mp_limb_signed_t,
1675    pub ctx: *const c_void,
1676    pub init: ::std::option::Option<unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void)>,
1677    pub clear: ::std::option::Option<unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void)>,
1678    pub is_zero: ::std::option::Option<
1679        unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> c_int,
1680    >,
1681    pub zero: ::std::option::Option<unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void)>,
1682    pub one: ::std::option::Option<unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void)>,
1683    pub set_fmpz: ::std::option::Option<
1684        unsafe extern "C" fn(arg1: *mut c_void, arg2: *mut fmpz, arg3: *const c_void),
1685    >,
1686    pub set: ::std::option::Option<
1687        unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void, arg3: *const c_void),
1688    >,
1689    pub swap: ::std::option::Option<
1690        unsafe extern "C" fn(arg1: *mut c_void, arg2: *mut c_void, arg3: *const c_void),
1691    >,
1692    pub neg: ::std::option::Option<
1693        unsafe extern "C" fn(arg1: *mut c_void, arg2: *const c_void, arg3: *const c_void),
1694    >,
1695    pub add: ::std::option::Option<
1696        unsafe extern "C" fn(
1697            arg1: *mut c_void,
1698            arg2: *const c_void,
1699            arg3: *const c_void,
1700            arg4: *const c_void,
1701        ),
1702    >,
1703    pub sub: ::std::option::Option<
1704        unsafe extern "C" fn(
1705            arg1: *mut c_void,
1706            arg2: *const c_void,
1707            arg3: *const c_void,
1708            arg4: *const c_void,
1709        ),
1710    >,
1711    pub mul_fmpz: ::std::option::Option<
1712        unsafe extern "C" fn(
1713            arg1: *mut c_void,
1714            arg2: *const c_void,
1715            arg3: *mut fmpz,
1716            arg4: *const c_void,
1717        ),
1718    >,
1719    pub mul: ::std::option::Option<
1720        unsafe extern "C" fn(
1721            arg1: *mut c_void,
1722            arg2: *const c_void,
1723            arg3: *const c_void,
1724            arg4: *const c_void,
1725        ),
1726    >,
1727    pub divexact: ::std::option::Option<
1728        unsafe extern "C" fn(
1729            arg1: *mut c_void,
1730            arg2: *const c_void,
1731            arg3: *const c_void,
1732            arg4: *const c_void,
1733        ),
1734    >,
1735    pub divides: ::std::option::Option<
1736        unsafe extern "C" fn(
1737            arg1: *mut c_void,
1738            arg2: *const c_void,
1739            arg3: *const c_void,
1740            arg4: *const c_void,
1741        ) -> c_int,
1742    >,
1743    pub pow_fmpz: ::std::option::Option<
1744        unsafe extern "C" fn(
1745            arg1: *mut c_void,
1746            arg2: *const c_void,
1747            arg3: *mut fmpz,
1748            arg4: *const c_void,
1749        ) -> c_int,
1750    >,
1751    pub length: ::std::option::Option<
1752        unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> mp_limb_signed_t,
1753    >,
1754}
1755pub type mpoly_void_ring_t = [_bindgen_ty_22; 1usize];
1756extern "C" {
1757    pub fn mpoly_void_ring_elem_init(R: *mut _bindgen_ty_22) -> *mut c_void;
1758}
1759extern "C" {
1760    pub fn mpoly_void_ring_elem_clear(a: *mut c_void, R: *mut _bindgen_ty_22);
1761}
1762extern "C" {
1763    pub fn mpoly_univar_init(A: *mut mpoly_univar_struct, R: *mut _bindgen_ty_22);
1764}
1765extern "C" {
1766    pub fn mpoly_univar_clear(A: *mut mpoly_univar_struct, R: *mut _bindgen_ty_22);
1767}
1768extern "C" {
1769    pub fn mpoly_univar_swap(A: *mut mpoly_univar_struct, B: *mut mpoly_univar_struct);
1770}
1771extern "C" {
1772    pub fn mpoly_univar_fit_length(
1773        A: *mut mpoly_univar_struct,
1774        len: mp_limb_signed_t,
1775        R: *mut _bindgen_ty_22,
1776    );
1777}
1778extern "C" {
1779    pub fn mpoly_univar_init2(
1780        A: *mut mpoly_univar_struct,
1781        len: mp_limb_signed_t,
1782        R: *mut _bindgen_ty_22,
1783    );
1784}
1785extern "C" {
1786    pub fn mpoly_univar_pseudo_gcd_ducos(
1787        G: *mut mpoly_univar_struct,
1788        B: *mut mpoly_univar_struct,
1789        A: *mut mpoly_univar_struct,
1790        R: *mut _bindgen_ty_22,
1791    ) -> c_int;
1792}
1793extern "C" {
1794    pub fn mpoly_univar_resultant(
1795        r: *mut c_void,
1796        fx: *mut mpoly_univar_struct,
1797        gx: *mut mpoly_univar_struct,
1798        R: *mut _bindgen_ty_22,
1799    ) -> c_int;
1800}
1801extern "C" {
1802    pub fn mpoly_univar_discriminant(
1803        d: *mut c_void,
1804        fx: *mut mpoly_univar_struct,
1805        R: *mut _bindgen_ty_22,
1806    ) -> c_int;
1807}
1808#[repr(C)]
1809#[derive(Debug, Copy, Clone)]
1810pub struct string_with_length_struct {
1811    pub str_: *mut c_char,
1812    pub str_len: mp_limb_signed_t,
1813}
1814#[repr(C)]
1815#[derive(Debug, Copy, Clone)]
1816pub struct mpoly_parse_struct {
1817    pub R: mpoly_void_ring_t,
1818    pub stack: *mut mp_limb_signed_t,
1819    pub stack_len: mp_limb_signed_t,
1820    pub stack_alloc: mp_limb_signed_t,
1821    pub estore: *mut c_char,
1822    pub estore_len: mp_limb_signed_t,
1823    pub estore_alloc: mp_limb_signed_t,
1824    pub tmp: *mut c_void,
1825    pub terminal_strings: *mut string_with_length_struct,
1826    pub terminal_values: *mut c_char,
1827    pub terminals_alloc: mp_limb_signed_t,
1828    pub terminals_len: mp_limb_signed_t,
1829}
1830pub type mpoly_parse_t = [mpoly_parse_struct; 1usize];
1831extern "C" {
1832    pub fn mpoly_parse_init(E: *mut mpoly_parse_struct);
1833}
1834extern "C" {
1835    pub fn mpoly_parse_clear(E: *mut mpoly_parse_struct);
1836}
1837extern "C" {
1838    pub fn mpoly_parse_add_terminal(E: *mut mpoly_parse_struct, s: *const c_char, v: *const c_void);
1839}
1840extern "C" {
1841    pub fn mpoly_parse_parse(
1842        E: *mut mpoly_parse_struct,
1843        res: *mut c_void,
1844        s: *const c_char,
1845        len: mp_limb_signed_t,
1846    ) -> c_int;
1847}
1848extern "C" {
1849    pub fn mpoly_main_variable_terms1(
1850        i1: *mut mp_limb_signed_t,
1851        n1: *mut mp_limb_signed_t,
1852        exp1: *const mp_limb_t,
1853        l1: mp_limb_signed_t,
1854        len1: mp_limb_signed_t,
1855        k: mp_limb_signed_t,
1856        num: mp_limb_signed_t,
1857        bits: mp_limb_signed_t,
1858    );
1859}