flint_sys/
nmod_mpoly.rs

1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3#![allow(non_upper_case_globals)]
4
5//! *See the [FLINT documentation](http://flintlib.org/doc/nmod_mpoly.html).
6
7use crate::deps::*;
8use crate::flint::*;
9use crate::fmpz::fmpz;
10use crate::fmpz_mat::fmpz_mat_struct;
11use crate::mpoly::*;
12use crate::n_poly::{n_bpoly_struct, n_poly_struct, n_polyun_struct};
13use crate::nmod_poly::nmod_poly_struct;
14use crate::nmod_vec::nmod_t;
15use libc::{c_char, c_int, c_uint, FILE};
16
17#[repr(C)]
18#[derive(Debug, Copy, Clone)]
19pub struct nmod_mpoly_ctx_struct {
20    pub minfo: mpoly_ctx_t,
21    pub mod_: nmod_t,
22}
23pub type nmod_mpoly_ctx_t = [nmod_mpoly_ctx_struct; 1usize];
24#[repr(C)]
25#[derive(Debug, Copy, Clone)]
26pub struct nmod_mpoly_struct {
27    pub coeffs: *mut mp_limb_t,
28    pub exps: *mut mp_limb_t,
29    pub length: mp_limb_signed_t,
30    pub bits: mp_limb_t,
31    pub coeffs_alloc: mp_limb_signed_t,
32    pub exps_alloc: mp_limb_signed_t,
33}
34pub type nmod_mpoly_t = [nmod_mpoly_struct; 1usize];
35extern "C" {
36    pub fn nmod_mpoly_term_coeff_ref(
37        A: *mut nmod_mpoly_struct,
38        i: mp_limb_signed_t,
39        ctx: *mut nmod_mpoly_ctx_struct,
40    ) -> *mut mp_limb_t;
41}
42extern "C" {
43    pub fn evil_cast_nmod_poly_to_n_poly(a: *mut nmod_poly_struct) -> *mut n_poly_struct;
44}
45extern "C" {
46    pub fn evil_const_cast_nmod_poly_to_n_poly(a: *const nmod_poly_struct) -> *const n_poly_struct;
47}
48#[repr(C)]
49#[derive(Debug, Copy, Clone)]
50pub struct nmod_mpoly_univar_struct {
51    pub coeffs: *mut nmod_mpoly_struct,
52    pub exps: *mut fmpz,
53    pub alloc: mp_limb_signed_t,
54    pub length: mp_limb_signed_t,
55}
56pub type nmod_mpoly_univar_t = [nmod_mpoly_univar_struct; 1usize];
57#[repr(C)]
58#[derive(Debug, Copy, Clone)]
59pub struct nmod_mpolyu_struct {
60    pub coeffs: *mut nmod_mpoly_struct,
61    pub exps: *mut mp_limb_t,
62    pub alloc: mp_limb_signed_t,
63    pub length: mp_limb_signed_t,
64    pub bits: mp_limb_t,
65}
66pub type nmod_mpolyu_t = [nmod_mpolyu_struct; 1usize];
67#[repr(C)]
68#[derive(Debug, Copy, Clone)]
69pub struct nmod_mpolyn_struct {
70    pub coeffs: *mut n_poly_struct,
71    pub exps: *mut mp_limb_t,
72    pub alloc: mp_limb_signed_t,
73    pub length: mp_limb_signed_t,
74    pub bits: mp_limb_signed_t,
75}
76pub type nmod_mpolyn_t = [nmod_mpolyn_struct; 1usize];
77#[repr(C)]
78#[derive(Debug, Copy, Clone)]
79pub struct nmod_mpolyun_struct {
80    pub coeffs: *mut nmod_mpolyn_struct,
81    pub exps: *mut mp_limb_t,
82    pub alloc: mp_limb_signed_t,
83    pub length: mp_limb_signed_t,
84    pub bits: mp_limb_t,
85}
86pub type nmod_mpolyun_t = [nmod_mpolyun_struct; 1usize];
87#[repr(C)]
88#[derive(Debug, Copy, Clone)]
89pub struct nmod_mpolyd_struct {
90    pub nvars: mp_limb_signed_t,
91    pub degb_alloc: mp_limb_signed_t,
92    pub deg_bounds: *mut mp_limb_signed_t,
93    pub coeff_alloc: mp_limb_signed_t,
94    pub coeffs: *mut mp_limb_t,
95}
96pub type nmod_mpolyd_t = [nmod_mpolyd_struct; 1usize];
97#[repr(C)]
98#[derive(Debug, Copy, Clone)]
99pub struct nmod_poly_stack_struct {
100    pub poly_array: *mut *mut n_poly_struct,
101    pub poly_alloc: mp_limb_signed_t,
102    pub poly_top: mp_limb_signed_t,
103    pub mpolyun_array: *mut *mut nmod_mpolyun_struct,
104    pub mpolyun_alloc: mp_limb_signed_t,
105    pub mpolyun_top: mp_limb_signed_t,
106    pub mpolyn_array: *mut *mut nmod_mpolyn_struct,
107    pub mpolyn_alloc: mp_limb_signed_t,
108    pub mpolyn_top: mp_limb_signed_t,
109    pub ctx: *const nmod_mpoly_ctx_struct,
110    pub bits: mp_limb_t,
111}
112pub type nmod_poly_stack_t = [nmod_poly_stack_struct; 1usize];
113extern "C" {
114    pub fn nmod_poly_stack_init(
115        S: *mut nmod_poly_stack_struct,
116        bits: mp_limb_t,
117        ctx: *mut nmod_mpoly_ctx_struct,
118    );
119}
120extern "C" {
121    pub fn nmod_poly_stack_clear(S: *mut nmod_poly_stack_struct);
122}
123extern "C" {
124    pub fn nmod_poly_stack_set_ctx(S: *mut nmod_poly_stack_struct, ctx: *mut nmod_mpoly_ctx_struct);
125}
126extern "C" {
127    pub fn nmod_poly_stack_fit_request_poly(
128        S: *mut nmod_poly_stack_struct,
129        k: mp_limb_signed_t,
130    ) -> *mut *mut n_poly_struct;
131}
132extern "C" {
133    pub fn nmod_poly_stack_fit_request_mpolyun(
134        S: *mut nmod_poly_stack_struct,
135        k: mp_limb_signed_t,
136    ) -> *mut *mut nmod_mpolyun_struct;
137}
138extern "C" {
139    pub fn nmod_poly_stack_fit_request_mpolyn(
140        S: *mut nmod_poly_stack_struct,
141        k: mp_limb_signed_t,
142    ) -> *mut *mut nmod_mpolyn_struct;
143}
144extern "C" {
145    pub fn nmod_poly_stack_request_poly(
146        S: *mut nmod_poly_stack_struct,
147        k: mp_limb_signed_t,
148    ) -> *mut *mut n_poly_struct;
149}
150extern "C" {
151    pub fn nmod_poly_stack_take_top_poly(S: *mut nmod_poly_stack_struct) -> *mut n_poly_struct;
152}
153extern "C" {
154    pub fn nmod_poly_stack_give_back_poly(S: *mut nmod_poly_stack_struct, k: mp_limb_signed_t);
155}
156extern "C" {
157    pub fn nmod_poly_stack_size_poly(S: *mut nmod_poly_stack_struct) -> mp_limb_signed_t;
158}
159extern "C" {
160    pub fn nmod_poly_stack_request_mpolyun(
161        S: *mut nmod_poly_stack_struct,
162        k: mp_limb_signed_t,
163    ) -> *mut *mut nmod_mpolyun_struct;
164}
165extern "C" {
166    pub fn nmod_poly_stack_take_top_mpolyun(
167        S: *mut nmod_poly_stack_struct,
168    ) -> *mut nmod_mpolyun_struct;
169}
170extern "C" {
171    pub fn nmod_poly_stack_give_back_mpolyun(S: *mut nmod_poly_stack_struct, k: mp_limb_signed_t);
172}
173extern "C" {
174    pub fn nmod_poly_stack_size_mpolyun(S: *mut nmod_poly_stack_struct) -> mp_limb_signed_t;
175}
176extern "C" {
177    pub fn nmod_poly_stack_request_mpolyn(
178        S: *mut nmod_poly_stack_struct,
179        k: mp_limb_signed_t,
180    ) -> *mut *mut nmod_mpolyn_struct;
181}
182extern "C" {
183    pub fn nmod_poly_stack_take_top_mpolyn(
184        S: *mut nmod_poly_stack_struct,
185    ) -> *mut nmod_mpolyn_struct;
186}
187extern "C" {
188    pub fn nmod_poly_stack_give_back_mpolyn(S: *mut nmod_poly_stack_struct, k: mp_limb_signed_t);
189}
190extern "C" {
191    pub fn nmod_poly_stack_size_mpolyn(S: *mut nmod_poly_stack_struct) -> mp_limb_signed_t;
192}
193extern "C" {
194    pub fn nmod_mpoly_ctx_init(
195        ctx: *mut nmod_mpoly_ctx_struct,
196        nvars: mp_limb_signed_t,
197        ord: ordering_t,
198        modulus: mp_limb_t,
199    );
200}
201extern "C" {
202    pub fn nmod_mpoly_ctx_init_rand(
203        ctx: *mut nmod_mpoly_ctx_struct,
204        state: *mut flint_rand_s,
205        max_nvars: mp_limb_signed_t,
206        modulus: mp_limb_t,
207    );
208}
209extern "C" {
210    pub fn nmod_mpoly_ctx_clear(ctx: *mut nmod_mpoly_ctx_struct);
211}
212extern "C" {
213    pub fn nmod_mpoly_ctx_set_modulus(ctx: *mut nmod_mpoly_ctx_struct, p: mp_limb_t);
214}
215extern "C" {
216    pub fn nmod_mpoly_ctx_nvars(ctx: *mut nmod_mpoly_ctx_struct) -> mp_limb_signed_t;
217}
218extern "C" {
219    pub fn nmod_mpoly_ctx_ord(ctx: *mut nmod_mpoly_ctx_struct) -> ordering_t;
220}
221extern "C" {
222    pub fn nmod_mpoly_ctx_modulus(ctx: *mut nmod_mpoly_ctx_struct) -> mp_limb_t;
223}
224extern "C" {
225    pub fn nmod_mpoly_ctx_change_modulus(ctx: *mut nmod_mpoly_ctx_struct, modulus: mp_limb_t);
226}
227extern "C" {
228    pub fn nmod_mpoly_init(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
229}
230extern "C" {
231    pub fn nmod_mpoly_clear(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
232}
233extern "C" {
234    pub fn nmod_mpoly_init2(
235        A: *mut nmod_mpoly_struct,
236        alloc: mp_limb_signed_t,
237        ctx: *mut nmod_mpoly_ctx_struct,
238    );
239}
240extern "C" {
241    pub fn nmod_mpoly_init3(
242        A: *mut nmod_mpoly_struct,
243        alloc: mp_limb_signed_t,
244        bits: mp_limb_t,
245        ctx: *mut nmod_mpoly_ctx_struct,
246    );
247}
248extern "C" {
249    pub fn nmod_mpoly_realloc(
250        A: *mut nmod_mpoly_struct,
251        alloc: mp_limb_signed_t,
252        ctx: *mut nmod_mpoly_ctx_struct,
253    );
254}
255extern "C" {
256    pub fn nmod_mpoly_fit_length(
257        A: *mut nmod_mpoly_struct,
258        length: mp_limb_signed_t,
259        ctx: *mut nmod_mpoly_ctx_struct,
260    );
261}
262extern "C" {
263    pub fn nmod_mpoly_fit_length_fit_bits(
264        A: *mut nmod_mpoly_struct,
265        len: mp_limb_signed_t,
266        bits: mp_limb_t,
267        ctx: *mut nmod_mpoly_ctx_struct,
268    );
269}
270extern "C" {
271    pub fn nmod_mpoly_fit_length_reset_bits(
272        A: *mut nmod_mpoly_struct,
273        len: mp_limb_signed_t,
274        bits: mp_limb_t,
275        ctx: *mut nmod_mpoly_ctx_struct,
276    );
277}
278extern "C" {
279    pub fn _nmod_mpoly_fit_length(
280        coeffs: *mut *mut mp_limb_t,
281        coeffs_alloc: *mut mp_limb_signed_t,
282        exps: *mut *mut mp_limb_t,
283        exps_alloc: *mut mp_limb_signed_t,
284        N: mp_limb_signed_t,
285        length: mp_limb_signed_t,
286    );
287}
288extern "C" {
289    pub fn _nmod_mpoly_set_length(
290        A: *mut nmod_mpoly_struct,
291        newlen: mp_limb_signed_t,
292        ctx: *mut nmod_mpoly_ctx_struct,
293    );
294}
295extern "C" {
296    pub fn nmod_mpoly_truncate(
297        A: *mut nmod_mpoly_struct,
298        newlen: mp_limb_signed_t,
299        ctx: *mut nmod_mpoly_ctx_struct,
300    );
301}
302extern "C" {
303    pub fn nmod_mpoly_set_str_pretty(
304        A: *mut nmod_mpoly_struct,
305        str_: *const c_char,
306        x: *mut *const c_char,
307        ctx: *mut nmod_mpoly_ctx_struct,
308    ) -> c_int;
309}
310extern "C" {
311    pub fn nmod_mpoly_get_str_pretty(
312        A: *mut nmod_mpoly_struct,
313        x: *mut *const c_char,
314        ctx: *mut nmod_mpoly_ctx_struct,
315    ) -> *mut c_char;
316}
317extern "C" {
318    pub fn nmod_mpoly_fprint_pretty(
319        file: *mut FILE,
320        A: *mut nmod_mpoly_struct,
321        x: *mut *const c_char,
322        ctx: *mut nmod_mpoly_ctx_struct,
323    ) -> c_int;
324}
325extern "C" {
326    pub fn nmod_mpoly_print_pretty(
327        A: *mut nmod_mpoly_struct,
328        x: *mut *const c_char,
329        ctx: *mut nmod_mpoly_ctx_struct,
330    ) -> c_int;
331}
332extern "C" {
333    pub fn nmod_mpoly_gen(
334        A: *mut nmod_mpoly_struct,
335        var: mp_limb_signed_t,
336        ctx: *mut nmod_mpoly_ctx_struct,
337    );
338}
339extern "C" {
340    pub fn nmod_mpoly_is_gen(
341        A: *mut nmod_mpoly_struct,
342        var: mp_limb_signed_t,
343        ctx: *mut nmod_mpoly_ctx_struct,
344    ) -> c_int;
345}
346extern "C" {
347    pub fn nmod_mpoly_set(
348        A: *mut nmod_mpoly_struct,
349        B: *mut nmod_mpoly_struct,
350        ctx: *mut nmod_mpoly_ctx_struct,
351    );
352}
353extern "C" {
354    pub fn nmod_mpoly_equal(
355        A: *mut nmod_mpoly_struct,
356        B: *mut nmod_mpoly_struct,
357        ctx: *mut nmod_mpoly_ctx_struct,
358    ) -> c_int;
359}
360extern "C" {
361    pub fn nmod_mpoly_swap(
362        A: *mut nmod_mpoly_struct,
363        B: *mut nmod_mpoly_struct,
364        ctx: *mut nmod_mpoly_ctx_struct,
365    );
366}
367extern "C" {
368    pub fn nmod_mpoly_is_ui(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct) -> c_int;
369}
370extern "C" {
371    pub fn nmod_mpoly_get_ui(
372        A: *mut nmod_mpoly_struct,
373        ctx: *mut nmod_mpoly_ctx_struct,
374    ) -> mp_limb_t;
375}
376extern "C" {
377    pub fn nmod_mpoly_set_ui(
378        A: *mut nmod_mpoly_struct,
379        c: mp_limb_t,
380        ctx: *mut nmod_mpoly_ctx_struct,
381    );
382}
383extern "C" {
384    pub fn nmod_mpoly_set_fmpz(
385        A: *mut nmod_mpoly_struct,
386        c: *mut fmpz,
387        ctx: *mut nmod_mpoly_ctx_struct,
388    );
389}
390extern "C" {
391    pub fn nmod_mpoly_zero(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
392}
393extern "C" {
394    pub fn nmod_mpoly_one(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
395}
396extern "C" {
397    pub fn nmod_mpoly_equal_ui(
398        A: *mut nmod_mpoly_struct,
399        c: mp_limb_t,
400        ctx: *mut nmod_mpoly_ctx_struct,
401    ) -> c_int;
402}
403extern "C" {
404    pub fn nmod_mpoly_is_zero(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct) -> c_int;
405}
406extern "C" {
407    pub fn nmod_mpoly_is_one(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct) -> c_int;
408}
409extern "C" {
410    pub fn nmod_mpoly_degrees_fit_si(
411        A: *mut nmod_mpoly_struct,
412        ctx: *mut nmod_mpoly_ctx_struct,
413    ) -> c_int;
414}
415extern "C" {
416    pub fn nmod_mpoly_degrees_fmpz(
417        degs: *mut *mut fmpz,
418        A: *mut nmod_mpoly_struct,
419        ctx: *mut nmod_mpoly_ctx_struct,
420    );
421}
422extern "C" {
423    pub fn nmod_mpoly_degrees_si(
424        degs: *mut mp_limb_signed_t,
425        A: *mut nmod_mpoly_struct,
426        ctx: *mut nmod_mpoly_ctx_struct,
427    );
428}
429extern "C" {
430    pub fn nmod_mpoly_degree_fmpz(
431        deg: *mut fmpz,
432        A: *mut nmod_mpoly_struct,
433        var: mp_limb_signed_t,
434        ctx: *mut nmod_mpoly_ctx_struct,
435    );
436}
437extern "C" {
438    pub fn nmod_mpoly_degree_si(
439        A: *mut nmod_mpoly_struct,
440        var: mp_limb_signed_t,
441        ctx: *mut nmod_mpoly_ctx_struct,
442    ) -> mp_limb_signed_t;
443}
444extern "C" {
445    pub fn nmod_mpoly_total_degree_fits_si(
446        A: *mut nmod_mpoly_struct,
447        ctx: *mut nmod_mpoly_ctx_struct,
448    ) -> c_int;
449}
450extern "C" {
451    pub fn nmod_mpoly_total_degree_fmpz(
452        td: *mut fmpz,
453        A: *mut nmod_mpoly_struct,
454        ctx: *mut nmod_mpoly_ctx_struct,
455    );
456}
457extern "C" {
458    pub fn nmod_mpoly_total_degree_si(
459        A: *mut nmod_mpoly_struct,
460        ctx: *mut nmod_mpoly_ctx_struct,
461    ) -> mp_limb_signed_t;
462}
463extern "C" {
464    pub fn nmod_mpoly_used_vars(
465        used: *mut c_int,
466        A: *mut nmod_mpoly_struct,
467        ctx: *mut nmod_mpoly_ctx_struct,
468    );
469}
470extern "C" {
471    pub fn nmod_mpoly_get_coeff_ui_monomial(
472        A: *mut nmod_mpoly_struct,
473        M: *mut nmod_mpoly_struct,
474        ctx: *mut nmod_mpoly_ctx_struct,
475    ) -> mp_limb_t;
476}
477extern "C" {
478    pub fn nmod_mpoly_set_coeff_ui_monomial(
479        A: *mut nmod_mpoly_struct,
480        c: mp_limb_t,
481        M: *mut nmod_mpoly_struct,
482        ctx: *mut nmod_mpoly_ctx_struct,
483    );
484}
485extern "C" {
486    pub fn nmod_mpoly_get_coeff_ui_fmpz(
487        A: *mut nmod_mpoly_struct,
488        exp: *const *mut fmpz,
489        ctx: *mut nmod_mpoly_ctx_struct,
490    ) -> mp_limb_t;
491}
492extern "C" {
493    pub fn nmod_mpoly_get_coeff_ui_ui(
494        A: *mut nmod_mpoly_struct,
495        exp: *const mp_limb_t,
496        ctx: *mut nmod_mpoly_ctx_struct,
497    ) -> mp_limb_t;
498}
499extern "C" {
500    pub fn _nmod_mpoly_set_coeff_ui_fmpz(
501        A: *mut nmod_mpoly_struct,
502        c: mp_limb_t,
503        exp: *const fmpz,
504        ctx: *mut nmod_mpoly_ctx_struct,
505    );
506}
507extern "C" {
508    pub fn nmod_mpoly_set_coeff_ui_fmpz(
509        A: *mut nmod_mpoly_struct,
510        c: mp_limb_t,
511        exp: *const *mut fmpz,
512        ctx: *mut nmod_mpoly_ctx_struct,
513    );
514}
515extern "C" {
516    pub fn nmod_mpoly_set_coeff_ui_ui(
517        A: *mut nmod_mpoly_struct,
518        c: mp_limb_t,
519        exp: *const mp_limb_t,
520        ctx: *mut nmod_mpoly_ctx_struct,
521    );
522}
523extern "C" {
524    pub fn nmod_mpoly_get_coeff_vars_ui(
525        C: *mut nmod_mpoly_struct,
526        A: *mut nmod_mpoly_struct,
527        vars: *const mp_limb_signed_t,
528        exps: *const mp_limb_t,
529        length: mp_limb_signed_t,
530        ctx: *mut nmod_mpoly_ctx_struct,
531    );
532}
533extern "C" {
534    pub fn nmod_mpoly_leadcoeff(
535        A: *mut nmod_mpoly_struct,
536        ctx: *mut nmod_mpoly_ctx_struct,
537    ) -> mp_limb_t;
538}
539extern "C" {
540    pub fn nmod_mpoly_is_nmod_poly(
541        A: *mut nmod_mpoly_struct,
542        var: mp_limb_signed_t,
543        ctx: *mut nmod_mpoly_ctx_struct,
544    ) -> c_int;
545}
546extern "C" {
547    pub fn nmod_mpoly_get_n_poly(
548        A: *mut n_poly_struct,
549        B: *mut nmod_mpoly_struct,
550        var: mp_limb_signed_t,
551        ctx: *mut nmod_mpoly_ctx_struct,
552    ) -> c_int;
553}
554extern "C" {
555    pub fn nmod_mpoly_get_nmod_poly(
556        A: *mut nmod_poly_struct,
557        B: *mut nmod_mpoly_struct,
558        var: mp_limb_signed_t,
559        ctx: *mut nmod_mpoly_ctx_struct,
560    ) -> c_int;
561}
562extern "C" {
563    pub fn _nmod_mpoly_set_nmod_poly(
564        A: *mut nmod_mpoly_struct,
565        Abits: mp_limb_t,
566        Bcoeffs: *const mp_limb_t,
567        Blen: mp_limb_signed_t,
568        var: mp_limb_signed_t,
569        ctx: *mut nmod_mpoly_ctx_struct,
570    );
571}
572extern "C" {
573    pub fn nmod_mpoly_set_n_poly_mod(
574        A: *mut nmod_mpoly_struct,
575        B: *mut n_poly_struct,
576        var: mp_limb_signed_t,
577        ctx: *mut nmod_mpoly_ctx_struct,
578    );
579}
580extern "C" {
581    pub fn nmod_mpoly_set_nmod_poly(
582        A: *mut nmod_mpoly_struct,
583        B: *mut nmod_poly_struct,
584        var: mp_limb_signed_t,
585        ctx: *mut nmod_mpoly_ctx_struct,
586    );
587}
588extern "C" {
589    pub fn nmod_mpoly_cmp(
590        A: *mut nmod_mpoly_struct,
591        B: *mut nmod_mpoly_struct,
592        ctx: *mut nmod_mpoly_ctx_struct,
593    ) -> c_int;
594}
595extern "C" {
596    pub fn nmod_mpoly_is_canonical(
597        A: *mut nmod_mpoly_struct,
598        ctx: *mut nmod_mpoly_ctx_struct,
599    ) -> c_int;
600}
601extern "C" {
602    pub fn nmod_mpoly_length(
603        A: *mut nmod_mpoly_struct,
604        ctx: *mut nmod_mpoly_ctx_struct,
605    ) -> mp_limb_signed_t;
606}
607extern "C" {
608    pub fn nmod_mpoly_resize(
609        A: *mut nmod_mpoly_struct,
610        new_length: mp_limb_signed_t,
611        ctx: *mut nmod_mpoly_ctx_struct,
612    );
613}
614extern "C" {
615    pub fn nmod_mpoly_get_term_coeff_ui(
616        A: *mut nmod_mpoly_struct,
617        i: mp_limb_signed_t,
618        ctx: *mut nmod_mpoly_ctx_struct,
619    ) -> mp_limb_t;
620}
621extern "C" {
622    pub fn nmod_mpoly_set_term_coeff_ui(
623        A: *mut nmod_mpoly_struct,
624        i: mp_limb_signed_t,
625        c: mp_limb_t,
626        ctx: *mut nmod_mpoly_ctx_struct,
627    );
628}
629extern "C" {
630    pub fn nmod_mpoly_term_exp_fits_ui(
631        A: *mut nmod_mpoly_struct,
632        i: mp_limb_signed_t,
633        ctx: *mut nmod_mpoly_ctx_struct,
634    ) -> c_int;
635}
636extern "C" {
637    pub fn nmod_mpoly_term_exp_fits_si(
638        A: *mut nmod_mpoly_struct,
639        i: mp_limb_signed_t,
640        ctx: *mut nmod_mpoly_ctx_struct,
641    ) -> c_int;
642}
643extern "C" {
644    pub fn nmod_mpoly_get_term_exp_fmpz(
645        exp: *mut *mut fmpz,
646        A: *mut nmod_mpoly_struct,
647        i: mp_limb_signed_t,
648        ctx: *mut nmod_mpoly_ctx_struct,
649    );
650}
651extern "C" {
652    pub fn nmod_mpoly_get_term_exp_ui(
653        exp: *mut mp_limb_t,
654        A: *mut nmod_mpoly_struct,
655        i: mp_limb_signed_t,
656        ctx: *mut nmod_mpoly_ctx_struct,
657    );
658}
659extern "C" {
660    pub fn nmod_mpoly_get_term_exp_si(
661        exp: *mut mp_limb_signed_t,
662        A: *mut nmod_mpoly_struct,
663        i: mp_limb_signed_t,
664        ctx: *mut nmod_mpoly_ctx_struct,
665    );
666}
667extern "C" {
668    pub fn nmod_mpoly_get_term_var_exp_ui(
669        A: *mut nmod_mpoly_struct,
670        i: mp_limb_signed_t,
671        var: mp_limb_signed_t,
672        ctx: *mut nmod_mpoly_ctx_struct,
673    ) -> mp_limb_t;
674}
675extern "C" {
676    pub fn nmod_mpoly_get_term_var_exp_si(
677        A: *mut nmod_mpoly_struct,
678        i: mp_limb_signed_t,
679        var: mp_limb_signed_t,
680        ctx: *mut nmod_mpoly_ctx_struct,
681    ) -> mp_limb_signed_t;
682}
683extern "C" {
684    pub fn nmod_mpoly_set_term_exp_fmpz(
685        A: *mut nmod_mpoly_struct,
686        i: mp_limb_signed_t,
687        exp: *const *mut fmpz,
688        ctx: *mut nmod_mpoly_ctx_struct,
689    );
690}
691extern "C" {
692    pub fn nmod_mpoly_set_term_exp_ui(
693        A: *mut nmod_mpoly_struct,
694        i: mp_limb_signed_t,
695        exp: *const mp_limb_t,
696        ctx: *mut nmod_mpoly_ctx_struct,
697    );
698}
699extern "C" {
700    pub fn nmod_mpoly_get_term(
701        M: *mut nmod_mpoly_struct,
702        A: *mut nmod_mpoly_struct,
703        i: mp_limb_signed_t,
704        ctx: *mut nmod_mpoly_ctx_struct,
705    );
706}
707extern "C" {
708    pub fn nmod_mpoly_get_term_monomial(
709        M: *mut nmod_mpoly_struct,
710        A: *mut nmod_mpoly_struct,
711        i: mp_limb_signed_t,
712        ctx: *mut nmod_mpoly_ctx_struct,
713    );
714}
715extern "C" {
716    pub fn nmod_mpoly_push_term_ui_fmpz(
717        A: *mut nmod_mpoly_struct,
718        c: mp_limb_t,
719        exp: *const *mut fmpz,
720        ctx: *mut nmod_mpoly_ctx_struct,
721    );
722}
723extern "C" {
724    pub fn nmod_mpoly_push_term_ui_ui(
725        A: *mut nmod_mpoly_struct,
726        c: mp_limb_t,
727        exp: *const mp_limb_t,
728        ctx: *mut nmod_mpoly_ctx_struct,
729    );
730}
731extern "C" {
732    pub fn nmod_mpoly_sort_terms(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
733}
734extern "C" {
735    pub fn nmod_mpoly_combine_like_terms(
736        A: *mut nmod_mpoly_struct,
737        ctx: *mut nmod_mpoly_ctx_struct,
738    );
739}
740extern "C" {
741    pub fn nmod_mpoly_reverse(
742        A: *mut nmod_mpoly_struct,
743        B: *mut nmod_mpoly_struct,
744        ctx: *mut nmod_mpoly_ctx_struct,
745    );
746}
747extern "C" {
748    pub fn nmod_mpoly_assert_canonical(A: *mut nmod_mpoly_struct, ctx: *mut nmod_mpoly_ctx_struct);
749}
750extern "C" {
751    pub fn _nmod_mpoly_radix_sort1(
752        A: *mut nmod_mpoly_struct,
753        left: mp_limb_signed_t,
754        right: mp_limb_signed_t,
755        pos: mp_limb_t,
756        cmpmask: mp_limb_t,
757        totalmask: mp_limb_t,
758    );
759}
760extern "C" {
761    pub fn _nmod_mpoly_radix_sort(
762        A: *mut nmod_mpoly_struct,
763        left: mp_limb_signed_t,
764        right: mp_limb_signed_t,
765        pos: mp_limb_t,
766        N: mp_limb_signed_t,
767        cmpmask: *mut mp_limb_t,
768    );
769}
770extern "C" {
771    pub fn _nmod_mpoly_push_exp_ffmpz(
772        A: *mut nmod_mpoly_struct,
773        exp: *const fmpz,
774        ctx: *mut nmod_mpoly_ctx_struct,
775    );
776}
777extern "C" {
778    pub fn _nmod_mpoly_push_exp_pfmpz(
779        A: *mut nmod_mpoly_struct,
780        exp: *const *mut fmpz,
781        ctx: *mut nmod_mpoly_ctx_struct,
782    );
783}
784extern "C" {
785    pub fn _nmod_mpoly_push_exp_ui(
786        A: *mut nmod_mpoly_struct,
787        exp: *const mp_limb_t,
788        ctx: *mut nmod_mpoly_ctx_struct,
789    );
790}
791extern "C" {
792    pub fn nmod_mpoly_randtest_bounds(
793        A: *mut nmod_mpoly_struct,
794        state: *mut flint_rand_s,
795        length: mp_limb_signed_t,
796        exp_bounds: *mut mp_limb_t,
797        ctx: *mut nmod_mpoly_ctx_struct,
798    );
799}
800extern "C" {
801    pub fn nmod_mpoly_randtest_bound(
802        A: *mut nmod_mpoly_struct,
803        state: *mut flint_rand_s,
804        length: mp_limb_signed_t,
805        exp_bound: mp_limb_t,
806        ctx: *mut nmod_mpoly_ctx_struct,
807    );
808}
809extern "C" {
810    pub fn nmod_mpoly_randtest_bits(
811        A: *mut nmod_mpoly_struct,
812        state: *mut flint_rand_s,
813        length: mp_limb_signed_t,
814        exp_bits: mp_limb_t,
815        ctx: *mut nmod_mpoly_ctx_struct,
816    );
817}
818extern "C" {
819    pub fn _nmod_mpoly_get_term_ui_fmpz(
820        poly: *mut nmod_mpoly_struct,
821        exp: *const fmpz,
822        ctx: *mut nmod_mpoly_ctx_struct,
823    ) -> mp_limb_t;
824}
825extern "C" {
826    pub fn nmod_mpoly_get_term_ui_fmpz(
827        poly: *mut nmod_mpoly_struct,
828        exp: *const *mut fmpz,
829        ctx: *mut nmod_mpoly_ctx_struct,
830    ) -> mp_limb_t;
831}
832extern "C" {
833    pub fn nmod_mpoly_get_term_ui_ui(
834        poly: *mut nmod_mpoly_struct,
835        exp: *const mp_limb_t,
836        ctx: *mut nmod_mpoly_ctx_struct,
837    ) -> mp_limb_t;
838}
839extern "C" {
840    pub fn _nmod_mpoly_max_degrees(
841        max_degs: *mut mp_limb_t,
842        exps: *const mp_limb_t,
843        len: mp_limb_signed_t,
844        bits: mp_limb_signed_t,
845        n: mp_limb_signed_t,
846        deg: c_int,
847        rev: c_int,
848        N: mp_limb_signed_t,
849    );
850}
851extern "C" {
852    pub fn nmod_mpoly_max_degrees(
853        max_degs: *mut mp_limb_t,
854        poly: *mut nmod_mpoly_struct,
855        ctx: *mut nmod_mpoly_ctx_struct,
856    );
857}
858extern "C" {
859    pub fn nmod_mpoly_set_nmod(
860        poly: *mut nmod_mpoly_struct,
861        c: nmod_t,
862        ctx: *mut nmod_mpoly_ctx_struct,
863    );
864}
865extern "C" {
866    pub fn nmod_mpoly_get_coeff_ui(
867        x: nmod_t,
868        poly: *mut nmod_mpoly_struct,
869        n: mp_limb_signed_t,
870        ctx: *mut nmod_mpoly_ctx_struct,
871    ) -> mp_limb_t;
872}
873extern "C" {
874    pub fn nmod_mpoly_set_coeff_ui(
875        poly: *mut nmod_mpoly_struct,
876        n: mp_limb_signed_t,
877        x: mp_limb_t,
878        ctx: *mut nmod_mpoly_ctx_struct,
879    );
880}
881extern "C" {
882    pub fn nmod_mpoly_get_monomial(
883        exps: *mut mp_limb_t,
884        poly: *mut nmod_mpoly_struct,
885        n: mp_limb_signed_t,
886        ctx: *mut nmod_mpoly_ctx_struct,
887    );
888}
889extern "C" {
890    pub fn nmod_mpoly_set_monomial(
891        poly: *mut nmod_mpoly_struct,
892        n: mp_limb_signed_t,
893        exps: *const mp_limb_t,
894        ctx: *mut nmod_mpoly_ctx_struct,
895    );
896}
897extern "C" {
898    pub fn nmod_mpoly_add_ui(
899        A: *mut nmod_mpoly_struct,
900        B: *mut nmod_mpoly_struct,
901        c: mp_limb_t,
902        ctx: *mut nmod_mpoly_ctx_struct,
903    );
904}
905extern "C" {
906    pub fn nmod_mpoly_sub_ui(
907        A: *mut nmod_mpoly_struct,
908        B: *mut nmod_mpoly_struct,
909        c: mp_limb_t,
910        ctx: *mut nmod_mpoly_ctx_struct,
911    );
912}
913extern "C" {
914    pub fn nmod_mpoly_add(
915        A: *mut nmod_mpoly_struct,
916        B: *mut nmod_mpoly_struct,
917        C: *mut nmod_mpoly_struct,
918        ctx: *mut nmod_mpoly_ctx_struct,
919    );
920}
921extern "C" {
922    pub fn nmod_mpoly_sub(
923        A: *mut nmod_mpoly_struct,
924        B: *mut nmod_mpoly_struct,
925        C: *mut nmod_mpoly_struct,
926        ctx: *mut nmod_mpoly_ctx_struct,
927    );
928}
929extern "C" {
930    pub fn _nmod_mpoly_add(
931        coeff1: *mut mp_limb_t,
932        exp1: *mut mp_limb_t,
933        coeff2: *const mp_limb_t,
934        exp2: *const mp_limb_t,
935        len2: mp_limb_signed_t,
936        coeff3: *const mp_limb_t,
937        exp3: *const mp_limb_t,
938        len3: mp_limb_signed_t,
939        N: mp_limb_signed_t,
940        cmpmask: *const mp_limb_t,
941        fctx: nmod_t,
942    ) -> mp_limb_signed_t;
943}
944extern "C" {
945    pub fn _nmod_mpoly_sub(
946        coeff1: *mut mp_limb_t,
947        exp1: *mut mp_limb_t,
948        coeff2: *const mp_limb_t,
949        exp2: *const mp_limb_t,
950        len2: mp_limb_signed_t,
951        coeff3: *const mp_limb_t,
952        exp3: *const mp_limb_t,
953        len3: mp_limb_signed_t,
954        N: mp_limb_signed_t,
955        cmpmask: *const mp_limb_t,
956        fctx: nmod_t,
957    ) -> mp_limb_signed_t;
958}
959extern "C" {
960    pub fn nmod_mpoly_neg(
961        A: *mut nmod_mpoly_struct,
962        B: *mut nmod_mpoly_struct,
963        ctx: *mut nmod_mpoly_ctx_struct,
964    );
965}
966extern "C" {
967    pub fn nmod_mpoly_scalar_mul_ui(
968        A: *mut nmod_mpoly_struct,
969        B: *mut nmod_mpoly_struct,
970        c: mp_limb_t,
971        ctx: *mut nmod_mpoly_ctx_struct,
972    );
973}
974extern "C" {
975    pub fn nmod_mpoly_make_monic(
976        A: *mut nmod_mpoly_struct,
977        B: *mut nmod_mpoly_struct,
978        ctx: *mut nmod_mpoly_ctx_struct,
979    );
980}
981extern "C" {
982    pub fn nmod_mpoly_scalar_mul_nmod_invertible(
983        A: *mut nmod_mpoly_struct,
984        B: *mut nmod_mpoly_struct,
985        c: mp_limb_t,
986        ctx: *mut nmod_mpoly_ctx_struct,
987    );
988}
989extern "C" {
990    pub fn nmod_mpoly_scalar_addmul_ui(
991        A: *mut nmod_mpoly_struct,
992        B: *mut nmod_mpoly_struct,
993        C: *mut nmod_mpoly_struct,
994        d: mp_limb_t,
995        ctx: *mut nmod_mpoly_ctx_struct,
996    );
997}
998extern "C" {
999    pub fn nmod_mpoly_derivative(
1000        A: *mut nmod_mpoly_struct,
1001        B: *mut nmod_mpoly_struct,
1002        var: mp_limb_signed_t,
1003        ctx: *mut nmod_mpoly_ctx_struct,
1004    );
1005}
1006extern "C" {
1007    pub fn _ff_poly_pow_fmpz_is_not_feasible(length: mp_limb_signed_t, e: *mut fmpz) -> c_int;
1008}
1009extern "C" {
1010    pub fn _ff_poly_pow_ui_is_not_feasible(length: mp_limb_signed_t, e: mp_limb_t) -> c_int;
1011}
1012extern "C" {
1013    pub fn _nmod_mpoly_eval_all_ui(
1014        Acoeffs: *const mp_limb_t,
1015        Aexps: *const mp_limb_t,
1016        Alen: mp_limb_signed_t,
1017        Abits: mp_limb_t,
1018        alphas: *const mp_limb_t,
1019        mctx: *mut mpoly_ctx_struct,
1020        mod_: nmod_t,
1021    ) -> mp_limb_t;
1022}
1023extern "C" {
1024    pub fn nmod_mpoly_evaluate_all_ui(
1025        A: *mut nmod_mpoly_struct,
1026        vals: *const mp_limb_t,
1027        ctx: *mut nmod_mpoly_ctx_struct,
1028    ) -> mp_limb_t;
1029}
1030extern "C" {
1031    pub fn nmod_mpoly_evaluate_one_ui(
1032        A: *mut nmod_mpoly_struct,
1033        B: *mut nmod_mpoly_struct,
1034        var: mp_limb_signed_t,
1035        val: mp_limb_t,
1036        ctx: *mut nmod_mpoly_ctx_struct,
1037    );
1038}
1039extern "C" {
1040    pub fn nmod_mpoly_compose_nmod_poly(
1041        A: *mut nmod_poly_struct,
1042        B: *mut nmod_mpoly_struct,
1043        C: *const *mut nmod_poly_struct,
1044        ctx: *mut nmod_mpoly_ctx_struct,
1045    ) -> c_int;
1046}
1047extern "C" {
1048    pub fn _nmod_mpoly_compose_mat(
1049        A: *mut nmod_mpoly_struct,
1050        B: *mut nmod_mpoly_struct,
1051        M: *mut fmpz_mat_struct,
1052        ctxB: *mut nmod_mpoly_ctx_struct,
1053        ctxAC: *mut nmod_mpoly_ctx_struct,
1054    );
1055}
1056extern "C" {
1057    pub fn nmod_mpoly_compose_nmod_mpoly_geobucket(
1058        A: *mut nmod_mpoly_struct,
1059        B: *mut nmod_mpoly_struct,
1060        C: *const *mut nmod_mpoly_struct,
1061        ctxB: *mut nmod_mpoly_ctx_struct,
1062        ctxAC: *mut nmod_mpoly_ctx_struct,
1063    ) -> c_int;
1064}
1065extern "C" {
1066    pub fn nmod_mpoly_compose_nmod_mpoly_horner(
1067        A: *mut nmod_mpoly_struct,
1068        B: *mut nmod_mpoly_struct,
1069        C: *const *mut nmod_mpoly_struct,
1070        ctxB: *mut nmod_mpoly_ctx_struct,
1071        ctxAC: *mut nmod_mpoly_ctx_struct,
1072    ) -> c_int;
1073}
1074extern "C" {
1075    pub fn nmod_mpoly_compose_nmod_mpoly(
1076        A: *mut nmod_mpoly_struct,
1077        B: *mut nmod_mpoly_struct,
1078        C: *const *mut nmod_mpoly_struct,
1079        ctxB: *mut nmod_mpoly_ctx_struct,
1080        ctxAC: *mut nmod_mpoly_ctx_struct,
1081    ) -> c_int;
1082}
1083extern "C" {
1084    pub fn nmod_mpoly_compose_nmod_mpoly_gen(
1085        A: *mut nmod_mpoly_struct,
1086        B: *mut nmod_mpoly_struct,
1087        c: *const mp_limb_signed_t,
1088        ctxB: *mut nmod_mpoly_ctx_struct,
1089        ctxAC: *mut nmod_mpoly_ctx_struct,
1090    );
1091}
1092extern "C" {
1093    pub fn nmod_mpoly_mul(
1094        A: *mut nmod_mpoly_struct,
1095        B: *mut nmod_mpoly_struct,
1096        C: *mut nmod_mpoly_struct,
1097        ctx: *mut nmod_mpoly_ctx_struct,
1098    );
1099}
1100extern "C" {
1101    pub fn nmod_mpoly_mul_johnson(
1102        A: *mut nmod_mpoly_struct,
1103        B: *mut nmod_mpoly_struct,
1104        C: *mut nmod_mpoly_struct,
1105        ctx: *mut nmod_mpoly_ctx_struct,
1106    );
1107}
1108extern "C" {
1109    pub fn nmod_mpoly_mul_heap_threaded(
1110        A: *mut nmod_mpoly_struct,
1111        B: *mut nmod_mpoly_struct,
1112        C: *mut nmod_mpoly_struct,
1113        ctx: *mut nmod_mpoly_ctx_struct,
1114    );
1115}
1116extern "C" {
1117    pub fn nmod_mpoly_mul_array(
1118        A: *mut nmod_mpoly_struct,
1119        B: *mut nmod_mpoly_struct,
1120        C: *mut nmod_mpoly_struct,
1121        ctx: *mut nmod_mpoly_ctx_struct,
1122    ) -> c_int;
1123}
1124extern "C" {
1125    pub fn nmod_mpoly_mul_array_threaded(
1126        A: *mut nmod_mpoly_struct,
1127        B: *mut nmod_mpoly_struct,
1128        C: *mut nmod_mpoly_struct,
1129        ctx: *mut nmod_mpoly_ctx_struct,
1130    ) -> c_int;
1131}
1132extern "C" {
1133    pub fn nmod_mpoly_mul_dense(
1134        A: *mut nmod_mpoly_struct,
1135        B: *mut nmod_mpoly_struct,
1136        C: *mut nmod_mpoly_struct,
1137        ctx: *mut nmod_mpoly_ctx_struct,
1138    ) -> c_int;
1139}
1140extern "C" {
1141    pub fn _nmod_mpoly_mul_johnson(
1142        A: *mut nmod_mpoly_struct,
1143        coeff2: *const mp_limb_t,
1144        exp2: *const mp_limb_t,
1145        len2: mp_limb_signed_t,
1146        coeff3: *const mp_limb_t,
1147        exp3: *const mp_limb_t,
1148        len3: mp_limb_signed_t,
1149        bits: mp_limb_t,
1150        N: mp_limb_signed_t,
1151        cmpmask: *const mp_limb_t,
1152        fctx: nmod_t,
1153    ) -> mp_limb_signed_t;
1154}
1155extern "C" {
1156    pub fn _nmod_mpoly_mul_johnson_maxfields(
1157        A: *mut nmod_mpoly_struct,
1158        B: *mut nmod_mpoly_struct,
1159        maxBfields: *mut fmpz,
1160        C: *mut nmod_mpoly_struct,
1161        maxCfields: *mut fmpz,
1162        ctx: *mut nmod_mpoly_ctx_struct,
1163    );
1164}
1165extern "C" {
1166    pub fn _nmod_mpoly_mul_heap_threaded_pool_maxfields(
1167        A: *mut nmod_mpoly_struct,
1168        B: *mut nmod_mpoly_struct,
1169        maxBfields: *mut fmpz,
1170        C: *mut nmod_mpoly_struct,
1171        maxCfields: *mut fmpz,
1172        ctx: *mut nmod_mpoly_ctx_struct,
1173        handles: *const thread_pool_handle,
1174        num_handles: mp_limb_signed_t,
1175    );
1176}
1177extern "C" {
1178    pub fn _nmod_mpoly_mul_array_DEG(
1179        A: *mut nmod_mpoly_struct,
1180        B: *mut nmod_mpoly_struct,
1181        maxBfields: *mut fmpz,
1182        C: *mut nmod_mpoly_struct,
1183        maxCfields: *mut fmpz,
1184        ctx: *mut nmod_mpoly_ctx_struct,
1185    ) -> c_int;
1186}
1187extern "C" {
1188    pub fn _nmod_mpoly_mul_array_LEX(
1189        A: *mut nmod_mpoly_struct,
1190        B: *mut nmod_mpoly_struct,
1191        maxBfields: *mut fmpz,
1192        C: *mut nmod_mpoly_struct,
1193        maxCfields: *mut fmpz,
1194        ctx: *mut nmod_mpoly_ctx_struct,
1195    ) -> c_int;
1196}
1197extern "C" {
1198    pub fn _nmod_mpoly_mul_array_threaded_pool_DEG(
1199        A: *mut nmod_mpoly_struct,
1200        B: *mut nmod_mpoly_struct,
1201        maxBfields: *mut fmpz,
1202        C: *mut nmod_mpoly_struct,
1203        maxCfields: *mut fmpz,
1204        ctx: *mut nmod_mpoly_ctx_struct,
1205        handles: *const thread_pool_handle,
1206        num_handles: mp_limb_signed_t,
1207    ) -> c_int;
1208}
1209extern "C" {
1210    pub fn _nmod_mpoly_mul_array_threaded_pool_LEX(
1211        A: *mut nmod_mpoly_struct,
1212        B: *mut nmod_mpoly_struct,
1213        maxBfields: *mut fmpz,
1214        C: *mut nmod_mpoly_struct,
1215        maxCfields: *mut fmpz,
1216        ctx: *mut nmod_mpoly_ctx_struct,
1217        handles: *const thread_pool_handle,
1218        num_handles: mp_limb_signed_t,
1219    ) -> c_int;
1220}
1221extern "C" {
1222    pub fn _nmod_mpoly_mul_dense(
1223        P: *mut nmod_mpoly_struct,
1224        A: *mut nmod_mpoly_struct,
1225        maxAfields: *mut fmpz,
1226        B: *mut nmod_mpoly_struct,
1227        maxBfields: *mut fmpz,
1228        ctx: *mut nmod_mpoly_ctx_struct,
1229    ) -> c_int;
1230}
1231extern "C" {
1232    pub fn _nmod_mpoly_pow_rmul(
1233        A: *mut nmod_mpoly_struct,
1234        Bcoeffs: *const mp_limb_t,
1235        Bexps: *const mp_limb_t,
1236        Blen: mp_limb_signed_t,
1237        k: mp_limb_t,
1238        N: mp_limb_signed_t,
1239        cmpmask: *const mp_limb_t,
1240        mod_: nmod_t,
1241        T: *mut nmod_mpoly_struct,
1242    );
1243}
1244extern "C" {
1245    pub fn nmod_mpoly_pow_rmul(
1246        A: *mut nmod_mpoly_struct,
1247        B: *mut nmod_mpoly_struct,
1248        k: mp_limb_t,
1249        ctx: *mut nmod_mpoly_ctx_struct,
1250    );
1251}
1252extern "C" {
1253    pub fn nmod_mpoly_pow_fmpz(
1254        A: *mut nmod_mpoly_struct,
1255        B: *mut nmod_mpoly_struct,
1256        k: *mut fmpz,
1257        ctx: *mut nmod_mpoly_ctx_struct,
1258    ) -> c_int;
1259}
1260extern "C" {
1261    pub fn nmod_mpoly_pow_ui(
1262        A: *mut nmod_mpoly_struct,
1263        B: *mut nmod_mpoly_struct,
1264        k: mp_limb_t,
1265        ctx: *mut nmod_mpoly_ctx_struct,
1266    ) -> c_int;
1267}
1268extern "C" {
1269    pub fn nmod_mpoly_divides(
1270        Q: *mut nmod_mpoly_struct,
1271        A: *mut nmod_mpoly_struct,
1272        B: *mut nmod_mpoly_struct,
1273        ctx: *mut nmod_mpoly_ctx_struct,
1274    ) -> c_int;
1275}
1276extern "C" {
1277    pub fn _nmod_mpoly_divides_threaded_pool(
1278        Q: *mut nmod_mpoly_struct,
1279        A: *mut nmod_mpoly_struct,
1280        B: *mut nmod_mpoly_struct,
1281        ctx: *mut nmod_mpoly_ctx_struct,
1282        handles: *const thread_pool_handle,
1283        num_handles: mp_limb_signed_t,
1284    ) -> c_int;
1285}
1286extern "C" {
1287    pub fn nmod_mpoly_divides_monagan_pearce(
1288        Q: *mut nmod_mpoly_struct,
1289        A: *mut nmod_mpoly_struct,
1290        B: *mut nmod_mpoly_struct,
1291        ctx: *mut nmod_mpoly_ctx_struct,
1292    ) -> c_int;
1293}
1294extern "C" {
1295    pub fn nmod_mpoly_divides_heap_threaded(
1296        Q: *mut nmod_mpoly_struct,
1297        A: *mut nmod_mpoly_struct,
1298        B: *mut nmod_mpoly_struct,
1299        ctx: *mut nmod_mpoly_ctx_struct,
1300    ) -> c_int;
1301}
1302extern "C" {
1303    pub fn _nmod_mpoly_divides_heap_threaded_pool(
1304        Q: *mut nmod_mpoly_struct,
1305        A: *mut nmod_mpoly_struct,
1306        B: *mut nmod_mpoly_struct,
1307        ctx: *mut nmod_mpoly_ctx_struct,
1308        handles: *const thread_pool_handle,
1309        num_handles: mp_limb_signed_t,
1310    ) -> c_int;
1311}
1312extern "C" {
1313    pub fn nmod_mpoly_divides_dense(
1314        Q: *mut nmod_mpoly_struct,
1315        A: *mut nmod_mpoly_struct,
1316        B: *mut nmod_mpoly_struct,
1317        ctx: *mut nmod_mpoly_ctx_struct,
1318    ) -> c_int;
1319}
1320extern "C" {
1321    pub fn nmod_mpoly_div(
1322        Q: *mut nmod_mpoly_struct,
1323        A: *mut nmod_mpoly_struct,
1324        B: *mut nmod_mpoly_struct,
1325        ctx: *mut nmod_mpoly_ctx_struct,
1326    );
1327}
1328extern "C" {
1329    pub fn nmod_mpoly_divrem(
1330        Q: *mut nmod_mpoly_struct,
1331        R: *mut nmod_mpoly_struct,
1332        A: *mut nmod_mpoly_struct,
1333        B: *mut nmod_mpoly_struct,
1334        ctx: *mut nmod_mpoly_ctx_struct,
1335    );
1336}
1337extern "C" {
1338    pub fn nmod_mpoly_divrem_ideal(
1339        Q: *mut *mut nmod_mpoly_struct,
1340        R: *mut nmod_mpoly_struct,
1341        A: *mut nmod_mpoly_struct,
1342        B: *const *mut nmod_mpoly_struct,
1343        len: mp_limb_signed_t,
1344        ctx: *mut nmod_mpoly_ctx_struct,
1345    );
1346}
1347extern "C" {
1348    pub fn nmod_mpoly_divexact(
1349        Q: *mut nmod_mpoly_struct,
1350        A: *mut nmod_mpoly_struct,
1351        B: *mut nmod_mpoly_struct,
1352        ctx: *mut nmod_mpoly_ctx_struct,
1353    );
1354}
1355extern "C" {
1356    pub fn _nmod_mpoly_divides_monagan_pearce(
1357        Q: *mut nmod_mpoly_struct,
1358        coeff2: *const mp_limb_t,
1359        exp2: *const mp_limb_t,
1360        len2: mp_limb_signed_t,
1361        coeff3: *const mp_limb_t,
1362        exp3: *const mp_limb_t,
1363        len3: mp_limb_signed_t,
1364        bits: mp_limb_t,
1365        N: mp_limb_signed_t,
1366        cmpmask: *const mp_limb_t,
1367        fctx: nmod_t,
1368    ) -> c_int;
1369}
1370extern "C" {
1371    pub fn nmod_mpoly_div_monagan_pearce(
1372        Q: *mut nmod_mpoly_struct,
1373        A: *mut nmod_mpoly_struct,
1374        B: *mut nmod_mpoly_struct,
1375        ctx: *mut nmod_mpoly_ctx_struct,
1376    );
1377}
1378extern "C" {
1379    pub fn nmod_mpoly_divrem_monagan_pearce(
1380        q: *mut nmod_mpoly_struct,
1381        r: *mut nmod_mpoly_struct,
1382        poly2: *mut nmod_mpoly_struct,
1383        poly3: *mut nmod_mpoly_struct,
1384        ctx: *mut nmod_mpoly_ctx_struct,
1385    );
1386}
1387extern "C" {
1388    pub fn nmod_mpoly_divrem_ideal_monagan_pearce(
1389        Q: *mut *mut nmod_mpoly_struct,
1390        R: *mut nmod_mpoly_struct,
1391        A: *mut nmod_mpoly_struct,
1392        B: *const *mut nmod_mpoly_struct,
1393        len: mp_limb_signed_t,
1394        ctx: *mut nmod_mpoly_ctx_struct,
1395    );
1396}
1397extern "C" {
1398    pub fn nmod_mpoly_sqrt_heap(
1399        Q: *mut nmod_mpoly_struct,
1400        A: *mut nmod_mpoly_struct,
1401        ctx: *mut nmod_mpoly_ctx_struct,
1402    ) -> c_int;
1403}
1404extern "C" {
1405    pub fn nmod_mpoly_sqrt(
1406        Q: *mut nmod_mpoly_struct,
1407        A: *mut nmod_mpoly_struct,
1408        ctx: *mut nmod_mpoly_ctx_struct,
1409    ) -> c_int;
1410}
1411extern "C" {
1412    pub fn nmod_mpoly_is_square(
1413        A: *mut nmod_mpoly_struct,
1414        ctx: *mut nmod_mpoly_ctx_struct,
1415    ) -> c_int;
1416}
1417extern "C" {
1418    pub fn nmod_mpoly_quadratic_root(
1419        Q: *mut nmod_mpoly_struct,
1420        A: *mut nmod_mpoly_struct,
1421        B: *mut nmod_mpoly_struct,
1422        ctx: *mut nmod_mpoly_ctx_struct,
1423    ) -> c_int;
1424}
1425extern "C" {
1426    pub fn nmod_mpoly_term_content(
1427        M: *mut nmod_mpoly_struct,
1428        A: *mut nmod_mpoly_struct,
1429        ctx: *mut nmod_mpoly_ctx_struct,
1430    );
1431}
1432extern "C" {
1433    pub fn nmod_mpoly_content_vars(
1434        g: *mut nmod_mpoly_struct,
1435        A: *mut nmod_mpoly_struct,
1436        vars: *mut mp_limb_signed_t,
1437        vars_length: mp_limb_signed_t,
1438        ctx: *mut nmod_mpoly_ctx_struct,
1439    ) -> c_int;
1440}
1441extern "C" {
1442    pub fn nmod_mpoly_gcd(
1443        G: *mut nmod_mpoly_struct,
1444        A: *mut nmod_mpoly_struct,
1445        B: *mut nmod_mpoly_struct,
1446        ctx: *mut nmod_mpoly_ctx_struct,
1447    ) -> c_int;
1448}
1449extern "C" {
1450    pub fn _nmod_mpoly_gcd_algo_small(
1451        G: *mut nmod_mpoly_struct,
1452        Abar: *mut nmod_mpoly_struct,
1453        Bbar: *mut nmod_mpoly_struct,
1454        A: *mut nmod_mpoly_struct,
1455        B: *mut nmod_mpoly_struct,
1456        ctx: *mut nmod_mpoly_ctx_struct,
1457        algo: c_uint,
1458    ) -> c_int;
1459}
1460extern "C" {
1461    pub fn _nmod_mpoly_gcd_algo(
1462        G: *mut nmod_mpoly_struct,
1463        Abar: *mut nmod_mpoly_struct,
1464        Bbar: *mut nmod_mpoly_struct,
1465        A: *mut nmod_mpoly_struct,
1466        B: *mut nmod_mpoly_struct,
1467        ctx: *mut nmod_mpoly_ctx_struct,
1468        algo: c_uint,
1469    ) -> c_int;
1470}
1471extern "C" {
1472    pub fn nmod_mpoly_gcd_cofactors(
1473        G: *mut nmod_mpoly_struct,
1474        Abar: *mut nmod_mpoly_struct,
1475        Bbar: *mut nmod_mpoly_struct,
1476        A: *mut nmod_mpoly_struct,
1477        B: *mut nmod_mpoly_struct,
1478        ctx: *mut nmod_mpoly_ctx_struct,
1479    ) -> c_int;
1480}
1481extern "C" {
1482    pub fn nmod_mpoly_gcd_brown(
1483        G: *mut nmod_mpoly_struct,
1484        A: *mut nmod_mpoly_struct,
1485        B: *mut nmod_mpoly_struct,
1486        ctx: *mut nmod_mpoly_ctx_struct,
1487    ) -> c_int;
1488}
1489extern "C" {
1490    pub fn nmod_mpoly_gcd_hensel(
1491        G: *mut nmod_mpoly_struct,
1492        A: *mut nmod_mpoly_struct,
1493        B: *mut nmod_mpoly_struct,
1494        ctx: *mut nmod_mpoly_ctx_struct,
1495    ) -> c_int;
1496}
1497extern "C" {
1498    pub fn nmod_mpoly_gcd_zippel(
1499        G: *mut nmod_mpoly_struct,
1500        A: *mut nmod_mpoly_struct,
1501        B: *mut nmod_mpoly_struct,
1502        ctx: *mut nmod_mpoly_ctx_struct,
1503    ) -> c_int;
1504}
1505extern "C" {
1506    pub fn nmod_mpoly_gcd_zippel2(
1507        G: *mut nmod_mpoly_struct,
1508        A: *mut nmod_mpoly_struct,
1509        B: *mut nmod_mpoly_struct,
1510        ctx: *mut nmod_mpoly_ctx_struct,
1511    ) -> c_int;
1512}
1513extern "C" {
1514    pub fn nmod_mpoly_deflation(
1515        shift: *mut fmpz,
1516        stride: *mut fmpz,
1517        A: *mut nmod_mpoly_struct,
1518        ctx: *mut nmod_mpoly_ctx_struct,
1519    );
1520}
1521extern "C" {
1522    pub fn nmod_mpoly_deflate(
1523        A: *mut nmod_mpoly_struct,
1524        B: *mut nmod_mpoly_struct,
1525        shift: *const fmpz,
1526        stride: *const fmpz,
1527        ctx: *mut nmod_mpoly_ctx_struct,
1528    );
1529}
1530extern "C" {
1531    pub fn nmod_mpoly_inflate(
1532        A: *mut nmod_mpoly_struct,
1533        B: *mut nmod_mpoly_struct,
1534        shift: *const fmpz,
1535        stride: *const fmpz,
1536        ctx: *mut nmod_mpoly_ctx_struct,
1537    );
1538}
1539extern "C" {
1540    pub fn mpoly_void_ring_init_nmod_mpoly_ctx(
1541        R: *mut _bindgen_ty_22,
1542        ctx: *mut nmod_mpoly_ctx_struct,
1543    );
1544}
1545extern "C" {
1546    pub fn nmod_mpolyl_lead_coeff(
1547        c: *mut nmod_mpoly_struct,
1548        A: *mut nmod_mpoly_struct,
1549        num_vars: mp_limb_signed_t,
1550        ctx: *mut nmod_mpoly_ctx_struct,
1551    );
1552}
1553extern "C" {
1554    pub fn nmod_mpolyl_content(
1555        g: *mut nmod_mpoly_struct,
1556        A: *mut nmod_mpoly_struct,
1557        num_vars: mp_limb_signed_t,
1558        ctx: *mut nmod_mpoly_ctx_struct,
1559    ) -> c_int;
1560}
1561extern "C" {
1562    pub fn _nmod_mpoly_to_nmod_poly_deflate(
1563        A: *mut nmod_poly_struct,
1564        B: *mut nmod_mpoly_struct,
1565        var: mp_limb_signed_t,
1566        Bshift: *const mp_limb_t,
1567        Bstride: *const mp_limb_t,
1568        ctx: *mut nmod_mpoly_ctx_struct,
1569    );
1570}
1571extern "C" {
1572    pub fn _nmod_mpoly_from_nmod_poly_inflate(
1573        A: *mut nmod_mpoly_struct,
1574        Abits: mp_limb_t,
1575        B: *mut nmod_poly_struct,
1576        var: mp_limb_signed_t,
1577        Ashift: *const mp_limb_t,
1578        Astride: *const mp_limb_t,
1579        ctx: *mut nmod_mpoly_ctx_struct,
1580    );
1581}
1582extern "C" {
1583    pub fn nmod_mpoly_repack_bits(
1584        A: *mut nmod_mpoly_struct,
1585        B: *mut nmod_mpoly_struct,
1586        Abits: mp_limb_t,
1587        ctx: *mut nmod_mpoly_ctx_struct,
1588    ) -> c_int;
1589}
1590extern "C" {
1591    pub fn nmod_mpoly_repack_bits_inplace(
1592        A: *mut nmod_mpoly_struct,
1593        Abits: mp_limb_t,
1594        ctx: *mut nmod_mpoly_ctx_struct,
1595    ) -> c_int;
1596}
1597#[repr(C)]
1598#[derive(Debug, Copy, Clone)]
1599pub struct nmod_mpolyd_ctx_struct {
1600    pub nvars: mp_limb_signed_t,
1601    pub perm: *mut mp_limb_signed_t,
1602}
1603pub type nmod_mpolyd_ctx_t = [nmod_mpolyd_ctx_struct; 1usize];
1604#[repr(C)]
1605#[derive(Debug, Copy, Clone)]
1606pub struct _nmod_mpoly_stripe_struct {
1607    pub big_mem: *mut c_char,
1608    pub big_mem_alloc: mp_limb_signed_t,
1609    pub ctx: *const nmod_mpoly_ctx_struct,
1610    pub N: mp_limb_signed_t,
1611    pub bits: mp_limb_t,
1612    pub mod_: nmod_t,
1613    pub lc_minus_inv: mp_limb_t,
1614    pub cmpmask: *const mp_limb_t,
1615    pub startidx: *mut mp_limb_signed_t,
1616    pub endidx: *mut mp_limb_signed_t,
1617    pub emin: *mut mp_limb_t,
1618    pub emax: *mut mp_limb_t,
1619    pub upperclosed: c_int,
1620}
1621pub type nmod_mpoly_stripe_struct = _nmod_mpoly_stripe_struct;
1622pub type nmod_mpoly_stripe_t = [nmod_mpoly_stripe_struct; 1usize];
1623extern "C" {
1624    pub fn nmod_mpoly_univar_init(
1625        A: *mut nmod_mpoly_univar_struct,
1626        ctx: *mut nmod_mpoly_ctx_struct,
1627    );
1628}
1629extern "C" {
1630    pub fn nmod_mpoly_univar_clear(
1631        A: *mut nmod_mpoly_univar_struct,
1632        ctx: *mut nmod_mpoly_ctx_struct,
1633    );
1634}
1635extern "C" {
1636    pub fn nmod_mpoly_univar_fit_length(
1637        A: *mut nmod_mpoly_univar_struct,
1638        length: mp_limb_signed_t,
1639        ctx: *mut nmod_mpoly_ctx_struct,
1640    );
1641}
1642extern "C" {
1643    pub fn nmod_mpoly_univar_print_pretty(
1644        A: *mut nmod_mpoly_univar_struct,
1645        x: *mut *const c_char,
1646        ctx: *mut nmod_mpoly_ctx_struct,
1647    );
1648}
1649extern "C" {
1650    pub fn nmod_mpoly_univar_assert_canonical(
1651        A: *mut nmod_mpoly_univar_struct,
1652        ctx: *mut nmod_mpoly_ctx_struct,
1653    );
1654}
1655extern "C" {
1656    pub fn nmod_mpoly_univar_zero(
1657        A: *mut nmod_mpoly_univar_struct,
1658        ctx: *mut nmod_mpoly_ctx_struct,
1659    );
1660}
1661extern "C" {
1662    pub fn nmod_mpoly_univar_set_coeff_ui(
1663        A: *mut nmod_mpoly_univar_struct,
1664        e: mp_limb_t,
1665        c: *mut nmod_mpoly_struct,
1666        ctx: *mut nmod_mpoly_ctx_struct,
1667    );
1668}
1669extern "C" {
1670    pub fn nmod_mpoly_to_univar(
1671        A: *mut nmod_mpoly_univar_struct,
1672        B: *mut nmod_mpoly_struct,
1673        var: mp_limb_signed_t,
1674        ctx: *mut nmod_mpoly_ctx_struct,
1675    );
1676}
1677extern "C" {
1678    pub fn _nmod_mpoly_from_univar(
1679        A: *mut nmod_mpoly_struct,
1680        Abits: mp_limb_t,
1681        B: *mut nmod_mpoly_univar_struct,
1682        var: mp_limb_signed_t,
1683        ctx: *mut nmod_mpoly_ctx_struct,
1684    );
1685}
1686extern "C" {
1687    pub fn nmod_mpoly_from_univar(
1688        A: *mut nmod_mpoly_struct,
1689        B: *mut nmod_mpoly_univar_struct,
1690        var: mp_limb_signed_t,
1691        ctx: *mut nmod_mpoly_ctx_struct,
1692    );
1693}
1694extern "C" {
1695    pub fn nmod_mpoly_univar_swap(
1696        A: *mut nmod_mpoly_univar_struct,
1697        B: *mut nmod_mpoly_univar_struct,
1698        ctx: *mut nmod_mpoly_ctx_struct,
1699    );
1700}
1701extern "C" {
1702    pub fn nmod_mpoly_univar_degree_fits_si(
1703        A: *mut nmod_mpoly_univar_struct,
1704        ctx: *mut nmod_mpoly_ctx_struct,
1705    ) -> c_int;
1706}
1707extern "C" {
1708    pub fn nmod_mpoly_univar_length(
1709        A: *mut nmod_mpoly_univar_struct,
1710        ctx: *mut nmod_mpoly_ctx_struct,
1711    ) -> mp_limb_signed_t;
1712}
1713extern "C" {
1714    pub fn nmod_mpoly_univar_get_term_exp_si(
1715        A: *mut nmod_mpoly_univar_struct,
1716        i: mp_limb_signed_t,
1717        ctx: *mut nmod_mpoly_ctx_struct,
1718    ) -> mp_limb_signed_t;
1719}
1720extern "C" {
1721    pub fn nmod_mpoly_univar_get_term_coeff(
1722        c: *mut nmod_mpoly_struct,
1723        A: *mut nmod_mpoly_univar_struct,
1724        i: mp_limb_signed_t,
1725        ctx: *mut nmod_mpoly_ctx_struct,
1726    );
1727}
1728extern "C" {
1729    pub fn nmod_mpoly_univar_swap_term_coeff(
1730        c: *mut nmod_mpoly_struct,
1731        A: *mut nmod_mpoly_univar_struct,
1732        i: mp_limb_signed_t,
1733        ctx: *mut nmod_mpoly_ctx_struct,
1734    );
1735}
1736extern "C" {
1737    pub fn nmod_mpoly_univar_pseudo_gcd(
1738        Gx: *mut nmod_mpoly_univar_struct,
1739        Ax: *mut nmod_mpoly_univar_struct,
1740        Bx: *mut nmod_mpoly_univar_struct,
1741        ctx: *mut nmod_mpoly_ctx_struct,
1742    ) -> c_int;
1743}
1744extern "C" {
1745    pub fn nmod_mpoly_univar_resultant(
1746        R: *mut nmod_mpoly_struct,
1747        Ax: *mut nmod_mpoly_univar_struct,
1748        Bx: *mut nmod_mpoly_univar_struct,
1749        ctx: *mut nmod_mpoly_ctx_struct,
1750    ) -> c_int;
1751}
1752extern "C" {
1753    pub fn nmod_mpoly_univar_discriminant(
1754        D: *mut nmod_mpoly_struct,
1755        Fx: *mut nmod_mpoly_univar_struct,
1756        ctx: *mut nmod_mpoly_ctx_struct,
1757    ) -> c_int;
1758}
1759extern "C" {
1760    pub fn nmod_mpoly_resultant(
1761        R: *mut nmod_mpoly_struct,
1762        A: *mut nmod_mpoly_struct,
1763        B: *mut nmod_mpoly_struct,
1764        var: mp_limb_signed_t,
1765        ctx: *mut nmod_mpoly_ctx_struct,
1766    ) -> c_int;
1767}
1768extern "C" {
1769    pub fn nmod_mpoly_discriminant(
1770        R: *mut nmod_mpoly_struct,
1771        A: *mut nmod_mpoly_struct,
1772        var: mp_limb_signed_t,
1773        ctx: *mut nmod_mpoly_ctx_struct,
1774    ) -> c_int;
1775}
1776extern "C" {
1777    pub fn _nmod_mpoly_mul_array_chunked_LEX(
1778        P: *mut nmod_mpoly_struct,
1779        A: *mut nmod_mpoly_struct,
1780        B: *mut nmod_mpoly_struct,
1781        mults: *const mp_limb_t,
1782        ctx: *mut nmod_mpoly_ctx_struct,
1783    );
1784}
1785extern "C" {
1786    pub fn _nmod_mpoly_mul_array_chunked_DEG(
1787        P: *mut nmod_mpoly_struct,
1788        A: *mut nmod_mpoly_struct,
1789        B: *mut nmod_mpoly_struct,
1790        degb: mp_limb_t,
1791        ctx: *mut nmod_mpoly_ctx_struct,
1792    );
1793}
1794extern "C" {
1795    pub fn _nmod_mpoly_addmul_array1_ulong1(
1796        poly1: *mut mp_limb_t,
1797        poly2: *const mp_limb_t,
1798        exp2: *const mp_limb_t,
1799        len2: mp_limb_signed_t,
1800        poly3: *const mp_limb_t,
1801        exp3: *const mp_limb_t,
1802        len3: mp_limb_signed_t,
1803    );
1804}
1805extern "C" {
1806    pub fn _nmod_mpoly_addmul_array1_ulong2(
1807        poly1: *mut mp_limb_t,
1808        poly2: *const mp_limb_t,
1809        exp2: *const mp_limb_t,
1810        len2: mp_limb_signed_t,
1811        poly3: *const mp_limb_t,
1812        exp3: *const mp_limb_t,
1813        len3: mp_limb_signed_t,
1814    );
1815}
1816extern "C" {
1817    pub fn _nmod_mpoly_addmul_array1_ulong3(
1818        poly1: *mut mp_limb_t,
1819        poly2: *const mp_limb_t,
1820        exp2: *const mp_limb_t,
1821        len2: mp_limb_signed_t,
1822        poly3: *const mp_limb_t,
1823        exp3: *const mp_limb_t,
1824        len3: mp_limb_signed_t,
1825    );
1826}
1827extern "C" {
1828    pub fn nmod_mpoly_append_array_sm1_LEX(
1829        P: *mut nmod_mpoly_struct,
1830        Plen: mp_limb_signed_t,
1831        coeff_array: *mut mp_limb_t,
1832        mults: *const mp_limb_t,
1833        num: mp_limb_signed_t,
1834        array_size: mp_limb_signed_t,
1835        top: mp_limb_signed_t,
1836        ctx: *mut nmod_mpoly_ctx_struct,
1837    ) -> mp_limb_signed_t;
1838}
1839extern "C" {
1840    pub fn nmod_mpoly_append_array_sm2_LEX(
1841        P: *mut nmod_mpoly_struct,
1842        Plen: mp_limb_signed_t,
1843        coeff_array: *mut mp_limb_t,
1844        mults: *const mp_limb_t,
1845        num: mp_limb_signed_t,
1846        array_size: mp_limb_signed_t,
1847        top: mp_limb_signed_t,
1848        ctx: *mut nmod_mpoly_ctx_struct,
1849    ) -> mp_limb_signed_t;
1850}
1851extern "C" {
1852    pub fn nmod_mpoly_append_array_sm3_LEX(
1853        P: *mut nmod_mpoly_struct,
1854        Plen: mp_limb_signed_t,
1855        coeff_array: *mut mp_limb_t,
1856        mults: *const mp_limb_t,
1857        num: mp_limb_signed_t,
1858        array_size: mp_limb_signed_t,
1859        top: mp_limb_signed_t,
1860        ctx: *mut nmod_mpoly_ctx_struct,
1861    ) -> mp_limb_signed_t;
1862}
1863extern "C" {
1864    pub fn nmod_mpoly_append_array_sm1_DEGLEX(
1865        P: *mut nmod_mpoly_struct,
1866        Plen: mp_limb_signed_t,
1867        coeff_array: *mut mp_limb_t,
1868        top: mp_limb_signed_t,
1869        nvars: mp_limb_signed_t,
1870        degb: mp_limb_signed_t,
1871        ctx: *mut nmod_mpoly_ctx_struct,
1872    ) -> mp_limb_signed_t;
1873}
1874extern "C" {
1875    pub fn nmod_mpoly_append_array_sm2_DEGLEX(
1876        P: *mut nmod_mpoly_struct,
1877        Plen: mp_limb_signed_t,
1878        coeff_array: *mut mp_limb_t,
1879        top: mp_limb_signed_t,
1880        nvars: mp_limb_signed_t,
1881        degb: mp_limb_signed_t,
1882        ctx: *mut nmod_mpoly_ctx_struct,
1883    ) -> mp_limb_signed_t;
1884}
1885extern "C" {
1886    pub fn nmod_mpoly_append_array_sm3_DEGLEX(
1887        P: *mut nmod_mpoly_struct,
1888        Plen: mp_limb_signed_t,
1889        coeff_array: *mut mp_limb_t,
1890        top: mp_limb_signed_t,
1891        nvars: mp_limb_signed_t,
1892        degb: mp_limb_signed_t,
1893        ctx: *mut nmod_mpoly_ctx_struct,
1894    ) -> mp_limb_signed_t;
1895}
1896extern "C" {
1897    pub fn nmod_mpoly_append_array_sm1_DEGREVLEX(
1898        P: *mut nmod_mpoly_struct,
1899        Plen: mp_limb_signed_t,
1900        coeff_array: *mut mp_limb_t,
1901        top: mp_limb_signed_t,
1902        nvars: mp_limb_signed_t,
1903        degb: mp_limb_signed_t,
1904        ctx: *mut nmod_mpoly_ctx_struct,
1905    ) -> mp_limb_signed_t;
1906}
1907extern "C" {
1908    pub fn nmod_mpoly_append_array_sm2_DEGREVLEX(
1909        P: *mut nmod_mpoly_struct,
1910        Plen: mp_limb_signed_t,
1911        coeff_array: *mut mp_limb_t,
1912        top: mp_limb_signed_t,
1913        nvars: mp_limb_signed_t,
1914        degb: mp_limb_signed_t,
1915        ctx: *mut nmod_mpoly_ctx_struct,
1916    ) -> mp_limb_signed_t;
1917}
1918extern "C" {
1919    pub fn nmod_mpoly_append_array_sm3_DEGREVLEX(
1920        P: *mut nmod_mpoly_struct,
1921        Plen: mp_limb_signed_t,
1922        coeff_array: *mut mp_limb_t,
1923        top: mp_limb_signed_t,
1924        nvars: mp_limb_signed_t,
1925        degb: mp_limb_signed_t,
1926        ctx: *mut nmod_mpoly_ctx_struct,
1927    ) -> mp_limb_signed_t;
1928}
1929extern "C" {
1930    pub fn nmod_mpolyd_ctx_init(dctx: *mut nmod_mpolyd_ctx_struct, nvars: mp_limb_signed_t);
1931}
1932extern "C" {
1933    pub fn nmod_mpolyd_ctx_clear(dctx: *mut nmod_mpolyd_ctx_struct);
1934}
1935extern "C" {
1936    pub fn nmod_mpolyd_swap(poly1: *mut nmod_mpolyd_struct, poly2: *mut nmod_mpolyd_struct);
1937}
1938extern "C" {
1939    pub fn nmod_mpolyd_set_degbounds(
1940        A: *mut nmod_mpolyd_struct,
1941        bounds: *mut mp_limb_signed_t,
1942    ) -> c_int;
1943}
1944extern "C" {
1945    pub fn nmod_mpolyd_set_degbounds_perm(
1946        A: *mut nmod_mpolyd_struct,
1947        dctx: *mut nmod_mpolyd_ctx_struct,
1948        bounds: *mut mp_limb_signed_t,
1949    ) -> c_int;
1950}
1951extern "C" {
1952    pub fn nmod_mpoly_convert_to_nmod_mpolyd(
1953        A: *mut nmod_mpolyd_struct,
1954        dctx: *mut nmod_mpolyd_ctx_struct,
1955        B: *mut nmod_mpoly_struct,
1956        ctx: *mut nmod_mpoly_ctx_struct,
1957    );
1958}
1959extern "C" {
1960    pub fn nmod_mpoly_convert_to_nmod_mpolyd_degbound(
1961        A: *mut nmod_mpolyd_struct,
1962        dctx: *mut nmod_mpolyd_ctx_struct,
1963        B: *mut nmod_mpoly_struct,
1964        ctx: *mut nmod_mpoly_ctx_struct,
1965    );
1966}
1967extern "C" {
1968    pub fn nmod_mpoly_convert_from_nmod_mpolyd(
1969        A: *mut nmod_mpoly_struct,
1970        ctx: *mut nmod_mpoly_ctx_struct,
1971        B: *mut nmod_mpolyd_struct,
1972        dctx: *mut nmod_mpolyd_ctx_struct,
1973    );
1974}
1975extern "C" {
1976    pub fn nmod_mpolyd_init(poly: *mut nmod_mpolyd_struct, nvars: mp_limb_signed_t);
1977}
1978extern "C" {
1979    pub fn nmod_mpolyd_fit_length(poly: *mut nmod_mpolyd_struct, len: mp_limb_signed_t);
1980}
1981extern "C" {
1982    pub fn nmod_mpolyd_zero(poly: *mut nmod_mpolyd_struct);
1983}
1984extern "C" {
1985    pub fn nmod_mpolyd_set_nvars(poly: *mut nmod_mpolyd_struct, nvars: mp_limb_signed_t);
1986}
1987extern "C" {
1988    pub fn nmod_mpolyd_set(A: *mut nmod_mpolyd_struct, B: *mut nmod_mpolyd_struct);
1989}
1990extern "C" {
1991    pub fn nmod_mpolyd_clear(poly: *mut nmod_mpolyd_struct);
1992}
1993extern "C" {
1994    pub fn nmod_mpolyd_print(poly: *mut nmod_mpolyd_struct);
1995}
1996extern "C" {
1997    pub fn nmod_mpolyd_length(A: *mut nmod_mpolyd_struct) -> mp_limb_signed_t;
1998}
1999extern "C" {
2000    pub fn nmod_mpolyu_init(
2001        A: *mut nmod_mpolyu_struct,
2002        bits: mp_limb_t,
2003        ctx: *mut nmod_mpoly_ctx_struct,
2004    );
2005}
2006extern "C" {
2007    pub fn nmod_mpolyu_clear(A: *mut nmod_mpolyu_struct, uctx: *mut nmod_mpoly_ctx_struct);
2008}
2009extern "C" {
2010    pub fn nmod_mpolyu_swap(
2011        A: *mut nmod_mpolyu_struct,
2012        B: *mut nmod_mpolyu_struct,
2013        uctx: *mut nmod_mpoly_ctx_struct,
2014    );
2015}
2016extern "C" {
2017    pub fn nmod_mpolyu_zero(A: *mut nmod_mpolyu_struct, uctx: *mut nmod_mpoly_ctx_struct);
2018}
2019extern "C" {
2020    pub fn nmod_mpolyu_is_one(
2021        A: *mut nmod_mpolyu_struct,
2022        uctx: *mut nmod_mpoly_ctx_struct,
2023    ) -> c_int;
2024}
2025extern "C" {
2026    pub fn nmod_mpolyu_print_pretty(
2027        poly: *mut nmod_mpolyu_struct,
2028        x: *mut *const c_char,
2029        ctx: *mut nmod_mpoly_ctx_struct,
2030    );
2031}
2032extern "C" {
2033    pub fn nmod_mpolyu_fit_length(
2034        A: *mut nmod_mpolyu_struct,
2035        length: mp_limb_signed_t,
2036        uctx: *mut nmod_mpoly_ctx_struct,
2037    );
2038}
2039extern "C" {
2040    pub fn nmod_mpolyu_one(A: *mut nmod_mpolyu_struct, uctx: *mut nmod_mpoly_ctx_struct);
2041}
2042extern "C" {
2043    pub fn nmod_mpolyu_degrees_si(
2044        degs: *mut mp_limb_signed_t,
2045        A: *mut nmod_mpolyu_struct,
2046        ctx: *mut nmod_mpoly_ctx_struct,
2047    );
2048}
2049extern "C" {
2050    pub fn nmod_mpolyu_repack_bits_inplace(
2051        A: *mut nmod_mpolyu_struct,
2052        bits: mp_limb_t,
2053        ctx: *mut nmod_mpoly_ctx_struct,
2054    );
2055}
2056extern "C" {
2057    pub fn _nmod_mpolyu_get_coeff(
2058        A: *mut nmod_mpolyu_struct,
2059        pow: mp_limb_t,
2060        uctx: *mut nmod_mpoly_ctx_struct,
2061    ) -> *mut nmod_mpoly_struct;
2062}
2063extern "C" {
2064    pub fn nmod_mpolyu_shift_right(A: *mut nmod_mpolyu_struct, s: mp_limb_t);
2065}
2066extern "C" {
2067    pub fn nmod_mpolyu_shift_left(A: *mut nmod_mpolyu_struct, s: mp_limb_t);
2068}
2069extern "C" {
2070    pub fn nmod_mpolyu_content_mpoly(
2071        g: *mut nmod_mpoly_struct,
2072        A: *mut nmod_mpolyu_struct,
2073        ctx: *mut nmod_mpoly_ctx_struct,
2074    ) -> c_int;
2075}
2076extern "C" {
2077    pub fn nmod_mpolyu_scalar_mul_nmod(
2078        A: *mut nmod_mpolyu_struct,
2079        c: mp_limb_t,
2080        ctx: *mut nmod_mpoly_ctx_struct,
2081    );
2082}
2083extern "C" {
2084    pub fn nmod_mpolyu_set(
2085        A: *mut nmod_mpolyu_struct,
2086        B: *mut nmod_mpolyu_struct,
2087        uctx: *mut nmod_mpoly_ctx_struct,
2088    );
2089}
2090extern "C" {
2091    pub fn nmod_mpolyu_cvtto_poly(
2092        a: *mut nmod_poly_struct,
2093        A: *mut nmod_mpolyu_struct,
2094        ctx: *mut nmod_mpoly_ctx_struct,
2095    );
2096}
2097extern "C" {
2098    pub fn nmod_mpolyu_cvtfrom_poly(
2099        A: *mut nmod_mpolyu_struct,
2100        a: *mut nmod_poly_struct,
2101        ctx: *mut nmod_mpoly_ctx_struct,
2102    );
2103}
2104extern "C" {
2105    pub fn nmod_mpolyu_cvtfrom_poly_notmain(
2106        A: *mut nmod_mpolyu_struct,
2107        a: *mut nmod_poly_struct,
2108        var: mp_limb_signed_t,
2109        ctx: *mut nmod_mpoly_ctx_struct,
2110    );
2111}
2112extern "C" {
2113    pub fn nmod_mpoly_to_mpolyu_perm_deflate_threaded_pool(
2114        A: *mut nmod_mpolyu_struct,
2115        uctx: *mut nmod_mpoly_ctx_struct,
2116        B: *mut nmod_mpoly_struct,
2117        ctx: *mut nmod_mpoly_ctx_struct,
2118        perm: *const mp_limb_signed_t,
2119        shift: *const mp_limb_t,
2120        stride: *const mp_limb_t,
2121        handles: *const thread_pool_handle,
2122        num_handles: mp_limb_signed_t,
2123    );
2124}
2125extern "C" {
2126    pub fn nmod_mpoly_from_mpolyu_perm_inflate(
2127        A: *mut nmod_mpoly_struct,
2128        Abits: mp_limb_t,
2129        ctx: *mut nmod_mpoly_ctx_struct,
2130        B: *mut nmod_mpolyu_struct,
2131        uctx: *mut nmod_mpoly_ctx_struct,
2132        perm: *const mp_limb_signed_t,
2133        shift: *const mp_limb_t,
2134        stride: *const mp_limb_t,
2135    );
2136}
2137extern "C" {
2138    pub fn nmod_mpolyuu_divides(
2139        Q: *mut nmod_mpolyu_struct,
2140        A: *mut nmod_mpolyu_struct,
2141        B: *mut nmod_mpolyu_struct,
2142        nmainvars: mp_limb_signed_t,
2143        ctx: *mut nmod_mpoly_ctx_struct,
2144    ) -> c_int;
2145}
2146extern "C" {
2147    pub fn nmod_mpolyu_divexact_mpoly_inplace(
2148        A: *mut nmod_mpolyu_struct,
2149        c: *mut nmod_mpoly_struct,
2150        ctx: *mut nmod_mpoly_ctx_struct,
2151    );
2152}
2153extern "C" {
2154    pub fn nmod_mpolyu_mul_mpoly(
2155        A: *mut nmod_mpolyu_struct,
2156        B: *mut nmod_mpolyu_struct,
2157        c: *mut nmod_mpoly_struct,
2158        ctx: *mut nmod_mpoly_ctx_struct,
2159    );
2160}
2161extern "C" {
2162    pub fn nmod_mpolyu_mul_mpoly_inplace(
2163        A: *mut nmod_mpolyu_struct,
2164        c: *mut nmod_mpoly_struct,
2165        ctx: *mut nmod_mpoly_ctx_struct,
2166    );
2167}
2168extern "C" {
2169    pub fn nmod_mpolyu_setform(
2170        A: *mut nmod_mpolyu_struct,
2171        B: *mut nmod_mpolyu_struct,
2172        ctx: *mut nmod_mpoly_ctx_struct,
2173    );
2174}
2175extern "C" {
2176    pub fn nmod_mpolyu_gcdm_zippel(
2177        G: *mut nmod_mpolyu_struct,
2178        Abar: *mut nmod_mpolyu_struct,
2179        Bbar: *mut nmod_mpolyu_struct,
2180        A: *mut nmod_mpolyu_struct,
2181        B: *mut nmod_mpolyu_struct,
2182        ctx: *mut nmod_mpoly_ctx_struct,
2183        randstate: *mut flint_rand_s,
2184    ) -> c_int;
2185}
2186extern "C" {
2187    pub fn nmod_mpolyu_leadcoeff(
2188        A: *mut nmod_mpolyu_struct,
2189        ctx: *mut nmod_mpoly_ctx_struct,
2190    ) -> mp_limb_t;
2191}
2192extern "C" {
2193    pub fn nmod_mpolyn_init(
2194        A: *mut nmod_mpolyn_struct,
2195        bits: mp_limb_t,
2196        ctx: *mut nmod_mpoly_ctx_struct,
2197    );
2198}
2199extern "C" {
2200    pub fn nmod_mpolyn_clear(A: *mut nmod_mpolyn_struct, ctx: *mut nmod_mpoly_ctx_struct);
2201}
2202extern "C" {
2203    pub fn nmod_mpolyn_swap(A: *mut nmod_mpolyn_struct, B: *mut nmod_mpolyn_struct);
2204}
2205extern "C" {
2206    pub fn nmod_mpolyn_zero(A: *mut nmod_mpolyn_struct, ctx: *mut nmod_mpoly_ctx_struct);
2207}
2208extern "C" {
2209    pub fn nmod_mpolyn_is_zero(
2210        A: *mut nmod_mpolyn_struct,
2211        ctx: *mut nmod_mpoly_ctx_struct,
2212    ) -> c_int;
2213}
2214extern "C" {
2215    pub fn nmod_mpolyn_print_pretty(
2216        A: *mut nmod_mpolyn_struct,
2217        x_in: *mut *const c_char,
2218        ctx: *mut nmod_mpoly_ctx_struct,
2219    );
2220}
2221extern "C" {
2222    pub fn nmod_mpolyn_fit_length(
2223        A: *mut nmod_mpolyn_struct,
2224        length: mp_limb_signed_t,
2225        ctx: *mut nmod_mpoly_ctx_struct,
2226    );
2227}
2228extern "C" {
2229    pub fn nmod_mpolyn_set_length(
2230        A: *mut nmod_mpolyn_struct,
2231        newlen: mp_limb_signed_t,
2232        ctx: *mut nmod_mpoly_ctx_struct,
2233    );
2234}
2235extern "C" {
2236    pub fn nmod_mpolyn_fit_bits(
2237        A: *mut nmod_mpolyn_struct,
2238        bits: mp_limb_signed_t,
2239        ctx: *mut nmod_mpoly_ctx_struct,
2240    );
2241}
2242extern "C" {
2243    pub fn nmod_mpolyn_is_canonical(
2244        A: *mut nmod_mpolyn_struct,
2245        ctx: *mut nmod_mpoly_ctx_struct,
2246    ) -> c_int;
2247}
2248extern "C" {
2249    pub fn nmod_mpolyn_set(
2250        A: *mut nmod_mpolyn_struct,
2251        B: *mut nmod_mpolyn_struct,
2252        ctx: *mut nmod_mpoly_ctx_struct,
2253    );
2254}
2255extern "C" {
2256    pub fn nmod_mpolyn_set_mpoly(
2257        A: *mut nmod_mpolyn_struct,
2258        B: *mut nmod_mpoly_struct,
2259        ctx: *mut nmod_mpoly_ctx_struct,
2260    );
2261}
2262extern "C" {
2263    pub fn nmod_mpoly_cvtfrom_mpolyn(
2264        A: *mut nmod_mpoly_struct,
2265        B: *mut nmod_mpolyn_struct,
2266        var: mp_limb_signed_t,
2267        ctx: *mut nmod_mpoly_ctx_struct,
2268    );
2269}
2270extern "C" {
2271    pub fn nmod_mpolyn_mul_poly(
2272        A: *mut nmod_mpolyn_struct,
2273        B: *mut nmod_mpolyn_struct,
2274        c: *mut n_poly_struct,
2275        ctx: *mut nmod_mpoly_ctx_struct,
2276    );
2277}
2278extern "C" {
2279    pub fn nmod_mpoly_cvtto_mpolyn(
2280        A: *mut nmod_mpolyn_struct,
2281        B: *mut nmod_mpoly_struct,
2282        var: mp_limb_signed_t,
2283        ctx: *mut nmod_mpoly_ctx_struct,
2284    );
2285}
2286extern "C" {
2287    pub fn nmod_mpolyn_leadcoeff(
2288        A: *mut nmod_mpolyn_struct,
2289        ctx: *mut nmod_mpoly_ctx_struct,
2290    ) -> mp_limb_t;
2291}
2292extern "C" {
2293    pub fn nmod_mpolyn_leadcoeff_poly(
2294        A: *mut nmod_mpolyn_struct,
2295        ctx: *mut nmod_mpoly_ctx_struct,
2296    ) -> *mut n_poly_struct;
2297}
2298extern "C" {
2299    pub fn nmod_mpolyun_init(
2300        A: *mut nmod_mpolyun_struct,
2301        bits: mp_limb_t,
2302        ctx: *mut nmod_mpoly_ctx_struct,
2303    );
2304}
2305extern "C" {
2306    pub fn nmod_mpolyun_clear(A: *mut nmod_mpolyun_struct, ctx: *mut nmod_mpoly_ctx_struct);
2307}
2308extern "C" {
2309    pub fn nmod_mpolyun_swap(A: *mut nmod_mpolyun_struct, B: *mut nmod_mpolyun_struct);
2310}
2311extern "C" {
2312    pub fn nmod_mpolyun_zero(A: *mut nmod_mpolyun_struct, ctx: *mut nmod_mpoly_ctx_struct);
2313}
2314extern "C" {
2315    pub fn nmod_mpolyun_print_pretty(
2316        poly: *mut nmod_mpolyun_struct,
2317        x: *mut *const c_char,
2318        ctx: *mut nmod_mpoly_ctx_struct,
2319    );
2320}
2321extern "C" {
2322    pub fn nmod_mpolyun_fit_length(
2323        A: *mut nmod_mpolyun_struct,
2324        length: mp_limb_signed_t,
2325        ctx: *mut nmod_mpoly_ctx_struct,
2326    );
2327}
2328extern "C" {
2329    pub fn nmod_mpolyun_is_canonical(
2330        A: *mut nmod_mpolyun_struct,
2331        ctx: *mut nmod_mpoly_ctx_struct,
2332    ) -> c_int;
2333}
2334extern "C" {
2335    pub fn nmod_mpolyun_shift_right(A: *mut nmod_mpolyun_struct, s: mp_limb_t);
2336}
2337extern "C" {
2338    pub fn nmod_mpolyun_shift_left(A: *mut nmod_mpolyun_struct, s: mp_limb_t);
2339}
2340extern "C" {
2341    pub fn nmod_mpolyn_lastdeg(
2342        A: *mut nmod_mpolyn_struct,
2343        ctx: *mut nmod_mpoly_ctx_struct,
2344    ) -> mp_limb_signed_t;
2345}
2346extern "C" {
2347    pub fn nmod_mpolyun_lastdeg(
2348        A: *mut nmod_mpolyun_struct,
2349        ctx: *mut nmod_mpoly_ctx_struct,
2350    ) -> mp_limb_signed_t;
2351}
2352extern "C" {
2353    pub fn nmod_mpolyun_set(
2354        A: *mut nmod_mpolyun_struct,
2355        B: *mut nmod_mpolyun_struct,
2356        ctx: *mut nmod_mpoly_ctx_struct,
2357    );
2358}
2359extern "C" {
2360    pub fn nmod_mpolyn_one(A: *mut nmod_mpolyn_struct, ctx: *mut nmod_mpoly_ctx_struct);
2361}
2362extern "C" {
2363    pub fn nmod_mpolyun_one(A: *mut nmod_mpolyun_struct, ctx: *mut nmod_mpoly_ctx_struct);
2364}
2365extern "C" {
2366    pub fn nmod_mpolyun_leadcoeff_last(
2367        A: *mut nmod_mpolyun_struct,
2368        ctx: *mut nmod_mpoly_ctx_struct,
2369    ) -> mp_limb_t;
2370}
2371extern "C" {
2372    pub fn nmod_mpolyn_set_mod(A: *mut nmod_mpolyn_struct, mod_: nmod_t);
2373}
2374extern "C" {
2375    pub fn nmod_mpolyun_set_mod(A: *mut nmod_mpolyun_struct, mod_: nmod_t);
2376}
2377extern "C" {
2378    pub fn nmod_mpolyn_is_nonzero_nmod(
2379        A: *mut nmod_mpolyn_struct,
2380        ctx: *mut nmod_mpoly_ctx_struct,
2381    ) -> c_int;
2382}
2383extern "C" {
2384    pub fn nmod_mpolyun_is_nonzero_nmod(
2385        A: *mut nmod_mpolyun_struct,
2386        ctx: *mut nmod_mpoly_ctx_struct,
2387    ) -> c_int;
2388}
2389extern "C" {
2390    pub fn nmod_mpolyn_scalar_mul_nmod(
2391        A: *mut nmod_mpolyn_struct,
2392        c: mp_limb_t,
2393        ctx: *mut nmod_mpoly_ctx_struct,
2394    );
2395}
2396extern "C" {
2397    pub fn nmod_mpolyun_scalar_mul_nmod(
2398        A: *mut nmod_mpolyun_struct,
2399        c: mp_limb_t,
2400        ctx: *mut nmod_mpoly_ctx_struct,
2401    );
2402}
2403extern "C" {
2404    pub fn nmod_mpolyn_mul_last(
2405        A: *mut nmod_mpolyn_struct,
2406        b: *mut n_poly_struct,
2407        ctx: *mut nmod_mpoly_ctx_struct,
2408    );
2409}
2410extern "C" {
2411    pub fn nmod_mpolyun_mul_last(
2412        A: *mut nmod_mpolyun_struct,
2413        b: *mut n_poly_struct,
2414        ctx: *mut nmod_mpoly_ctx_struct,
2415    );
2416}
2417extern "C" {
2418    pub fn nmod_mpolyn_equal(
2419        A: *mut nmod_mpolyn_struct,
2420        B: *mut nmod_mpolyn_struct,
2421        ctx: *mut nmod_mpoly_ctx_struct,
2422    ) -> c_int;
2423}
2424extern "C" {
2425    pub fn nmod_mpolyun_equal(
2426        A: *mut nmod_mpolyun_struct,
2427        B: *mut nmod_mpolyun_struct,
2428        ctx: *mut nmod_mpoly_ctx_struct,
2429    ) -> c_int;
2430}
2431extern "C" {
2432    pub fn nmod_mpolyu_cvtto_mpolyun(
2433        A: *mut nmod_mpolyun_struct,
2434        B: *mut nmod_mpolyu_struct,
2435        k: mp_limb_signed_t,
2436        ctx: *mut nmod_mpoly_ctx_struct,
2437    );
2438}
2439extern "C" {
2440    pub fn nmod_mpolyu_cvtfrom_mpolyun(
2441        A: *mut nmod_mpolyu_struct,
2442        B: *mut nmod_mpolyun_struct,
2443        var: mp_limb_signed_t,
2444        ctx: *mut nmod_mpoly_ctx_struct,
2445    );
2446}
2447extern "C" {
2448    pub fn nmod_mpolyun_mul_poly(
2449        A: *mut nmod_mpolyun_struct,
2450        B: *mut nmod_mpolyun_struct,
2451        c: *mut n_poly_struct,
2452        ctx: *mut nmod_mpoly_ctx_struct,
2453    );
2454}
2455extern "C" {
2456    pub fn nmod_mpolyn_content_last(
2457        a: *mut n_poly_struct,
2458        B: *mut nmod_mpolyn_struct,
2459        ctx: *mut nmod_mpoly_ctx_struct,
2460    );
2461}
2462extern "C" {
2463    pub fn nmod_mpolyun_content_last(
2464        a: *mut n_poly_struct,
2465        B: *mut nmod_mpolyun_struct,
2466        ctx: *mut nmod_mpoly_ctx_struct,
2467    );
2468}
2469extern "C" {
2470    pub fn nmod_mpolyn_divexact_last(
2471        A: *mut nmod_mpolyn_struct,
2472        b: *mut n_poly_struct,
2473        ctx: *mut nmod_mpoly_ctx_struct,
2474    );
2475}
2476extern "C" {
2477    pub fn nmod_mpolyun_divexact_last(
2478        A: *mut nmod_mpolyun_struct,
2479        b: *mut n_poly_struct,
2480        ctx: *mut nmod_mpoly_ctx_struct,
2481    );
2482}
2483extern "C" {
2484    pub fn nmod_mpolyn_divides(
2485        Q: *mut nmod_mpolyn_struct,
2486        A: *mut nmod_mpolyn_struct,
2487        B: *mut nmod_mpolyn_struct,
2488        ctx: *mut nmod_mpoly_ctx_struct,
2489    ) -> c_int;
2490}
2491extern "C" {
2492    pub fn nmod_mpolyn_divides_threaded_pool(
2493        Q: *mut nmod_mpolyn_struct,
2494        A: *mut nmod_mpolyn_struct,
2495        B: *mut nmod_mpolyn_struct,
2496        ctx: *mut nmod_mpoly_ctx_struct,
2497        handles: *const thread_pool_handle,
2498        num_handles: mp_limb_signed_t,
2499    ) -> c_int;
2500}
2501extern "C" {
2502    pub fn nmod_mpolyun_divides(
2503        Q: *mut nmod_mpolyun_struct,
2504        A: *mut nmod_mpolyun_struct,
2505        B: *mut nmod_mpolyun_struct,
2506        ctx: *mut nmod_mpoly_ctx_struct,
2507    ) -> c_int;
2508}
2509extern "C" {
2510    pub fn nmod_mpoly_to_mpolyun_perm_deflate_threaded_pool(
2511        A: *mut nmod_mpolyun_struct,
2512        uctx: *mut nmod_mpoly_ctx_struct,
2513        B: *mut nmod_mpoly_struct,
2514        ctx: *mut nmod_mpoly_ctx_struct,
2515        perm: *const mp_limb_signed_t,
2516        shift: *const mp_limb_t,
2517        stride: *const mp_limb_t,
2518        handles: *const thread_pool_handle,
2519        num_handles: mp_limb_signed_t,
2520    );
2521}
2522extern "C" {
2523    pub fn nmod_mpoly_to_mpolyn_perm_deflate_threaded_pool(
2524        A: *mut nmod_mpolyn_struct,
2525        nctx: *mut nmod_mpoly_ctx_struct,
2526        B: *mut nmod_mpoly_struct,
2527        ctx: *mut nmod_mpoly_ctx_struct,
2528        perm: *const mp_limb_signed_t,
2529        shift: *const mp_limb_t,
2530        stride: *const mp_limb_t,
2531        handles: *const thread_pool_handle,
2532        num_handles: mp_limb_signed_t,
2533    );
2534}
2535extern "C" {
2536    pub fn nmod_mpoly_from_mpolyun_perm_inflate(
2537        A: *mut nmod_mpoly_struct,
2538        Abits: mp_limb_t,
2539        ctx: *mut nmod_mpoly_ctx_struct,
2540        B: *mut nmod_mpolyun_struct,
2541        uctx: *mut nmod_mpoly_ctx_struct,
2542        perm: *const mp_limb_signed_t,
2543        shift: *const mp_limb_t,
2544        stride: *const mp_limb_t,
2545    );
2546}
2547extern "C" {
2548    pub fn nmod_mpoly_from_mpolyn_perm_inflate(
2549        A: *mut nmod_mpoly_struct,
2550        Abits: mp_limb_t,
2551        ctx: *mut nmod_mpoly_ctx_struct,
2552        B: *mut nmod_mpolyn_struct,
2553        nctx: *mut nmod_mpoly_ctx_struct,
2554        perm: *const mp_limb_signed_t,
2555        shift: *const mp_limb_t,
2556        stride: *const mp_limb_t,
2557    );
2558}
2559extern "C" {
2560    pub fn nmod_mpolyun_leadcoeff(
2561        A: *mut nmod_mpolyun_struct,
2562        ctx: *mut nmod_mpoly_ctx_struct,
2563    ) -> mp_limb_t;
2564}
2565extern "C" {
2566    pub fn nmod_mpolyun_leadcoeff_poly(
2567        A: *mut nmod_mpolyun_struct,
2568        ctx: *mut nmod_mpoly_ctx_struct,
2569    ) -> *mut n_poly_struct;
2570}
2571extern "C" {
2572    pub fn mpoly_gcd_get_use_first(
2573        rGdeg: mp_limb_signed_t,
2574        Adeg: mp_limb_signed_t,
2575        Bdeg: mp_limb_signed_t,
2576        gammadeg: mp_limb_signed_t,
2577    ) -> c_int;
2578}
2579extern "C" {
2580    pub fn nmod_mpoly_gcd_get_use_new(
2581        rGdeg: mp_limb_signed_t,
2582        Adeg: mp_limb_signed_t,
2583        Bdeg: mp_limb_signed_t,
2584        gammadeg: mp_limb_signed_t,
2585        degxAB: mp_limb_signed_t,
2586        degyAB: mp_limb_signed_t,
2587        numABgamma: mp_limb_signed_t,
2588        G: *mut n_polyun_struct,
2589        Abar: *mut n_polyun_struct,
2590        Bbar: *mut n_polyun_struct,
2591    ) -> c_int;
2592}
2593extern "C" {
2594    pub fn nmod_mpolyu_setform_mpolyun(
2595        A: *mut nmod_mpolyu_struct,
2596        B: *mut nmod_mpolyun_struct,
2597        ctx: *mut nmod_mpoly_ctx_struct,
2598    );
2599}
2600extern "C" {
2601    pub fn nmod_mpolyn_gcd_brown_smprime_bivar(
2602        G: *mut nmod_mpolyn_struct,
2603        Abar: *mut nmod_mpolyn_struct,
2604        Bbar: *mut nmod_mpolyn_struct,
2605        A: *mut nmod_mpolyn_struct,
2606        B: *mut nmod_mpolyn_struct,
2607        ctx: *mut nmod_mpoly_ctx_struct,
2608        Sp: *mut nmod_poly_stack_struct,
2609    ) -> c_int;
2610}
2611extern "C" {
2612    pub fn nmod_mpolyn_gcd_brown_smprime(
2613        G: *mut nmod_mpolyn_struct,
2614        Abar: *mut nmod_mpolyn_struct,
2615        Bbar: *mut nmod_mpolyn_struct,
2616        A: *mut nmod_mpolyn_struct,
2617        B: *mut nmod_mpolyn_struct,
2618        var: mp_limb_signed_t,
2619        ctx: *mut nmod_mpoly_ctx_struct,
2620        I: *mut mpoly_gcd_info_struct,
2621        Sp: *mut nmod_poly_stack_struct,
2622    ) -> c_int;
2623}
2624extern "C" {
2625    pub fn nmod_mpolyn_gcd_brown_smprime_threaded_pool(
2626        G: *mut nmod_mpolyn_struct,
2627        Abar: *mut nmod_mpolyn_struct,
2628        Bbar: *mut nmod_mpolyn_struct,
2629        A: *mut nmod_mpolyn_struct,
2630        B: *mut nmod_mpolyn_struct,
2631        var: mp_limb_signed_t,
2632        ctx: *mut nmod_mpoly_ctx_struct,
2633        I: *mut mpoly_gcd_info_struct,
2634        handles: *const thread_pool_handle,
2635        num_workers: mp_limb_signed_t,
2636    ) -> c_int;
2637}
2638extern "C" {
2639    pub fn nmod_mpolyn_gcd_brown_lgprime(
2640        G: *mut nmod_mpolyn_struct,
2641        Abar: *mut nmod_mpolyn_struct,
2642        Bbar: *mut nmod_mpolyn_struct,
2643        A: *mut nmod_mpolyn_struct,
2644        B: *mut nmod_mpolyn_struct,
2645        var: mp_limb_signed_t,
2646        ctx: *mut nmod_mpoly_ctx_struct,
2647    ) -> c_int;
2648}
2649pub const nmod_gcds_ret_t_nmod_gcds_success: nmod_gcds_ret_t = 0;
2650pub const nmod_gcds_ret_t_nmod_gcds_form_main_degree_too_high: nmod_gcds_ret_t = 1;
2651pub const nmod_gcds_ret_t_nmod_gcds_form_wrong: nmod_gcds_ret_t = 2;
2652pub const nmod_gcds_ret_t_nmod_gcds_no_solution: nmod_gcds_ret_t = 3;
2653pub const nmod_gcds_ret_t_nmod_gcds_scales_not_found: nmod_gcds_ret_t = 4;
2654pub const nmod_gcds_ret_t_nmod_gcds_eval_point_not_found: nmod_gcds_ret_t = 5;
2655pub const nmod_gcds_ret_t_nmod_gcds_eval_gcd_deg_too_high: nmod_gcds_ret_t = 6;
2656pub type nmod_gcds_ret_t = c_uint;
2657extern "C" {
2658    pub fn nmod_mpolyu_gcds_zippel(
2659        G: *mut nmod_mpolyu_struct,
2660        A: *mut nmod_mpolyu_struct,
2661        B: *mut nmod_mpolyu_struct,
2662        f: *mut nmod_mpolyu_struct,
2663        var: mp_limb_signed_t,
2664        ctx: *mut nmod_mpoly_ctx_struct,
2665        randstate: *mut flint_rand_s,
2666        degbound: *mut mp_limb_signed_t,
2667    ) -> nmod_gcds_ret_t;
2668}
2669extern "C" {
2670    pub fn nmod_mpolyu_gcdp_zippel(
2671        G: *mut nmod_mpolyu_struct,
2672        Abar: *mut nmod_mpolyu_struct,
2673        Bbar: *mut nmod_mpolyu_struct,
2674        A: *mut nmod_mpolyu_struct,
2675        B: *mut nmod_mpolyu_struct,
2676        var: mp_limb_signed_t,
2677        ctx: *mut nmod_mpoly_ctx_struct,
2678        randstate: *mut flint_rand_s,
2679    ) -> c_int;
2680}
2681extern "C" {
2682    pub fn nmod_mpoly_to_mpolyl_perm_deflate(
2683        A: *mut nmod_mpoly_struct,
2684        lctx: *mut nmod_mpoly_ctx_struct,
2685        B: *mut nmod_mpoly_struct,
2686        ctx: *mut nmod_mpoly_ctx_struct,
2687        perm: *const mp_limb_signed_t,
2688        shift: *const mp_limb_t,
2689        stride: *const mp_limb_t,
2690    );
2691}
2692extern "C" {
2693    pub fn nmod_mpoly_from_mpolyl_perm_inflate(
2694        A: *mut nmod_mpoly_struct,
2695        Abits: mp_limb_t,
2696        ctx: *mut nmod_mpoly_ctx_struct,
2697        B: *mut nmod_mpoly_struct,
2698        lctx: *mut nmod_mpoly_ctx_struct,
2699        perm: *const mp_limb_signed_t,
2700        shift: *const mp_limb_t,
2701        stride: *const mp_limb_t,
2702    );
2703}
2704extern "C" {
2705    pub fn nmod_mpolyl_gcd_zippel_smprime(
2706        rG: *mut nmod_mpoly_struct,
2707        rGdegs: *const mp_limb_signed_t,
2708        rAbar: *mut nmod_mpoly_struct,
2709        rBbar: *mut nmod_mpoly_struct,
2710        A: *mut nmod_mpoly_struct,
2711        Adegs: *const mp_limb_signed_t,
2712        B: *mut nmod_mpoly_struct,
2713        Bdegs: *const mp_limb_signed_t,
2714        gamma: *mut nmod_mpoly_struct,
2715        gammadegs: *const mp_limb_signed_t,
2716        ctx: *mut nmod_mpoly_ctx_struct,
2717    ) -> c_int;
2718}
2719extern "C" {
2720    pub fn nmod_mpolyl_gcd_zippel_lgprime(
2721        rG: *mut nmod_mpoly_struct,
2722        rGdegs: *const mp_limb_signed_t,
2723        rAbar: *mut nmod_mpoly_struct,
2724        rBbar: *mut nmod_mpoly_struct,
2725        A: *mut nmod_mpoly_struct,
2726        Adegs: *const mp_limb_signed_t,
2727        B: *mut nmod_mpoly_struct,
2728        Bdegs: *const mp_limb_signed_t,
2729        gamma: *mut nmod_mpoly_struct,
2730        gammadegs: *const mp_limb_signed_t,
2731        ctx: *mut nmod_mpoly_ctx_struct,
2732    ) -> c_int;
2733}
2734extern "C" {
2735    pub fn nmod_mpolyl_gcd_hensel_smprime(
2736        G: *mut nmod_mpoly_struct,
2737        Gdeg: mp_limb_signed_t,
2738        Abar: *mut nmod_mpoly_struct,
2739        Bbar: *mut nmod_mpoly_struct,
2740        A: *mut nmod_mpoly_struct,
2741        B: *mut nmod_mpoly_struct,
2742        ctx: *mut nmod_mpoly_ctx_struct,
2743    ) -> c_int;
2744}
2745extern "C" {
2746    pub fn nmod_mpolyl_gcd_hensel_medprime(
2747        G: *mut nmod_mpoly_struct,
2748        Gdeg: mp_limb_signed_t,
2749        Abar: *mut nmod_mpoly_struct,
2750        Bbar: *mut nmod_mpoly_struct,
2751        smA: *mut nmod_mpoly_struct,
2752        smB: *mut nmod_mpoly_struct,
2753        smctx: *mut nmod_mpoly_ctx_struct,
2754    ) -> c_int;
2755}
2756extern "C" {
2757    pub fn _nmod_mpoly_monomial_evals_cache(
2758        E: *mut n_poly_struct,
2759        Aexps: *const mp_limb_t,
2760        Abits: mp_limb_t,
2761        Alen: mp_limb_signed_t,
2762        betas: *const mp_limb_t,
2763        start: mp_limb_signed_t,
2764        stop: mp_limb_signed_t,
2765        mctx: *mut mpoly_ctx_struct,
2766        mod_: nmod_t,
2767    );
2768}
2769extern "C" {
2770    pub fn _nmod_mpoly_monomial_evals2_cache(
2771        E: *mut n_polyun_struct,
2772        Aexps: *const mp_limb_t,
2773        Abits: mp_limb_t,
2774        Alen: mp_limb_signed_t,
2775        betas: *const mp_limb_t,
2776        m: mp_limb_signed_t,
2777        ctx: *mut mpoly_ctx_struct,
2778        mod_: nmod_t,
2779    );
2780}
2781extern "C" {
2782    pub fn _nmod_poly_eval2_pow(
2783        vp: *mut mp_limb_t,
2784        vm: *mut mp_limb_t,
2785        P: *mut n_poly_struct,
2786        alphapow: *mut n_poly_struct,
2787        fctx: nmod_t,
2788    );
2789}
2790extern "C" {
2791    pub fn nmod_mpolyn_interp_reduce_2sm_poly(
2792        E: *mut n_poly_struct,
2793        F: *mut n_poly_struct,
2794        A: *mut nmod_mpolyn_struct,
2795        alphapow: *mut n_poly_struct,
2796        ctx: *mut nmod_mpoly_ctx_struct,
2797    );
2798}
2799extern "C" {
2800    pub fn nmod_mpolyn_interp_lift_2sm_poly(
2801        lastdeg_: *mut mp_limb_signed_t,
2802        F: *mut nmod_mpolyn_struct,
2803        A: *mut n_poly_struct,
2804        B: *mut n_poly_struct,
2805        alpha: mp_limb_t,
2806        ctx: *mut nmod_mpoly_ctx_struct,
2807    );
2808}
2809extern "C" {
2810    pub fn nmod_mpolyn_interp_crt_2sm_poly(
2811        lastdeg_: *mut mp_limb_signed_t,
2812        F: *mut nmod_mpolyn_struct,
2813        T: *mut nmod_mpolyn_struct,
2814        A: *mut n_poly_struct,
2815        B: *mut n_poly_struct,
2816        modulus: *mut n_poly_struct,
2817        alphapow: *mut n_poly_struct,
2818        ctx: *mut nmod_mpoly_ctx_struct,
2819    ) -> c_int;
2820}
2821extern "C" {
2822    pub fn nmod_mpolyn_interp_lift_sm_bpoly(
2823        F: *mut nmod_mpolyn_struct,
2824        A: *mut n_bpoly_struct,
2825        ctx: *mut nmod_mpoly_ctx_struct,
2826    );
2827}
2828extern "C" {
2829    pub fn nmod_mpolyn_interp_crt_sm_bpoly(
2830        lastdeg: *mut mp_limb_signed_t,
2831        F: *mut nmod_mpolyn_struct,
2832        T: *mut nmod_mpolyn_struct,
2833        A: *mut n_bpoly_struct,
2834        modulus: *mut n_poly_struct,
2835        alphapow: *mut n_poly_struct,
2836        ctx: *mut nmod_mpoly_ctx_struct,
2837    ) -> c_int;
2838}
2839extern "C" {
2840    pub fn nmod_mpolyn_interp_reduce_2sm_mpolyn(
2841        E: *mut nmod_mpolyn_struct,
2842        F: *mut nmod_mpolyn_struct,
2843        A: *mut nmod_mpolyn_struct,
2844        var: mp_limb_signed_t,
2845        alphapow: *mut n_poly_struct,
2846        ctx: *mut nmod_mpoly_ctx_struct,
2847    );
2848}
2849extern "C" {
2850    pub fn nmod_mpolyn_interp_lift_2sm_mpolyn(
2851        lastdeg: *mut mp_limb_signed_t,
2852        T: *mut nmod_mpolyn_struct,
2853        A: *mut nmod_mpolyn_struct,
2854        B: *mut nmod_mpolyn_struct,
2855        var: mp_limb_signed_t,
2856        alpha: mp_limb_t,
2857        ctx: *mut nmod_mpoly_ctx_struct,
2858    );
2859}
2860extern "C" {
2861    pub fn nmod_mpolyn_interp_crt_2sm_mpolyn(
2862        lastdeg: *mut mp_limb_signed_t,
2863        F: *mut nmod_mpolyn_struct,
2864        T: *mut nmod_mpolyn_struct,
2865        A: *mut nmod_mpolyn_struct,
2866        B: *mut nmod_mpolyn_struct,
2867        var: mp_limb_signed_t,
2868        modulus: *mut n_poly_struct,
2869        alphapow: *mut n_poly_struct,
2870        ctx: *mut nmod_mpoly_ctx_struct,
2871    ) -> c_int;
2872}
2873extern "C" {
2874    pub fn nmod_mpolyun_interp_reduce_sm_mpolyu(
2875        B: *mut nmod_mpolyu_struct,
2876        A: *mut nmod_mpolyun_struct,
2877        alpha: mp_limb_t,
2878        ctx: *mut nmod_mpoly_ctx_struct,
2879    );
2880}
2881extern "C" {
2882    pub fn nmod_mpolyn_interp_lift_sm_mpoly(
2883        A: *mut nmod_mpolyn_struct,
2884        B: *mut nmod_mpoly_struct,
2885        ctx: *mut nmod_mpoly_ctx_struct,
2886    );
2887}
2888extern "C" {
2889    pub fn nmod_mpolyun_interp_lift_sm_mpolyu(
2890        A: *mut nmod_mpolyun_struct,
2891        B: *mut nmod_mpolyu_struct,
2892        ctx: *mut nmod_mpoly_ctx_struct,
2893    );
2894}
2895extern "C" {
2896    pub fn nmod_mpolyn_interp_crt_sm_mpoly(
2897        lastdeg: *mut mp_limb_signed_t,
2898        F: *mut nmod_mpolyn_struct,
2899        T: *mut nmod_mpolyn_struct,
2900        A: *mut nmod_mpoly_struct,
2901        modulus: *mut n_poly_struct,
2902        alpha: mp_limb_t,
2903        ctx: *mut nmod_mpoly_ctx_struct,
2904    ) -> c_int;
2905}
2906extern "C" {
2907    pub fn nmod_mpolyun_interp_crt_sm_mpolyu(
2908        lastdeg: *mut mp_limb_signed_t,
2909        F: *mut nmod_mpolyun_struct,
2910        T: *mut nmod_mpolyun_struct,
2911        A: *mut nmod_mpolyu_struct,
2912        modulus: *mut n_poly_struct,
2913        alpha: mp_limb_t,
2914        ctx: *mut nmod_mpoly_ctx_struct,
2915    ) -> c_int;
2916}
2917extern "C" {
2918    pub fn nmod_mpolyn_interp_mcrt_sm_mpoly(
2919        lastdeg_: *mut mp_limb_signed_t,
2920        F: *mut nmod_mpolyn_struct,
2921        A: *mut nmod_mpoly_struct,
2922        modulus: *mut n_poly_struct,
2923        alphapow: *mut n_poly_struct,
2924        ctx: *mut nmod_mpoly_ctx_struct,
2925    ) -> c_int;
2926}
2927#[repr(C)]
2928#[derive(Debug, Copy, Clone)]
2929pub struct nmod_mpoly_geobucket {
2930    pub polys: [nmod_mpoly_struct; 32usize],
2931    pub temps: [nmod_mpoly_struct; 32usize],
2932    pub length: mp_limb_signed_t,
2933}
2934pub type nmod_mpoly_geobucket_struct = nmod_mpoly_geobucket;
2935pub type nmod_mpoly_geobucket_t = [nmod_mpoly_geobucket_struct; 1usize];
2936extern "C" {
2937    pub fn nmod_mpoly_geobucket_init(
2938        B: *mut nmod_mpoly_geobucket_struct,
2939        ctx: *mut nmod_mpoly_ctx_struct,
2940    );
2941}
2942extern "C" {
2943    pub fn nmod_mpoly_geobucket_clear(
2944        B: *mut nmod_mpoly_geobucket_struct,
2945        ctx: *mut nmod_mpoly_ctx_struct,
2946    );
2947}
2948extern "C" {
2949    pub fn nmod_mpoly_geobucket_empty(
2950        p: *mut nmod_mpoly_struct,
2951        B: *mut nmod_mpoly_geobucket_struct,
2952        ctx: *mut nmod_mpoly_ctx_struct,
2953    );
2954}
2955extern "C" {
2956    pub fn nmod_mpoly_geobucket_fit_length(
2957        B: *mut nmod_mpoly_geobucket_struct,
2958        i: mp_limb_signed_t,
2959        ctx: *mut nmod_mpoly_ctx_struct,
2960    );
2961}
2962extern "C" {
2963    pub fn nmod_mpoly_geobucket_set(
2964        B: *mut nmod_mpoly_geobucket_struct,
2965        p: *mut nmod_mpoly_struct,
2966        ctx: *mut nmod_mpoly_ctx_struct,
2967    );
2968}
2969extern "C" {
2970    pub fn nmod_mpoly_geobucket_add(
2971        B: *mut nmod_mpoly_geobucket_struct,
2972        p: *mut nmod_mpoly_struct,
2973        ctx: *mut nmod_mpoly_ctx_struct,
2974    );
2975}
2976extern "C" {
2977    pub fn nmod_mpoly_geobucket_sub(
2978        B: *mut nmod_mpoly_geobucket_struct,
2979        p: *mut nmod_mpoly_struct,
2980        ctx: *mut nmod_mpoly_ctx_struct,
2981    );
2982}
2983extern "C" {
2984    pub fn nmod_mpoly_remainder_strongtest(
2985        r: *mut nmod_mpoly_struct,
2986        g: *mut nmod_mpoly_struct,
2987        ctx: *mut nmod_mpoly_ctx_struct,
2988    );
2989}