Skip to main content

flint_sys/
nmod_mpoly.rs

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