Skip to main content

flint_sys/
fmpz_mod_poly.rs

1/* automatically generated by rust-bindgen 0.70.1 */
2
3use libc::*;
4use crate::deps::*;
5use crate::flint::*;
6use crate::fmpz_mod_types::*;
7use crate::fmpz_types::*;
8use crate::nmod_types::*;
9
10
11pub const FMPZ_MOD_POLY_HGCD_CUTOFF: u32 = 128;
12pub const FMPZ_MOD_POLY_GCD_CUTOFF: u32 = 256;
13pub const FMPZ_MOD_POLY_INV_NEWTON_CUTOFF: u32 = 64;
14pub const FMPZ_MOD_POLY_EVALUATE_FMPZ_VEC: u32 = 32;
15#[repr(C)]
16pub struct fmpz_mod_poly_res_struct {
17    pub res: fmpz_t,
18    pub lc: fmpz_t,
19    pub len0: slong,
20    pub len1: slong,
21    pub off: slong,
22}
23#[allow(clippy::unnecessary_operation, clippy::identity_op)]
24const _: () = {
25    ["Size of fmpz_mod_poly_res_struct"]
26        [::std::mem::size_of::<fmpz_mod_poly_res_struct>() - 40usize];
27    ["Alignment of fmpz_mod_poly_res_struct"]
28        [::std::mem::align_of::<fmpz_mod_poly_res_struct>() - 8usize];
29    ["Offset of field: fmpz_mod_poly_res_struct::res"]
30        [::std::mem::offset_of!(fmpz_mod_poly_res_struct, res) - 0usize];
31    ["Offset of field: fmpz_mod_poly_res_struct::lc"]
32        [::std::mem::offset_of!(fmpz_mod_poly_res_struct, lc) - 8usize];
33    ["Offset of field: fmpz_mod_poly_res_struct::len0"]
34        [::std::mem::offset_of!(fmpz_mod_poly_res_struct, len0) - 16usize];
35    ["Offset of field: fmpz_mod_poly_res_struct::len1"]
36        [::std::mem::offset_of!(fmpz_mod_poly_res_struct, len1) - 24usize];
37    ["Offset of field: fmpz_mod_poly_res_struct::off"]
38        [::std::mem::offset_of!(fmpz_mod_poly_res_struct, off) - 32usize];
39};
40impl Default for fmpz_mod_poly_res_struct {
41    fn default() -> Self {
42        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
43        unsafe {
44            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
45            s.assume_init()
46        }
47    }
48}
49pub type fmpz_mod_poly_res_t = [fmpz_mod_poly_res_struct; 1usize];
50#[repr(C)]
51pub struct fmpz_mod_poly_frobenius_powers_2exp_struct {
52    pub pow: *mut fmpz_mod_poly_struct,
53    pub len: slong,
54}
55#[allow(clippy::unnecessary_operation, clippy::identity_op)]
56const _: () = {
57    ["Size of fmpz_mod_poly_frobenius_powers_2exp_struct"]
58        [::std::mem::size_of::<fmpz_mod_poly_frobenius_powers_2exp_struct>() - 16usize];
59    ["Alignment of fmpz_mod_poly_frobenius_powers_2exp_struct"]
60        [::std::mem::align_of::<fmpz_mod_poly_frobenius_powers_2exp_struct>() - 8usize];
61    ["Offset of field: fmpz_mod_poly_frobenius_powers_2exp_struct::pow"]
62        [::std::mem::offset_of!(fmpz_mod_poly_frobenius_powers_2exp_struct, pow) - 0usize];
63    ["Offset of field: fmpz_mod_poly_frobenius_powers_2exp_struct::len"]
64        [::std::mem::offset_of!(fmpz_mod_poly_frobenius_powers_2exp_struct, len) - 8usize];
65};
66impl Default for fmpz_mod_poly_frobenius_powers_2exp_struct {
67    fn default() -> Self {
68        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
69        unsafe {
70            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
71            s.assume_init()
72        }
73    }
74}
75pub type fmpz_mod_poly_frobenius_powers_2exp_t =
76    [fmpz_mod_poly_frobenius_powers_2exp_struct; 1usize];
77#[repr(C)]
78pub struct fmpz_mod_poly_frobenius_powers_struct {
79    pub pow: *mut fmpz_mod_poly_struct,
80    pub len: slong,
81}
82#[allow(clippy::unnecessary_operation, clippy::identity_op)]
83const _: () = {
84    ["Size of fmpz_mod_poly_frobenius_powers_struct"]
85        [::std::mem::size_of::<fmpz_mod_poly_frobenius_powers_struct>() - 16usize];
86    ["Alignment of fmpz_mod_poly_frobenius_powers_struct"]
87        [::std::mem::align_of::<fmpz_mod_poly_frobenius_powers_struct>() - 8usize];
88    ["Offset of field: fmpz_mod_poly_frobenius_powers_struct::pow"]
89        [::std::mem::offset_of!(fmpz_mod_poly_frobenius_powers_struct, pow) - 0usize];
90    ["Offset of field: fmpz_mod_poly_frobenius_powers_struct::len"]
91        [::std::mem::offset_of!(fmpz_mod_poly_frobenius_powers_struct, len) - 8usize];
92};
93impl Default for fmpz_mod_poly_frobenius_powers_struct {
94    fn default() -> Self {
95        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
96        unsafe {
97            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
98            s.assume_init()
99        }
100    }
101}
102pub type fmpz_mod_poly_frobenius_powers_t = [fmpz_mod_poly_frobenius_powers_struct; 1usize];
103#[repr(C)]
104#[derive(Debug, Copy, Clone)]
105pub struct fmpz_mod_poly_matrix_precompute_arg_t {
106    pub A: *mut fmpz_mat_struct,
107    pub poly1: *mut fmpz_mod_poly_struct,
108    pub poly2: *mut fmpz_mod_poly_struct,
109    pub poly2inv: *mut fmpz_mod_poly_struct,
110    pub ctx: *const fmpz_mod_ctx_struct,
111}
112#[allow(clippy::unnecessary_operation, clippy::identity_op)]
113const _: () = {
114    ["Size of fmpz_mod_poly_matrix_precompute_arg_t"]
115        [::std::mem::size_of::<fmpz_mod_poly_matrix_precompute_arg_t>() - 40usize];
116    ["Alignment of fmpz_mod_poly_matrix_precompute_arg_t"]
117        [::std::mem::align_of::<fmpz_mod_poly_matrix_precompute_arg_t>() - 8usize];
118    ["Offset of field: fmpz_mod_poly_matrix_precompute_arg_t::A"]
119        [::std::mem::offset_of!(fmpz_mod_poly_matrix_precompute_arg_t, A) - 0usize];
120    ["Offset of field: fmpz_mod_poly_matrix_precompute_arg_t::poly1"]
121        [::std::mem::offset_of!(fmpz_mod_poly_matrix_precompute_arg_t, poly1) - 8usize];
122    ["Offset of field: fmpz_mod_poly_matrix_precompute_arg_t::poly2"]
123        [::std::mem::offset_of!(fmpz_mod_poly_matrix_precompute_arg_t, poly2) - 16usize];
124    ["Offset of field: fmpz_mod_poly_matrix_precompute_arg_t::poly2inv"]
125        [::std::mem::offset_of!(fmpz_mod_poly_matrix_precompute_arg_t, poly2inv) - 24usize];
126    ["Offset of field: fmpz_mod_poly_matrix_precompute_arg_t::ctx"]
127        [::std::mem::offset_of!(fmpz_mod_poly_matrix_precompute_arg_t, ctx) - 32usize];
128};
129impl Default for fmpz_mod_poly_matrix_precompute_arg_t {
130    fn default() -> Self {
131        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
132        unsafe {
133            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
134            s.assume_init()
135        }
136    }
137}
138#[repr(C)]
139#[derive(Debug, Copy, Clone)]
140pub struct fmpz_mod_poly_compose_mod_precomp_preinv_arg_t {
141    pub A: *mut fmpz_mat_struct,
142    pub res: *mut fmpz_mod_poly_struct,
143    pub poly1: *mut fmpz_mod_poly_struct,
144    pub poly3: *mut fmpz_mod_poly_struct,
145    pub poly3inv: *mut fmpz_mod_poly_struct,
146    pub ctx: *const fmpz_mod_ctx_struct,
147}
148#[allow(clippy::unnecessary_operation, clippy::identity_op)]
149const _: () = {
150    ["Size of fmpz_mod_poly_compose_mod_precomp_preinv_arg_t"]
151        [::std::mem::size_of::<fmpz_mod_poly_compose_mod_precomp_preinv_arg_t>() - 48usize];
152    ["Alignment of fmpz_mod_poly_compose_mod_precomp_preinv_arg_t"]
153        [::std::mem::align_of::<fmpz_mod_poly_compose_mod_precomp_preinv_arg_t>() - 8usize];
154    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::A"]
155        [::std::mem::offset_of!(fmpz_mod_poly_compose_mod_precomp_preinv_arg_t, A) - 0usize];
156    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::res"]
157        [::std::mem::offset_of!(fmpz_mod_poly_compose_mod_precomp_preinv_arg_t, res) - 8usize];
158    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::poly1"]
159        [::std::mem::offset_of!(fmpz_mod_poly_compose_mod_precomp_preinv_arg_t, poly1) - 16usize];
160    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::poly3"]
161        [::std::mem::offset_of!(fmpz_mod_poly_compose_mod_precomp_preinv_arg_t, poly3) - 24usize];
162    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::poly3inv"][::std::mem::offset_of!(
163        fmpz_mod_poly_compose_mod_precomp_preinv_arg_t,
164        poly3inv
165    ) - 32usize];
166    ["Offset of field: fmpz_mod_poly_compose_mod_precomp_preinv_arg_t::ctx"]
167        [::std::mem::offset_of!(fmpz_mod_poly_compose_mod_precomp_preinv_arg_t, ctx) - 40usize];
168};
169impl Default for fmpz_mod_poly_compose_mod_precomp_preinv_arg_t {
170    fn default() -> Self {
171        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
172        unsafe {
173            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
174            s.assume_init()
175        }
176    }
177}
178#[repr(C)]
179pub struct fmpz_mod_poly_radix_struct {
180    pub V: *mut fmpz,
181    pub W: *mut fmpz,
182    pub Rpow: *mut *mut fmpz,
183    pub Rinv: *mut *mut fmpz,
184    pub degR: slong,
185    pub k: slong,
186    pub invL: fmpz,
187}
188#[allow(clippy::unnecessary_operation, clippy::identity_op)]
189const _: () = {
190    ["Size of fmpz_mod_poly_radix_struct"]
191        [::std::mem::size_of::<fmpz_mod_poly_radix_struct>() - 56usize];
192    ["Alignment of fmpz_mod_poly_radix_struct"]
193        [::std::mem::align_of::<fmpz_mod_poly_radix_struct>() - 8usize];
194    ["Offset of field: fmpz_mod_poly_radix_struct::V"]
195        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, V) - 0usize];
196    ["Offset of field: fmpz_mod_poly_radix_struct::W"]
197        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, W) - 8usize];
198    ["Offset of field: fmpz_mod_poly_radix_struct::Rpow"]
199        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, Rpow) - 16usize];
200    ["Offset of field: fmpz_mod_poly_radix_struct::Rinv"]
201        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, Rinv) - 24usize];
202    ["Offset of field: fmpz_mod_poly_radix_struct::degR"]
203        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, degR) - 32usize];
204    ["Offset of field: fmpz_mod_poly_radix_struct::k"]
205        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, k) - 40usize];
206    ["Offset of field: fmpz_mod_poly_radix_struct::invL"]
207        [::std::mem::offset_of!(fmpz_mod_poly_radix_struct, invL) - 48usize];
208};
209impl Default for fmpz_mod_poly_radix_struct {
210    fn default() -> Self {
211        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
212        unsafe {
213            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
214            s.assume_init()
215        }
216    }
217}
218pub type fmpz_mod_poly_radix_t = [fmpz_mod_poly_radix_struct; 1usize];
219#[repr(C)]
220pub struct fmpz_mod_berlekamp_massey_struct {
221    pub npoints: slong,
222    pub R0: fmpz_mod_poly_t,
223    pub R1: fmpz_mod_poly_t,
224    pub V0: fmpz_mod_poly_t,
225    pub V1: fmpz_mod_poly_t,
226    pub qt: fmpz_mod_poly_t,
227    pub rt: fmpz_mod_poly_t,
228    pub points: fmpz_mod_poly_t,
229}
230#[allow(clippy::unnecessary_operation, clippy::identity_op)]
231const _: () = {
232    ["Size of fmpz_mod_berlekamp_massey_struct"]
233        [::std::mem::size_of::<fmpz_mod_berlekamp_massey_struct>() - 176usize];
234    ["Alignment of fmpz_mod_berlekamp_massey_struct"]
235        [::std::mem::align_of::<fmpz_mod_berlekamp_massey_struct>() - 8usize];
236    ["Offset of field: fmpz_mod_berlekamp_massey_struct::npoints"]
237        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, npoints) - 0usize];
238    ["Offset of field: fmpz_mod_berlekamp_massey_struct::R0"]
239        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, R0) - 8usize];
240    ["Offset of field: fmpz_mod_berlekamp_massey_struct::R1"]
241        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, R1) - 32usize];
242    ["Offset of field: fmpz_mod_berlekamp_massey_struct::V0"]
243        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, V0) - 56usize];
244    ["Offset of field: fmpz_mod_berlekamp_massey_struct::V1"]
245        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, V1) - 80usize];
246    ["Offset of field: fmpz_mod_berlekamp_massey_struct::qt"]
247        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, qt) - 104usize];
248    ["Offset of field: fmpz_mod_berlekamp_massey_struct::rt"]
249        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, rt) - 128usize];
250    ["Offset of field: fmpz_mod_berlekamp_massey_struct::points"]
251        [::std::mem::offset_of!(fmpz_mod_berlekamp_massey_struct, points) - 152usize];
252};
253impl Default for fmpz_mod_berlekamp_massey_struct {
254    fn default() -> Self {
255        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
256        unsafe {
257            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
258            s.assume_init()
259        }
260    }
261}
262pub type fmpz_mod_berlekamp_massey_t = [fmpz_mod_berlekamp_massey_struct; 1usize];
263extern "C" {
264    #[link_name = "fmpz_mod_poly_init__extern"]
265    pub fn fmpz_mod_poly_init(
266        poly: *mut fmpz_mod_poly_struct,
267        UNUSED_ctx: *const fmpz_mod_ctx_struct,
268    );
269    pub fn fmpz_mod_poly_init2(
270        poly: *mut fmpz_mod_poly_struct,
271        alloc: slong,
272        UNUSED_ctx: *const fmpz_mod_ctx_struct,
273    );
274    pub fn fmpz_mod_poly_clear(
275        poly: *mut fmpz_mod_poly_struct,
276        UNUSED_ctx: *const fmpz_mod_ctx_struct,
277    );
278    pub fn fmpz_mod_poly_realloc(
279        poly: *mut fmpz_mod_poly_struct,
280        alloc: slong,
281        ctx: *const fmpz_mod_ctx_struct,
282    );
283    pub fn _fmpz_mod_poly_fit_length(poly: *mut fmpz_mod_poly_struct, len: slong);
284    #[link_name = "fmpz_mod_poly_fit_length__extern"]
285    pub fn fmpz_mod_poly_fit_length(
286        poly: *mut fmpz_mod_poly_struct,
287        len: slong,
288        UNUSED_ctx: *const fmpz_mod_ctx_struct,
289    );
290    #[link_name = "_fmpz_mod_poly_normalise__extern"]
291    pub fn _fmpz_mod_poly_normalise(poly: *mut fmpz_mod_poly_struct);
292    pub fn _fmpz_mod_poly_set_length(poly: *mut fmpz_mod_poly_struct, len: slong);
293    pub fn fmpz_mod_poly_truncate(
294        poly: *mut fmpz_mod_poly_struct,
295        len: slong,
296        UNUSED_ctx: *const fmpz_mod_ctx_struct,
297    );
298    pub fn fmpz_mod_poly_set_trunc(
299        res: *mut fmpz_mod_poly_struct,
300        poly: *const fmpz_mod_poly_struct,
301        n: slong,
302        ctx: *const fmpz_mod_ctx_struct,
303    );
304    pub fn fmpz_mod_poly_is_canonical(
305        A: *const fmpz_mod_poly_struct,
306        ctx: *const fmpz_mod_ctx_struct,
307    ) -> libc::c_int;
308    pub fn fmpz_mod_poly_randtest(
309        f: *mut fmpz_mod_poly_struct,
310        state: *mut flint_rand_struct,
311        len: slong,
312        ctx: *const fmpz_mod_ctx_struct,
313    );
314    pub fn fmpz_mod_poly_randtest_irreducible(
315        f: *mut fmpz_mod_poly_struct,
316        state: *mut flint_rand_struct,
317        len: slong,
318        ctx: *const fmpz_mod_ctx_struct,
319    );
320    pub fn fmpz_mod_poly_randtest_not_zero(
321        f: *mut fmpz_mod_poly_struct,
322        state: *mut flint_rand_struct,
323        len: slong,
324        ctx: *const fmpz_mod_ctx_struct,
325    );
326    pub fn fmpz_mod_poly_randtest_monic(
327        f: *mut fmpz_mod_poly_struct,
328        state: *mut flint_rand_struct,
329        len: slong,
330        ctx: *const fmpz_mod_ctx_struct,
331    );
332    pub fn fmpz_mod_poly_randtest_monic_irreducible(
333        f: *mut fmpz_mod_poly_struct,
334        state: *mut flint_rand_struct,
335        len: slong,
336        ctx: *const fmpz_mod_ctx_struct,
337    );
338    pub fn fmpz_mod_poly_randtest_monic_primitive(
339        f: *mut fmpz_mod_poly_struct,
340        state: *mut flint_rand_struct,
341        len: slong,
342        ctx: *const fmpz_mod_ctx_struct,
343    );
344    pub fn fmpz_mod_poly_randtest_trinomial(
345        f: *mut fmpz_mod_poly_struct,
346        state: *mut flint_rand_struct,
347        len: slong,
348        ctx: *const fmpz_mod_ctx_struct,
349    );
350    pub fn fmpz_mod_poly_randtest_trinomial_irreducible(
351        f: *mut fmpz_mod_poly_struct,
352        state: *mut flint_rand_struct,
353        len: slong,
354        max_attempts: slong,
355        ctx: *const fmpz_mod_ctx_struct,
356    ) -> libc::c_int;
357    pub fn fmpz_mod_poly_randtest_pentomial(
358        f: *mut fmpz_mod_poly_struct,
359        state: *mut flint_rand_struct,
360        len: slong,
361        ctx: *const fmpz_mod_ctx_struct,
362    );
363    pub fn fmpz_mod_poly_randtest_pentomial_irreducible(
364        f: *mut fmpz_mod_poly_struct,
365        state: *mut flint_rand_struct,
366        len: slong,
367        max_attempts: slong,
368        ctx: *const fmpz_mod_ctx_struct,
369    ) -> libc::c_int;
370    pub fn fmpz_mod_poly_randtest_sparse_irreducible(
371        poly: *mut fmpz_mod_poly_struct,
372        state: *mut flint_rand_struct,
373        len: slong,
374        ctx: *const fmpz_mod_ctx_struct,
375    );
376    #[link_name = "fmpz_mod_poly_length__extern"]
377    pub fn fmpz_mod_poly_length(
378        poly: *const fmpz_mod_poly_struct,
379        UNUSED_ctx: *const fmpz_mod_ctx_struct,
380    ) -> slong;
381    #[link_name = "fmpz_mod_poly_degree__extern"]
382    pub fn fmpz_mod_poly_degree(
383        poly: *const fmpz_mod_poly_struct,
384        UNUSED_ctx: *const fmpz_mod_ctx_struct,
385    ) -> slong;
386    #[link_name = "fmpz_mod_poly_lead__extern"]
387    pub fn fmpz_mod_poly_lead(
388        poly: *const fmpz_mod_poly_struct,
389        UNUSED_ctx: *const fmpz_mod_ctx_struct,
390    ) -> *mut fmpz;
391    #[link_name = "fmpz_mod_poly_is_monic__extern"]
392    pub fn fmpz_mod_poly_is_monic(
393        f: *const fmpz_mod_poly_struct,
394        UNUSED_ctx: *const fmpz_mod_ctx_struct,
395    ) -> libc::c_int;
396    #[link_name = "fmpz_mod_poly_is_one__extern"]
397    pub fn fmpz_mod_poly_is_one(
398        poly: *const fmpz_mod_poly_struct,
399        UNUSED_ctx: *const fmpz_mod_ctx_struct,
400    ) -> libc::c_int;
401    pub fn fmpz_mod_poly_is_gen(
402        op: *const fmpz_mod_poly_struct,
403        ctx: *const fmpz_mod_ctx_struct,
404    ) -> libc::c_int;
405    pub fn fmpz_mod_poly_is_unit(
406        op: *const fmpz_mod_poly_struct,
407        ctx: *const fmpz_mod_ctx_struct,
408    ) -> libc::c_int;
409    pub fn fmpz_mod_poly_set(
410        poly1: *mut fmpz_mod_poly_struct,
411        poly2: *const fmpz_mod_poly_struct,
412        ctx: *const fmpz_mod_ctx_struct,
413    );
414    #[link_name = "fmpz_mod_poly_swap__extern"]
415    pub fn fmpz_mod_poly_swap(
416        poly1: *mut fmpz_mod_poly_struct,
417        poly2: *mut fmpz_mod_poly_struct,
418        UNUSED_ctx: *const fmpz_mod_ctx_struct,
419    );
420    pub fn _fmpz_mod_poly_reverse(res: *mut fmpz, poly: *const fmpz, len: slong, n: slong);
421    pub fn fmpz_mod_poly_reverse(
422        res: *mut fmpz_mod_poly_struct,
423        poly: *const fmpz_mod_poly_struct,
424        n: slong,
425        ctx: *const fmpz_mod_ctx_struct,
426    );
427    #[link_name = "fmpz_mod_poly_zero__extern"]
428    pub fn fmpz_mod_poly_zero(
429        poly: *mut fmpz_mod_poly_struct,
430        UNUSED_ctx: *const fmpz_mod_ctx_struct,
431    );
432    pub fn fmpz_mod_poly_one(poly: *mut fmpz_mod_poly_struct, ctx: *const fmpz_mod_ctx_struct);
433    pub fn fmpz_mod_poly_gen(poly: *mut fmpz_mod_poly_struct, ctx: *const fmpz_mod_ctx_struct);
434    pub fn fmpz_mod_poly_zero_coeffs(
435        poly: *mut fmpz_mod_poly_struct,
436        i: slong,
437        j: slong,
438        UNUSED_ctx: *const fmpz_mod_ctx_struct,
439    );
440    pub fn fmpz_mod_poly_deflation(
441        input: *const fmpz_mod_poly_struct,
442        UNUSED_ctx: *const fmpz_mod_ctx_struct,
443    ) -> ulong;
444    pub fn fmpz_mod_poly_deflate(
445        result: *mut fmpz_mod_poly_struct,
446        input: *const fmpz_mod_poly_struct,
447        deflation: ulong,
448        ctx: *const fmpz_mod_ctx_struct,
449    );
450    pub fn fmpz_mod_poly_inflate(
451        result: *mut fmpz_mod_poly_struct,
452        input: *const fmpz_mod_poly_struct,
453        inflation: ulong,
454        ctx: *const fmpz_mod_ctx_struct,
455    );
456    pub fn fmpz_mod_poly_set_ui(
457        f: *mut fmpz_mod_poly_struct,
458        x: ulong,
459        ctx: *const fmpz_mod_ctx_struct,
460    );
461    pub fn fmpz_mod_poly_set_nmod_poly(f: *mut fmpz_mod_poly_struct, g: *const nmod_poly_struct);
462    pub fn fmpz_mod_poly_set_fmpz(
463        poly: *mut fmpz_mod_poly_struct,
464        c: *const fmpz,
465        ctx: *const fmpz_mod_ctx_struct,
466    );
467    pub fn fmpz_mod_poly_set_fmpz_poly(
468        f: *mut fmpz_mod_poly_struct,
469        g: *const fmpz_poly_struct,
470        ctx: *const fmpz_mod_ctx_struct,
471    );
472    pub fn fmpz_mod_poly_get_nmod_poly(f: *mut nmod_poly_struct, g: *const fmpz_mod_poly_struct);
473    pub fn fmpz_mod_poly_get_fmpz_poly(
474        f: *mut fmpz_poly_struct,
475        g: *const fmpz_mod_poly_struct,
476        UNUSED_ctx: *const fmpz_mod_ctx_struct,
477    );
478    pub fn fmpz_mod_poly_equal(
479        poly1: *const fmpz_mod_poly_struct,
480        poly2: *const fmpz_mod_poly_struct,
481        UNUSED_ctx: *const fmpz_mod_ctx_struct,
482    ) -> libc::c_int;
483    pub fn fmpz_mod_poly_equal_trunc(
484        poly1: *const fmpz_mod_poly_struct,
485        poly2: *const fmpz_mod_poly_struct,
486        n: slong,
487        UNUSED_ctx: *const fmpz_mod_ctx_struct,
488    ) -> libc::c_int;
489    pub fn fmpz_mod_poly_is_zero(
490        poly: *const fmpz_mod_poly_struct,
491        UNUSED_ctx: *const fmpz_mod_ctx_struct,
492    ) -> libc::c_int;
493    pub fn fmpz_mod_poly_set_coeff_fmpz(
494        poly: *mut fmpz_mod_poly_struct,
495        n: slong,
496        x: *const fmpz,
497        ctx: *const fmpz_mod_ctx_struct,
498    );
499    pub fn fmpz_mod_poly_set_coeff_ui(
500        poly: *mut fmpz_mod_poly_struct,
501        n: slong,
502        x: ulong,
503        ctx: *const fmpz_mod_ctx_struct,
504    );
505    pub fn fmpz_mod_poly_set_coeff_si(
506        poly: *mut fmpz_mod_poly_struct,
507        n: slong,
508        x: slong,
509        ctx: *const fmpz_mod_ctx_struct,
510    );
511    pub fn fmpz_mod_poly_get_coeff_fmpz(
512        x: *mut fmpz,
513        poly: *const fmpz_mod_poly_struct,
514        n: slong,
515        UNUSED_ctx: *const fmpz_mod_ctx_struct,
516    );
517    pub fn _fmpz_mod_poly_shift_left(res: *mut fmpz, poly: *const fmpz, len: slong, n: slong);
518    pub fn fmpz_mod_poly_shift_left(
519        f: *mut fmpz_mod_poly_struct,
520        g: *const fmpz_mod_poly_struct,
521        n: slong,
522        ctx: *const fmpz_mod_ctx_struct,
523    );
524    pub fn _fmpz_mod_poly_shift_right(res: *mut fmpz, poly: *const fmpz, len: slong, n: slong);
525    pub fn fmpz_mod_poly_shift_right(
526        f: *mut fmpz_mod_poly_struct,
527        g: *const fmpz_mod_poly_struct,
528        n: slong,
529        ctx: *const fmpz_mod_ctx_struct,
530    );
531    pub fn _fmpz_mod_poly_neg(
532        res: *mut fmpz,
533        poly: *const fmpz,
534        len: slong,
535        ctx: *const fmpz_mod_ctx_struct,
536    );
537    pub fn fmpz_mod_poly_neg(
538        res: *mut fmpz_mod_poly_struct,
539        poly: *const fmpz_mod_poly_struct,
540        ctx: *const fmpz_mod_ctx_struct,
541    );
542    pub fn _fmpz_mod_poly_add(
543        res: *mut fmpz,
544        poly1: *const fmpz,
545        len1: slong,
546        poly2: *const fmpz,
547        len2: slong,
548        ctx: *const fmpz_mod_ctx_struct,
549    );
550    pub fn fmpz_mod_poly_add(
551        res: *mut fmpz_mod_poly_struct,
552        poly1: *const fmpz_mod_poly_struct,
553        poly2: *const fmpz_mod_poly_struct,
554        ctx: *const fmpz_mod_ctx_struct,
555    );
556    pub fn _fmpz_mod_poly_sub(
557        res: *mut fmpz,
558        poly1: *const fmpz,
559        len1: slong,
560        poly2: *const fmpz,
561        len2: slong,
562        ctx: *const fmpz_mod_ctx_struct,
563    );
564    pub fn fmpz_mod_poly_sub(
565        res: *mut fmpz_mod_poly_struct,
566        poly1: *const fmpz_mod_poly_struct,
567        poly2: *const fmpz_mod_poly_struct,
568        ctx: *const fmpz_mod_ctx_struct,
569    );
570    pub fn fmpz_mod_poly_add_series(
571        res: *mut fmpz_mod_poly_struct,
572        poly1: *const fmpz_mod_poly_struct,
573        poly2: *const fmpz_mod_poly_struct,
574        n: slong,
575        ctx: *const fmpz_mod_ctx_struct,
576    );
577    pub fn fmpz_mod_poly_sub_series(
578        res: *mut fmpz_mod_poly_struct,
579        poly1: *const fmpz_mod_poly_struct,
580        poly2: *const fmpz_mod_poly_struct,
581        n: slong,
582        ctx: *const fmpz_mod_ctx_struct,
583    );
584    pub fn _fmpz_mod_poly_scalar_mul_fmpz(
585        res: *mut fmpz,
586        poly: *const fmpz,
587        len: slong,
588        x: *const fmpz,
589        ctx: *const fmpz_mod_ctx_struct,
590    );
591    pub fn _fmpz_mod_poly_scalar_mul_ui(
592        res: *mut fmpz,
593        poly: *const fmpz,
594        len: slong,
595        x: ulong,
596        ctx: *const fmpz_mod_ctx_struct,
597    );
598    pub fn fmpz_mod_poly_scalar_mul_fmpz(
599        res: *mut fmpz_mod_poly_struct,
600        poly: *const fmpz_mod_poly_struct,
601        x: *const fmpz,
602        ctx: *const fmpz_mod_ctx_struct,
603    );
604    pub fn fmpz_mod_poly_scalar_mul_ui(
605        res: *mut fmpz_mod_poly_struct,
606        poly: *const fmpz_mod_poly_struct,
607        x: ulong,
608        ctx: *const fmpz_mod_ctx_struct,
609    );
610    pub fn fmpz_mod_poly_scalar_addmul_fmpz(
611        A: *mut fmpz_mod_poly_struct,
612        B: *const fmpz_mod_poly_struct,
613        x: *const fmpz,
614        ctx: *const fmpz_mod_ctx_struct,
615    );
616    pub fn _fmpz_mod_poly_scalar_div_fmpz(
617        res: *mut fmpz,
618        poly: *const fmpz,
619        len: slong,
620        x: *const fmpz,
621        ctx: *const fmpz_mod_ctx_struct,
622    );
623    pub fn fmpz_mod_poly_scalar_div_fmpz(
624        res: *mut fmpz_mod_poly_struct,
625        poly: *const fmpz_mod_poly_struct,
626        x: *const fmpz,
627        ctx: *const fmpz_mod_ctx_struct,
628    );
629    pub fn _fmpz_mod_poly_mul(
630        res: *mut fmpz,
631        poly1: *const fmpz,
632        len1: slong,
633        poly2: *const fmpz,
634        len2: slong,
635        ctx: *const fmpz_mod_ctx_struct,
636    );
637    pub fn fmpz_mod_poly_mul(
638        res: *mut fmpz_mod_poly_struct,
639        poly1: *const fmpz_mod_poly_struct,
640        poly2: *const fmpz_mod_poly_struct,
641        ctx: *const fmpz_mod_ctx_struct,
642    );
643    pub fn _fmpz_mod_poly_mullow(
644        res: *mut fmpz,
645        poly1: *const fmpz,
646        len1: slong,
647        poly2: *const fmpz,
648        len2: slong,
649        n: slong,
650        ctx: *const fmpz_mod_ctx_struct,
651    );
652    pub fn fmpz_mod_poly_mullow(
653        res: *mut fmpz_mod_poly_struct,
654        poly1: *const fmpz_mod_poly_struct,
655        poly2: *const fmpz_mod_poly_struct,
656        n: slong,
657        ctx: *const fmpz_mod_ctx_struct,
658    );
659    pub fn _fmpz_mod_poly_mulmid(
660        res: *mut fmpz,
661        poly1: *const fmpz,
662        len1: slong,
663        poly2: *const fmpz,
664        len2: slong,
665        nlo: slong,
666        nhi: slong,
667        ctx: *const fmpz_mod_ctx_struct,
668    );
669    pub fn fmpz_mod_poly_mulmid(
670        res: *mut fmpz_mod_poly_struct,
671        poly1: *const fmpz_mod_poly_struct,
672        poly2: *const fmpz_mod_poly_struct,
673        nlo: slong,
674        nhi: slong,
675        ctx: *const fmpz_mod_ctx_struct,
676    );
677    pub fn _fmpz_mod_poly_sqr(
678        res: *mut fmpz,
679        poly: *const fmpz,
680        len: slong,
681        ctx: *const fmpz_mod_ctx_struct,
682    );
683    pub fn fmpz_mod_poly_mulhigh(
684        res: *mut fmpz_mod_poly_struct,
685        poly1: *const fmpz_mod_poly_struct,
686        poly2: *const fmpz_mod_poly_struct,
687        start: slong,
688        ctx: *const fmpz_mod_ctx_struct,
689    );
690    pub fn fmpz_mod_poly_sqr(
691        res: *mut fmpz_mod_poly_struct,
692        poly: *const fmpz_mod_poly_struct,
693        ctx: *const fmpz_mod_ctx_struct,
694    );
695    pub fn _fmpz_mod_poly_mulmod(
696        res: *mut fmpz,
697        poly1: *const fmpz,
698        len1: slong,
699        poly2: *const fmpz,
700        len2: slong,
701        f: *const fmpz,
702        lenf: slong,
703        ctx: *const fmpz_mod_ctx_struct,
704    );
705    pub fn fmpz_mod_poly_mulmod(
706        res: *mut fmpz_mod_poly_struct,
707        poly1: *const fmpz_mod_poly_struct,
708        poly2: *const fmpz_mod_poly_struct,
709        f: *const fmpz_mod_poly_struct,
710        ctx: *const fmpz_mod_ctx_struct,
711    );
712    pub fn _fmpz_mod_poly_mulmod_preinv(
713        res: *mut fmpz,
714        poly1: *const fmpz,
715        len1: slong,
716        poly2: *const fmpz,
717        len2: slong,
718        f: *const fmpz,
719        lenf: slong,
720        finv: *const fmpz,
721        lenfinv: slong,
722        ctx: *const fmpz_mod_ctx_struct,
723    );
724    pub fn fmpz_mod_poly_mulmod_preinv(
725        res: *mut fmpz_mod_poly_struct,
726        poly1: *const fmpz_mod_poly_struct,
727        poly2: *const fmpz_mod_poly_struct,
728        f: *const fmpz_mod_poly_struct,
729        finv: *const fmpz_mod_poly_struct,
730        ctx: *const fmpz_mod_ctx_struct,
731    );
732    pub fn _fmpz_mod_poly_pow(
733        rop: *mut fmpz,
734        op: *const fmpz,
735        len: slong,
736        e: ulong,
737        ctx: *const fmpz_mod_ctx_struct,
738    );
739    pub fn fmpz_mod_poly_pow(
740        rop: *mut fmpz_mod_poly_struct,
741        op: *const fmpz_mod_poly_struct,
742        e: ulong,
743        ctx: *const fmpz_mod_ctx_struct,
744    );
745    pub fn _fmpz_mod_poly_pow_trunc(
746        res: *mut fmpz,
747        poly: *const fmpz,
748        e: ulong,
749        trunc: slong,
750        ctx: *const fmpz_mod_ctx_struct,
751    );
752    pub fn fmpz_mod_poly_pow_trunc(
753        res: *mut fmpz_mod_poly_struct,
754        poly: *const fmpz_mod_poly_struct,
755        e: ulong,
756        trunc: slong,
757        ctx: *const fmpz_mod_ctx_struct,
758    );
759    pub fn _fmpz_mod_poly_pow_trunc_binexp(
760        res: *mut fmpz,
761        poly: *const fmpz,
762        e: ulong,
763        trunc: slong,
764        ctx: *const fmpz_mod_ctx_struct,
765    );
766    pub fn fmpz_mod_poly_pow_trunc_binexp(
767        res: *mut fmpz_mod_poly_struct,
768        poly: *const fmpz_mod_poly_struct,
769        e: ulong,
770        trunc: slong,
771        ctx: *const fmpz_mod_ctx_struct,
772    );
773    pub fn _fmpz_mod_poly_powmod_ui_binexp(
774        res: *mut fmpz,
775        poly: *const fmpz,
776        e: ulong,
777        f: *const fmpz,
778        lenf: slong,
779        ctx: *const fmpz_mod_ctx_struct,
780    );
781    pub fn fmpz_mod_poly_powmod_ui_binexp(
782        res: *mut fmpz_mod_poly_struct,
783        poly: *const fmpz_mod_poly_struct,
784        e: ulong,
785        f: *const fmpz_mod_poly_struct,
786        ctx: *const fmpz_mod_ctx_struct,
787    );
788    pub fn _fmpz_mod_poly_powmod_ui_binexp_preinv(
789        res: *mut fmpz,
790        poly: *const fmpz,
791        e: ulong,
792        f: *const fmpz,
793        lenf: slong,
794        finv: *const fmpz,
795        lenfinv: slong,
796        ctx: *const fmpz_mod_ctx_struct,
797    );
798    pub fn fmpz_mod_poly_powmod_ui_binexp_preinv(
799        res: *mut fmpz_mod_poly_struct,
800        poly: *const fmpz_mod_poly_struct,
801        e: ulong,
802        f: *const fmpz_mod_poly_struct,
803        finv: *const fmpz_mod_poly_struct,
804        ctx: *const fmpz_mod_ctx_struct,
805    );
806    pub fn _fmpz_mod_poly_powmod_fmpz_binexp(
807        res: *mut fmpz,
808        poly: *const fmpz,
809        e: *const fmpz,
810        f: *const fmpz,
811        lenf: slong,
812        ctx: *const fmpz_mod_ctx_struct,
813    );
814    pub fn fmpz_mod_poly_powmod_fmpz_binexp(
815        res: *mut fmpz_mod_poly_struct,
816        poly: *const fmpz_mod_poly_struct,
817        e: *const fmpz,
818        f: *const fmpz_mod_poly_struct,
819        ctx: *const fmpz_mod_ctx_struct,
820    );
821    pub fn _fmpz_mod_poly_powmod_fmpz_binexp_preinv(
822        res: *mut fmpz,
823        poly: *const fmpz,
824        e: *const fmpz,
825        f: *const fmpz,
826        lenf: slong,
827        finv: *const fmpz,
828        lenfinv: slong,
829        ctx: *const fmpz_mod_ctx_struct,
830    );
831    pub fn fmpz_mod_poly_powmod_fmpz_binexp_preinv(
832        res: *mut fmpz_mod_poly_struct,
833        poly: *const fmpz_mod_poly_struct,
834        e: *const fmpz,
835        f: *const fmpz_mod_poly_struct,
836        finv: *const fmpz_mod_poly_struct,
837        ctx: *const fmpz_mod_ctx_struct,
838    );
839    pub fn _fmpz_mod_poly_powmod_x_fmpz_preinv(
840        res: *mut fmpz,
841        e: *const fmpz,
842        f: *const fmpz,
843        lenf: slong,
844        finv: *const fmpz,
845        lenfinv: slong,
846        ctx: *const fmpz_mod_ctx_struct,
847    );
848    pub fn fmpz_mod_poly_powmod_x_fmpz_preinv(
849        res: *mut fmpz_mod_poly_struct,
850        e: *const fmpz,
851        f: *const fmpz_mod_poly_struct,
852        finv: *const fmpz_mod_poly_struct,
853        ctx: *const fmpz_mod_ctx_struct,
854    );
855    pub fn fmpz_mod_poly_powmod_linear_fmpz_preinv(
856        res: *mut fmpz_mod_poly_struct,
857        a: *const fmpz,
858        e: *const fmpz,
859        f: *const fmpz_mod_poly_struct,
860        finv: *const fmpz_mod_poly_struct,
861        ctx: *const fmpz_mod_ctx_struct,
862    );
863    pub fn _fmpz_mod_poly_powers_mod_preinv_naive(
864        res: *mut *mut fmpz,
865        f: *const fmpz,
866        flen: slong,
867        n: slong,
868        g: *const fmpz,
869        glen: slong,
870        ginv: *const fmpz,
871        ginvlen: slong,
872        ctx: *const fmpz_mod_ctx_struct,
873    );
874    pub fn fmpz_mod_poly_powers_mod_naive(
875        res: *mut fmpz_mod_poly_struct,
876        f: *const fmpz_mod_poly_struct,
877        n: slong,
878        g: *const fmpz_mod_poly_struct,
879        ctx: *const fmpz_mod_ctx_struct,
880    );
881    pub fn _fmpz_mod_poly_powers_mod_preinv_threaded_pool(
882        res: *mut *mut fmpz,
883        f: *const fmpz,
884        flen: slong,
885        n: slong,
886        g: *const fmpz,
887        glen: slong,
888        ginv: *const fmpz,
889        ginvlen: slong,
890        ctx: *const fmpz_mod_ctx_struct,
891        threads: *mut thread_pool_handle,
892        num_threads: slong,
893    );
894    pub fn fmpz_mod_poly_powers_mod_bsgs(
895        res: *mut fmpz_mod_poly_struct,
896        f: *const fmpz_mod_poly_struct,
897        n: slong,
898        g: *const fmpz_mod_poly_struct,
899        ctx: *const fmpz_mod_ctx_struct,
900    );
901    pub fn fmpz_mod_poly_frobenius_powers_2exp_precomp(
902        pow: *mut fmpz_mod_poly_frobenius_powers_2exp_struct,
903        f: *const fmpz_mod_poly_struct,
904        finv: *const fmpz_mod_poly_struct,
905        m: ulong,
906        ctx: *const fmpz_mod_ctx_struct,
907    );
908    pub fn fmpz_mod_poly_frobenius_powers_2exp_clear(
909        pow: *mut fmpz_mod_poly_frobenius_powers_2exp_struct,
910        ctx: *const fmpz_mod_ctx_struct,
911    );
912    pub fn fmpz_mod_poly_frobenius_power(
913        res: *mut fmpz_mod_poly_struct,
914        pow: *mut fmpz_mod_poly_frobenius_powers_2exp_struct,
915        f: *const fmpz_mod_poly_struct,
916        m: ulong,
917        ctx: *const fmpz_mod_ctx_struct,
918    );
919    pub fn fmpz_mod_poly_frobenius_powers_precomp(
920        pow: *mut fmpz_mod_poly_frobenius_powers_struct,
921        f: *const fmpz_mod_poly_struct,
922        finv: *const fmpz_mod_poly_struct,
923        m: ulong,
924        ctx: *const fmpz_mod_ctx_struct,
925    );
926    pub fn fmpz_mod_poly_frobenius_powers_clear(
927        pow: *mut fmpz_mod_poly_frobenius_powers_struct,
928        ctx: *const fmpz_mod_ctx_struct,
929    );
930    pub fn _fmpz_mod_poly_divrem_basecase(
931        Q: *mut fmpz,
932        R: *mut fmpz,
933        A: *const fmpz,
934        lenA: slong,
935        B: *const fmpz,
936        lenB: slong,
937        invB: *const fmpz,
938        ctx: *const fmpz_mod_ctx_struct,
939    );
940    pub fn fmpz_mod_poly_divrem_basecase(
941        Q: *mut fmpz_mod_poly_struct,
942        R: *mut fmpz_mod_poly_struct,
943        A: *const fmpz_mod_poly_struct,
944        B: *const fmpz_mod_poly_struct,
945        ctx: *const fmpz_mod_ctx_struct,
946    );
947    pub fn _fmpz_mod_poly_div_newton_n_preinv(
948        Q: *mut fmpz,
949        A: *const fmpz,
950        lenA: slong,
951        UNUSED_B: *const fmpz,
952        lenB: slong,
953        Binv: *const fmpz,
954        lenBinv: slong,
955        ctx: *const fmpz_mod_ctx_struct,
956    );
957    pub fn fmpz_mod_poly_div_newton_n_preinv(
958        Q: *mut fmpz_mod_poly_struct,
959        A: *const fmpz_mod_poly_struct,
960        B: *const fmpz_mod_poly_struct,
961        Binv: *const fmpz_mod_poly_struct,
962        ctx: *const fmpz_mod_ctx_struct,
963    );
964    pub fn _fmpz_mod_poly_divrem_newton_n_preinv(
965        Q: *mut fmpz,
966        R: *mut fmpz,
967        A: *const fmpz,
968        lenA: slong,
969        B: *const fmpz,
970        lenB: slong,
971        Binv: *const fmpz,
972        lenBinv: slong,
973        ctx: *const fmpz_mod_ctx_struct,
974    );
975    pub fn fmpz_mod_poly_divrem_newton_n_preinv(
976        Q: *mut fmpz_mod_poly_struct,
977        R: *mut fmpz_mod_poly_struct,
978        A: *const fmpz_mod_poly_struct,
979        B: *const fmpz_mod_poly_struct,
980        Binv: *const fmpz_mod_poly_struct,
981        ctx: *const fmpz_mod_ctx_struct,
982    );
983    pub fn fmpz_mod_poly_remove(
984        f: *mut fmpz_mod_poly_struct,
985        p: *const fmpz_mod_poly_struct,
986        ctx: *const fmpz_mod_ctx_struct,
987    ) -> ulong;
988    pub fn _fmpz_mod_poly_rem_basecase(
989        R: *mut fmpz,
990        A: *const fmpz,
991        lenA: slong,
992        B: *const fmpz,
993        lenB: slong,
994        invB: *const fmpz,
995        ctx: *const fmpz_mod_ctx_struct,
996    );
997    pub fn fmpz_mod_poly_rem_basecase(
998        R: *mut fmpz_mod_poly_struct,
999        A: *const fmpz_mod_poly_struct,
1000        B: *const fmpz_mod_poly_struct,
1001        ctx: *const fmpz_mod_ctx_struct,
1002    );
1003    pub fn _fmpz_mod_poly_divrem(
1004        Q: *mut fmpz,
1005        R: *mut fmpz,
1006        A: *const fmpz,
1007        lenA: slong,
1008        B: *const fmpz,
1009        lenB: slong,
1010        invB: *const fmpz,
1011        ctx: *const fmpz_mod_ctx_struct,
1012    );
1013    pub fn fmpz_mod_poly_divrem(
1014        Q: *mut fmpz_mod_poly_struct,
1015        R: *mut fmpz_mod_poly_struct,
1016        A: *const fmpz_mod_poly_struct,
1017        B: *const fmpz_mod_poly_struct,
1018        ctx: *const fmpz_mod_ctx_struct,
1019    );
1020    pub fn _fmpz_mod_poly_div(
1021        Q: *mut fmpz,
1022        A: *const fmpz,
1023        lenA: slong,
1024        B: *const fmpz,
1025        lenB: slong,
1026        invB: *const fmpz,
1027        ctx: *const fmpz_mod_ctx_struct,
1028    );
1029    pub fn fmpz_mod_poly_div(
1030        Q: *mut fmpz_mod_poly_struct,
1031        A: *const fmpz_mod_poly_struct,
1032        B: *const fmpz_mod_poly_struct,
1033        ctx: *const fmpz_mod_ctx_struct,
1034    );
1035    pub fn _fmpz_mod_poly_divrem_f(
1036        f: *mut fmpz,
1037        Q: *mut fmpz,
1038        R: *mut fmpz,
1039        A: *const fmpz,
1040        lenA: slong,
1041        B: *const fmpz,
1042        lenB: slong,
1043        ctx: *const fmpz_mod_ctx_struct,
1044    );
1045    pub fn fmpz_mod_poly_divrem_f(
1046        f: *mut fmpz,
1047        Q: *mut fmpz_mod_poly_struct,
1048        R: *mut fmpz_mod_poly_struct,
1049        A: *const fmpz_mod_poly_struct,
1050        B: *const fmpz_mod_poly_struct,
1051        ctx: *const fmpz_mod_ctx_struct,
1052    );
1053    pub fn _fmpz_mod_poly_rem(
1054        R: *mut fmpz,
1055        A: *const fmpz,
1056        lenA: slong,
1057        B: *const fmpz,
1058        lenB: slong,
1059        invB: *const fmpz,
1060        ctx: *const fmpz_mod_ctx_struct,
1061    );
1062    pub fn fmpz_mod_poly_rem(
1063        R: *mut fmpz_mod_poly_struct,
1064        A: *const fmpz_mod_poly_struct,
1065        B: *const fmpz_mod_poly_struct,
1066        ctx: *const fmpz_mod_ctx_struct,
1067    );
1068    pub fn fmpz_mod_poly_rem_f(
1069        f: *mut fmpz,
1070        R: *mut fmpz_mod_poly_struct,
1071        A: *const fmpz_mod_poly_struct,
1072        B: *const fmpz_mod_poly_struct,
1073        ctx: *const fmpz_mod_ctx_struct,
1074    );
1075    pub fn _fmpz_mod_poly_divides_classical(
1076        Q: *mut fmpz,
1077        A: *const fmpz,
1078        lenA: slong,
1079        B: *const fmpz,
1080        lenB: slong,
1081        ctx: *const fmpz_mod_ctx_struct,
1082    ) -> libc::c_int;
1083    pub fn fmpz_mod_poly_divides_classical(
1084        Q: *mut fmpz_mod_poly_struct,
1085        A: *const fmpz_mod_poly_struct,
1086        B: *const fmpz_mod_poly_struct,
1087        ctx: *const fmpz_mod_ctx_struct,
1088    ) -> libc::c_int;
1089    pub fn _fmpz_mod_poly_divides(
1090        Q: *mut fmpz,
1091        A: *const fmpz,
1092        lenA: slong,
1093        B: *const fmpz,
1094        lenB: slong,
1095        ctx: *const fmpz_mod_ctx_struct,
1096    ) -> libc::c_int;
1097    pub fn fmpz_mod_poly_divides(
1098        Q: *mut fmpz_mod_poly_struct,
1099        A: *const fmpz_mod_poly_struct,
1100        B: *const fmpz_mod_poly_struct,
1101        ctx: *const fmpz_mod_ctx_struct,
1102    ) -> libc::c_int;
1103    pub fn _fmpz_mod_poly_inv_series(
1104        Qinv: *mut fmpz,
1105        Q: *const fmpz,
1106        Qlen: slong,
1107        n: slong,
1108        ctx: *const fmpz_mod_ctx_struct,
1109    );
1110    pub fn fmpz_mod_poly_inv_series(
1111        Qinv: *mut fmpz_mod_poly_struct,
1112        Q: *const fmpz_mod_poly_struct,
1113        n: slong,
1114        ctx: *const fmpz_mod_ctx_struct,
1115    );
1116    pub fn fmpz_mod_poly_inv_series_f(
1117        f: *mut fmpz,
1118        Qinv: *mut fmpz_mod_poly_struct,
1119        Q: *const fmpz_mod_poly_struct,
1120        n: slong,
1121        ctx: *const fmpz_mod_ctx_struct,
1122    );
1123    pub fn _fmpz_mod_poly_div_series(
1124        Q: *mut fmpz,
1125        A: *const fmpz,
1126        Alen: slong,
1127        B: *const fmpz,
1128        Blen: slong,
1129        n: slong,
1130        ctx: *const fmpz_mod_ctx_struct,
1131    );
1132    pub fn fmpz_mod_poly_div_series(
1133        Q: *mut fmpz_mod_poly_struct,
1134        A: *const fmpz_mod_poly_struct,
1135        B: *const fmpz_mod_poly_struct,
1136        n: slong,
1137        ctx: *const fmpz_mod_ctx_struct,
1138    );
1139    pub fn fmpz_mod_poly_make_monic(
1140        res: *mut fmpz_mod_poly_struct,
1141        poly: *const fmpz_mod_poly_struct,
1142        ctx: *const fmpz_mod_ctx_struct,
1143    );
1144    pub fn fmpz_mod_poly_make_monic_f(
1145        f: *mut fmpz,
1146        res: *mut fmpz_mod_poly_struct,
1147        poly: *const fmpz_mod_poly_struct,
1148        ctx: *const fmpz_mod_ctx_struct,
1149    );
1150    pub fn _fmpz_mod_poly_gcd(
1151        G: *mut fmpz,
1152        A: *const fmpz,
1153        lenA: slong,
1154        B: *const fmpz,
1155        lenB: slong,
1156        ctx: *const fmpz_mod_ctx_struct,
1157    ) -> slong;
1158    pub fn fmpz_mod_poly_gcd(
1159        G: *mut fmpz_mod_poly_struct,
1160        A: *const fmpz_mod_poly_struct,
1161        B: *const fmpz_mod_poly_struct,
1162        ctx: *const fmpz_mod_ctx_struct,
1163    );
1164    pub fn _fmpz_mod_poly_gcd_euclidean_f(
1165        f: *mut fmpz,
1166        G: *mut fmpz,
1167        A: *const fmpz,
1168        lenA: slong,
1169        B: *const fmpz,
1170        lenB: slong,
1171        ctx: *const fmpz_mod_ctx_struct,
1172    ) -> slong;
1173    pub fn fmpz_mod_poly_gcd_euclidean_f(
1174        f: *mut fmpz,
1175        G: *mut fmpz_mod_poly_struct,
1176        A: *const fmpz_mod_poly_struct,
1177        B: *const fmpz_mod_poly_struct,
1178        ctx: *const fmpz_mod_ctx_struct,
1179    );
1180    #[link_name = "_fmpz_mod_poly_gcd_f__extern"]
1181    pub fn _fmpz_mod_poly_gcd_f(
1182        f: *mut fmpz,
1183        G: *mut fmpz,
1184        A: *const fmpz,
1185        lenA: slong,
1186        B: *const fmpz,
1187        lenB: slong,
1188        ctx: *const fmpz_mod_ctx_struct,
1189    ) -> slong;
1190    #[link_name = "fmpz_mod_poly_gcd_f__extern"]
1191    pub fn fmpz_mod_poly_gcd_f(
1192        f: *mut fmpz,
1193        G: *mut fmpz_mod_poly_struct,
1194        A: *const fmpz_mod_poly_struct,
1195        B: *const fmpz_mod_poly_struct,
1196        ctx: *const fmpz_mod_ctx_struct,
1197    );
1198    pub fn _fmpz_mod_poly_hgcd(
1199        M: *mut *mut fmpz,
1200        lenM: *mut slong,
1201        A: *mut fmpz,
1202        lenA: *mut slong,
1203        B: *mut fmpz,
1204        lenB: *mut slong,
1205        a: *const fmpz,
1206        lena: slong,
1207        b: *const fmpz,
1208        lenb: slong,
1209        ctx: *const fmpz_mod_ctx_struct,
1210    ) -> slong;
1211    pub fn _fmpz_mod_poly_xgcd_euclidean_f(
1212        f: *mut fmpz,
1213        G: *mut fmpz,
1214        S: *mut fmpz,
1215        T: *mut fmpz,
1216        A: *const fmpz,
1217        lenA: slong,
1218        B: *const fmpz,
1219        lenB: slong,
1220        invB: *const fmpz,
1221        ctx: *const fmpz_mod_ctx_struct,
1222    ) -> slong;
1223    pub fn fmpz_mod_poly_xgcd_euclidean_f(
1224        f: *mut fmpz,
1225        G: *mut fmpz_mod_poly_struct,
1226        S: *mut fmpz_mod_poly_struct,
1227        T: *mut fmpz_mod_poly_struct,
1228        A: *const fmpz_mod_poly_struct,
1229        B: *const fmpz_mod_poly_struct,
1230        ctx: *const fmpz_mod_ctx_struct,
1231    );
1232    pub fn _fmpz_mod_poly_xgcd(
1233        G: *mut fmpz,
1234        S: *mut fmpz,
1235        T: *mut fmpz,
1236        A: *const fmpz,
1237        lenA: slong,
1238        B: *const fmpz,
1239        lenB: slong,
1240        UNUSED_invB: *const fmpz,
1241        ctx: *const fmpz_mod_ctx_struct,
1242    ) -> slong;
1243    pub fn fmpz_mod_poly_xgcd(
1244        G: *mut fmpz_mod_poly_struct,
1245        S: *mut fmpz_mod_poly_struct,
1246        T: *mut fmpz_mod_poly_struct,
1247        A: *const fmpz_mod_poly_struct,
1248        B: *const fmpz_mod_poly_struct,
1249        ctx: *const fmpz_mod_ctx_struct,
1250    );
1251    #[link_name = "_fmpz_mod_poly_xgcd_f__extern"]
1252    pub fn _fmpz_mod_poly_xgcd_f(
1253        f: *mut fmpz,
1254        G: *mut fmpz,
1255        S: *mut fmpz,
1256        T: *mut fmpz,
1257        A: *const fmpz,
1258        lenA: slong,
1259        B: *const fmpz,
1260        lenB: slong,
1261        invB: *const fmpz,
1262        ctx: *const fmpz_mod_ctx_struct,
1263    ) -> slong;
1264    #[link_name = "fmpz_mod_poly_xgcd_f__extern"]
1265    pub fn fmpz_mod_poly_xgcd_f(
1266        f: *mut fmpz,
1267        G: *mut fmpz_mod_poly_struct,
1268        S: *mut fmpz_mod_poly_struct,
1269        T: *mut fmpz_mod_poly_struct,
1270        A: *const fmpz_mod_poly_struct,
1271        B: *const fmpz_mod_poly_struct,
1272        ctx: *const fmpz_mod_ctx_struct,
1273    );
1274    pub fn _fmpz_mod_poly_gcdinv_euclidean_f(
1275        f: *mut fmpz,
1276        G: *mut fmpz,
1277        S: *mut fmpz,
1278        A: *const fmpz,
1279        lenA: slong,
1280        B: *const fmpz,
1281        lenB: slong,
1282        UNUSED_invA: *const fmpz,
1283        ctx: *const fmpz_mod_ctx_struct,
1284    ) -> slong;
1285    pub fn fmpz_mod_poly_gcdinv_euclidean_f(
1286        f: *mut fmpz,
1287        G: *mut fmpz_mod_poly_struct,
1288        S: *mut fmpz_mod_poly_struct,
1289        A: *const fmpz_mod_poly_struct,
1290        B: *const fmpz_mod_poly_struct,
1291        ctx: *const fmpz_mod_ctx_struct,
1292    );
1293    pub fn _fmpz_mod_poly_gcdinv_euclidean(
1294        G: *mut fmpz,
1295        S: *mut fmpz,
1296        A: *const fmpz,
1297        lenA: slong,
1298        B: *const fmpz,
1299        lenB: slong,
1300        invA: *const fmpz,
1301        ctx: *const fmpz_mod_ctx_struct,
1302    ) -> slong;
1303    pub fn fmpz_mod_poly_gcdinv_euclidean(
1304        G: *mut fmpz_mod_poly_struct,
1305        S: *mut fmpz_mod_poly_struct,
1306        A: *const fmpz_mod_poly_struct,
1307        B: *const fmpz_mod_poly_struct,
1308        ctx: *const fmpz_mod_ctx_struct,
1309    );
1310    pub fn _fmpz_mod_poly_gcdinv(
1311        G: *mut fmpz,
1312        S: *mut fmpz,
1313        A: *const fmpz,
1314        lenA: slong,
1315        B: *const fmpz,
1316        lenB: slong,
1317        ctx: *const fmpz_mod_ctx_struct,
1318    ) -> slong;
1319    pub fn fmpz_mod_poly_gcdinv(
1320        G: *mut fmpz_mod_poly_struct,
1321        S: *mut fmpz_mod_poly_struct,
1322        A: *const fmpz_mod_poly_struct,
1323        B: *const fmpz_mod_poly_struct,
1324        ctx: *const fmpz_mod_ctx_struct,
1325    );
1326    pub fn _fmpz_mod_poly_gcdinv_f(
1327        f: *mut fmpz,
1328        G: *mut fmpz,
1329        S: *mut fmpz,
1330        A: *const fmpz,
1331        lenA: slong,
1332        B: *const fmpz,
1333        lenB: slong,
1334        ctx: *const fmpz_mod_ctx_struct,
1335    ) -> slong;
1336    pub fn fmpz_mod_poly_gcdinv_f(
1337        f: *mut fmpz,
1338        G: *mut fmpz_mod_poly_struct,
1339        S: *mut fmpz_mod_poly_struct,
1340        A: *const fmpz_mod_poly_struct,
1341        B: *const fmpz_mod_poly_struct,
1342        ctx: *const fmpz_mod_ctx_struct,
1343    );
1344    pub fn _fmpz_mod_poly_invmod(
1345        A: *mut fmpz,
1346        B: *const fmpz,
1347        lenB: slong,
1348        P: *const fmpz,
1349        lenP: slong,
1350        ctx: *const fmpz_mod_ctx_struct,
1351    ) -> libc::c_int;
1352    pub fn _fmpz_mod_poly_invmod_f(
1353        f: *mut fmpz,
1354        A: *mut fmpz,
1355        B: *const fmpz,
1356        lenB: slong,
1357        P: *const fmpz,
1358        lenP: slong,
1359        ctx: *const fmpz_mod_ctx_struct,
1360    ) -> libc::c_int;
1361    pub fn fmpz_mod_poly_invmod(
1362        A: *mut fmpz_mod_poly_struct,
1363        B: *const fmpz_mod_poly_struct,
1364        P: *const fmpz_mod_poly_struct,
1365        ctx: *const fmpz_mod_ctx_struct,
1366    ) -> libc::c_int;
1367    pub fn fmpz_mod_poly_invmod_f(
1368        f: *mut fmpz,
1369        A: *mut fmpz_mod_poly_struct,
1370        B: *const fmpz_mod_poly_struct,
1371        P: *const fmpz_mod_poly_struct,
1372        ctx: *const fmpz_mod_ctx_struct,
1373    ) -> libc::c_int;
1374    pub fn _fmpz_mod_poly_invsqrt_series(
1375        g: *mut fmpz,
1376        h: *const fmpz,
1377        hlen: slong,
1378        n: slong,
1379        mod_: *const fmpz_mod_ctx_struct,
1380    );
1381    pub fn fmpz_mod_poly_invsqrt_series(
1382        g: *mut fmpz_mod_poly_struct,
1383        h: *const fmpz_mod_poly_struct,
1384        n: slong,
1385        ctx: *const fmpz_mod_ctx_struct,
1386    );
1387    pub fn _fmpz_mod_poly_sqrt_series(
1388        g: *mut fmpz,
1389        h: *const fmpz,
1390        hlen: slong,
1391        n: slong,
1392        mod_: *const fmpz_mod_ctx_struct,
1393    );
1394    pub fn fmpz_mod_poly_sqrt_series(
1395        g: *mut fmpz_mod_poly_struct,
1396        h: *const fmpz_mod_poly_struct,
1397        n: slong,
1398        ctx: *const fmpz_mod_ctx_struct,
1399    );
1400    pub fn _fmpz_mod_poly_sqrt(
1401        s: *mut fmpz,
1402        p: *const fmpz,
1403        len: slong,
1404        mod_: *const fmpz_mod_ctx_struct,
1405    ) -> libc::c_int;
1406    pub fn fmpz_mod_poly_sqrt(
1407        b: *mut fmpz_mod_poly_struct,
1408        a: *const fmpz_mod_poly_struct,
1409        ctx: *const fmpz_mod_ctx_struct,
1410    ) -> libc::c_int;
1411    pub fn _fmpz_mod_poly_minpoly_bm(
1412        poly: *mut fmpz,
1413        seq: *const fmpz,
1414        len: slong,
1415        ctx: *const fmpz_mod_ctx_struct,
1416    ) -> slong;
1417    pub fn fmpz_mod_poly_minpoly_bm(
1418        poly: *mut fmpz_mod_poly_struct,
1419        seq: *const fmpz,
1420        len: slong,
1421        ctx: *const fmpz_mod_ctx_struct,
1422    );
1423    pub fn _fmpz_mod_poly_minpoly_hgcd(
1424        poly: *mut fmpz,
1425        seq: *const fmpz,
1426        len: slong,
1427        ctx: *const fmpz_mod_ctx_struct,
1428    ) -> slong;
1429    pub fn fmpz_mod_poly_minpoly_hgcd(
1430        poly: *mut fmpz_mod_poly_struct,
1431        seq: *const fmpz,
1432        len: slong,
1433        ctx: *const fmpz_mod_ctx_struct,
1434    );
1435    pub fn _fmpz_mod_poly_minpoly(
1436        poly: *mut fmpz,
1437        seq: *const fmpz,
1438        len: slong,
1439        ctx: *const fmpz_mod_ctx_struct,
1440    ) -> slong;
1441    pub fn fmpz_mod_poly_minpoly(
1442        poly: *mut fmpz_mod_poly_struct,
1443        seq: *const fmpz,
1444        len: slong,
1445        ctx: *const fmpz_mod_ctx_struct,
1446    );
1447    pub fn _fmpz_mod_poly_resultant(
1448        res: *mut fmpz,
1449        A: *const fmpz,
1450        lenA: slong,
1451        B: *const fmpz,
1452        lenB: slong,
1453        ctx: *const fmpz_mod_ctx_struct,
1454    );
1455    pub fn fmpz_mod_poly_resultant(
1456        res: *mut fmpz,
1457        A: *const fmpz_mod_poly_struct,
1458        B: *const fmpz_mod_poly_struct,
1459        ctx: *const fmpz_mod_ctx_struct,
1460    );
1461    pub fn _fmpz_mod_poly_discriminant(
1462        d: *mut fmpz,
1463        poly: *const fmpz,
1464        len: slong,
1465        ctx: *const fmpz_mod_ctx_struct,
1466    );
1467    pub fn fmpz_mod_poly_discriminant(
1468        d: *mut fmpz,
1469        f: *const fmpz_mod_poly_struct,
1470        ctx: *const fmpz_mod_ctx_struct,
1471    );
1472    pub fn _fmpz_mod_poly_derivative(
1473        res: *mut fmpz,
1474        poly: *const fmpz,
1475        len: slong,
1476        ctx: *const fmpz_mod_ctx_struct,
1477    );
1478    pub fn fmpz_mod_poly_derivative(
1479        res: *mut fmpz_mod_poly_struct,
1480        poly: *const fmpz_mod_poly_struct,
1481        ctx: *const fmpz_mod_ctx_struct,
1482    );
1483    pub fn _fmpz_mod_poly_evaluate_fmpz(
1484        res: *mut fmpz,
1485        poly: *const fmpz,
1486        len: slong,
1487        a: *const fmpz,
1488        ctx: *const fmpz_mod_ctx_struct,
1489    );
1490    pub fn fmpz_mod_poly_evaluate_fmpz(
1491        res: *mut fmpz,
1492        poly: *const fmpz_mod_poly_struct,
1493        a: *const fmpz,
1494        ctx: *const fmpz_mod_ctx_struct,
1495    );
1496    pub fn _fmpz_mod_poly_tree_alloc(len: slong) -> *mut *mut fmpz_poly_struct;
1497    pub fn _fmpz_mod_poly_tree_free(tree: *mut *mut fmpz_poly_struct, len: slong);
1498    pub fn _fmpz_mod_poly_tree_build(
1499        tree: *mut *mut fmpz_poly_struct,
1500        roots: *const fmpz,
1501        len: slong,
1502        ctx: *const fmpz_mod_ctx_struct,
1503    );
1504    pub fn _fmpz_mod_poly_evaluate_fmpz_vec_iter(
1505        ys: *mut fmpz,
1506        coeffs: *const fmpz,
1507        len: slong,
1508        xs: *const fmpz,
1509        n: slong,
1510        ctx: *const fmpz_mod_ctx_struct,
1511    );
1512    pub fn fmpz_mod_poly_evaluate_fmpz_vec_iter(
1513        ys: *mut fmpz,
1514        poly: *const fmpz_mod_poly_struct,
1515        xs: *const fmpz,
1516        n: slong,
1517        ctx: *const fmpz_mod_ctx_struct,
1518    );
1519    pub fn _fmpz_mod_poly_evaluate_fmpz_vec_fast_precomp(
1520        vs: *mut fmpz,
1521        poly: *const fmpz,
1522        plen: slong,
1523        tree: *const *mut fmpz_poly_struct,
1524        len: slong,
1525        ctx: *const fmpz_mod_ctx_struct,
1526    );
1527    pub fn _fmpz_mod_poly_evaluate_fmpz_vec_fast(
1528        ys: *mut fmpz,
1529        poly: *const fmpz,
1530        plen: slong,
1531        xs: *const fmpz,
1532        n: slong,
1533        ctx: *const fmpz_mod_ctx_struct,
1534    );
1535    pub fn fmpz_mod_poly_evaluate_fmpz_vec_fast(
1536        ys: *mut fmpz,
1537        poly: *const fmpz_mod_poly_struct,
1538        xs: *const fmpz,
1539        n: slong,
1540        ctx: *const fmpz_mod_ctx_struct,
1541    );
1542    pub fn _fmpz_mod_poly_evaluate_fmpz_vec(
1543        ys: *mut fmpz,
1544        coeffs: *const fmpz,
1545        len: slong,
1546        xs: *const fmpz,
1547        n: slong,
1548        ctx: *const fmpz_mod_ctx_struct,
1549    );
1550    pub fn fmpz_mod_poly_evaluate_fmpz_vec(
1551        ys: *mut fmpz,
1552        poly: *const fmpz_mod_poly_struct,
1553        xs: *const fmpz,
1554        n: slong,
1555        ctx: *const fmpz_mod_ctx_struct,
1556    );
1557    pub fn _fmpz_mod_poly_compose(
1558        res: *mut fmpz,
1559        poly1: *const fmpz,
1560        len1: slong,
1561        poly2: *const fmpz,
1562        len2: slong,
1563        ctx: *const fmpz_mod_ctx_struct,
1564    );
1565    pub fn fmpz_mod_poly_compose(
1566        res: *mut fmpz_mod_poly_struct,
1567        poly1: *const fmpz_mod_poly_struct,
1568        poly2: *const fmpz_mod_poly_struct,
1569        ctx: *const fmpz_mod_ctx_struct,
1570    );
1571    pub fn _fmpz_mod_poly_compose_mod(
1572        res: *mut fmpz,
1573        f: *const fmpz,
1574        lenf: slong,
1575        g: *const fmpz,
1576        h: *const fmpz,
1577        lenh: slong,
1578        ctx: *const fmpz_mod_ctx_struct,
1579    );
1580    pub fn fmpz_mod_poly_compose_mod(
1581        res: *mut fmpz_mod_poly_struct,
1582        poly1: *const fmpz_mod_poly_struct,
1583        poly2: *const fmpz_mod_poly_struct,
1584        poly3: *const fmpz_mod_poly_struct,
1585        ctx: *const fmpz_mod_ctx_struct,
1586    );
1587    pub fn _fmpz_mod_poly_compose_mod_brent_kung(
1588        res: *mut fmpz,
1589        poly1: *const fmpz,
1590        len1: slong,
1591        poly2: *const fmpz,
1592        poly3: *const fmpz,
1593        len3: slong,
1594        ctx: *const fmpz_mod_ctx_struct,
1595    );
1596    pub fn fmpz_mod_poly_compose_mod_brent_kung(
1597        res: *mut fmpz_mod_poly_struct,
1598        poly1: *const fmpz_mod_poly_struct,
1599        poly2: *const fmpz_mod_poly_struct,
1600        poly3: *const fmpz_mod_poly_struct,
1601        ctx: *const fmpz_mod_ctx_struct,
1602    );
1603    pub fn _fmpz_mod_poly_reduce_matrix_mod_poly(
1604        A: *mut fmpz_mat_struct,
1605        B: *const fmpz_mat_struct,
1606        f: *const fmpz_mod_poly_struct,
1607        ctx: *const fmpz_mod_ctx_struct,
1608    );
1609    pub fn _fmpz_mod_poly_precompute_matrix(
1610        A: *mut fmpz_mat_struct,
1611        poly1: *const fmpz,
1612        poly2: *const fmpz,
1613        len2: slong,
1614        poly2inv: *const fmpz,
1615        len2inv: slong,
1616        ctx: *const fmpz_mod_ctx_struct,
1617    );
1618    pub fn _fmpz_mod_poly_precompute_matrix_worker(arg_ptr: *mut libc::c_void);
1619    pub fn fmpz_mod_poly_precompute_matrix(
1620        A: *mut fmpz_mat_struct,
1621        poly1: *const fmpz_mod_poly_struct,
1622        poly2: *const fmpz_mod_poly_struct,
1623        poly2inv: *const fmpz_mod_poly_struct,
1624        ctx: *const fmpz_mod_ctx_struct,
1625    );
1626    pub fn _fmpz_mod_poly_compose_mod_brent_kung_precomp_preinv(
1627        res: *mut fmpz,
1628        poly1: *const fmpz,
1629        len1: slong,
1630        A: *const fmpz_mat_struct,
1631        poly3: *const fmpz,
1632        len3: slong,
1633        poly3inv: *const fmpz,
1634        len3inv: slong,
1635        ctx: *const fmpz_mod_ctx_struct,
1636    );
1637    pub fn _fmpz_mod_poly_compose_mod_brent_kung_precomp_preinv_worker(arg_ptr: *mut libc::c_void);
1638    pub fn fmpz_mod_poly_compose_mod_brent_kung_precomp_preinv(
1639        res: *mut fmpz_mod_poly_struct,
1640        poly1: *const fmpz_mod_poly_struct,
1641        A: *const fmpz_mat_struct,
1642        poly3: *const fmpz_mod_poly_struct,
1643        poly3inv: *const fmpz_mod_poly_struct,
1644        ctx: *const fmpz_mod_ctx_struct,
1645    );
1646    pub fn _fmpz_mod_poly_compose_mod_brent_kung_preinv(
1647        res: *mut fmpz,
1648        poly1: *const fmpz,
1649        len1: slong,
1650        poly2: *const fmpz,
1651        poly3: *const fmpz,
1652        len3: slong,
1653        poly3inv: *const fmpz,
1654        len3inv: slong,
1655        ctx: *const fmpz_mod_ctx_struct,
1656    );
1657    pub fn fmpz_mod_poly_compose_mod_brent_kung_preinv(
1658        res: *mut fmpz_mod_poly_struct,
1659        poly1: *const fmpz_mod_poly_struct,
1660        poly2: *const fmpz_mod_poly_struct,
1661        poly3: *const fmpz_mod_poly_struct,
1662        poly3inv: *const fmpz_mod_poly_struct,
1663        ctx: *const fmpz_mod_ctx_struct,
1664    );
1665    pub fn _fmpz_mod_poly_compose_mod_horner(
1666        res: *mut fmpz,
1667        f: *const fmpz,
1668        lenf: slong,
1669        g: *const fmpz,
1670        h: *const fmpz,
1671        lenh: slong,
1672        ctx: *const fmpz_mod_ctx_struct,
1673    );
1674    pub fn fmpz_mod_poly_compose_mod_horner(
1675        res: *mut fmpz_mod_poly_struct,
1676        poly1: *const fmpz_mod_poly_struct,
1677        poly2: *const fmpz_mod_poly_struct,
1678        poly3: *const fmpz_mod_poly_struct,
1679        ctx: *const fmpz_mod_ctx_struct,
1680    );
1681    pub fn _fmpz_mod_poly_compose_mod_brent_kung_vec_preinv(
1682        res: *mut fmpz_mod_poly_struct,
1683        polys: *const fmpz_mod_poly_struct,
1684        UNUSED_lenpolys: slong,
1685        l: slong,
1686        g: *const fmpz,
1687        glen: slong,
1688        poly: *const fmpz,
1689        len: slong,
1690        polyinv: *const fmpz,
1691        leninv: slong,
1692        ctx: *const fmpz_mod_ctx_struct,
1693    );
1694    pub fn fmpz_mod_poly_compose_mod_brent_kung_vec_preinv(
1695        res: *mut fmpz_mod_poly_struct,
1696        polys: *const fmpz_mod_poly_struct,
1697        len1: slong,
1698        n: slong,
1699        g: *const fmpz_mod_poly_struct,
1700        poly: *const fmpz_mod_poly_struct,
1701        polyinv: *const fmpz_mod_poly_struct,
1702        ctx: *const fmpz_mod_ctx_struct,
1703    );
1704    pub fn _fmpz_mod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1705        res: *mut fmpz_mod_poly_struct,
1706        polys: *const fmpz_mod_poly_struct,
1707        UNUSED_lenpolys: slong,
1708        l: slong,
1709        g: *const fmpz,
1710        glen: slong,
1711        poly: *const fmpz,
1712        len: slong,
1713        polyinv: *const fmpz,
1714        leninv: slong,
1715        ctx: *const fmpz_mod_ctx_struct,
1716        threads: *mut thread_pool_handle,
1717        num_threads: slong,
1718    );
1719    pub fn fmpz_mod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1720        res: *mut fmpz_mod_poly_struct,
1721        polys: *const fmpz_mod_poly_struct,
1722        len1: slong,
1723        n: slong,
1724        g: *const fmpz_mod_poly_struct,
1725        poly: *const fmpz_mod_poly_struct,
1726        polyinv: *const fmpz_mod_poly_struct,
1727        ctx: *const fmpz_mod_ctx_struct,
1728        threads: *mut thread_pool_handle,
1729        num_threads: slong,
1730    );
1731    pub fn fmpz_mod_poly_compose_mod_brent_kung_vec_preinv_threaded(
1732        res: *mut fmpz_mod_poly_struct,
1733        polys: *const fmpz_mod_poly_struct,
1734        len1: slong,
1735        n: slong,
1736        g: *const fmpz_mod_poly_struct,
1737        poly: *const fmpz_mod_poly_struct,
1738        polyinv: *const fmpz_mod_poly_struct,
1739        ctx: *const fmpz_mod_ctx_struct,
1740    );
1741    pub fn fmpz_mod_poly_hamming_weight(
1742        A: *const fmpz_mod_poly_struct,
1743        UNUSED_ctx: *const fmpz_mod_ctx_struct,
1744    ) -> slong;
1745    pub fn _fmpz_mod_poly_radix_init(
1746        Rpow: *mut *mut fmpz,
1747        Rinv: *mut *mut fmpz,
1748        R: *const fmpz,
1749        lenR: slong,
1750        k: slong,
1751        invL: *const fmpz,
1752        ctx: *const fmpz_mod_ctx_struct,
1753    );
1754    pub fn fmpz_mod_poly_radix_init(
1755        D: *mut fmpz_mod_poly_radix_struct,
1756        R: *const fmpz_mod_poly_struct,
1757        degF: slong,
1758        ctx: *const fmpz_mod_ctx_struct,
1759    );
1760    pub fn fmpz_mod_poly_radix_clear(D: *mut fmpz_mod_poly_radix_struct);
1761    pub fn _fmpz_mod_poly_radix(
1762        B: *mut *mut fmpz,
1763        F: *const fmpz,
1764        Rpow: *mut *mut fmpz,
1765        Rinv: *mut *mut fmpz,
1766        degR: slong,
1767        k: slong,
1768        i: slong,
1769        W: *mut fmpz,
1770        ctx: *const fmpz_mod_ctx_struct,
1771    );
1772    pub fn fmpz_mod_poly_radix(
1773        B: *mut *mut fmpz_mod_poly_struct,
1774        F: *const fmpz_mod_poly_struct,
1775        D: *const fmpz_mod_poly_radix_struct,
1776        ctx: *const fmpz_mod_ctx_struct,
1777    );
1778    pub fn fmpz_mod_poly_get_str(
1779        poly: *const fmpz_mod_poly_struct,
1780        UNUSED_ctx: *const fmpz_mod_ctx_struct,
1781    ) -> *mut libc::c_char;
1782    pub fn fmpz_mod_poly_get_str_pretty(
1783        poly: *const fmpz_mod_poly_struct,
1784        x: *const libc::c_char,
1785        UNUSED_ctx: *const fmpz_mod_ctx_struct,
1786    ) -> *mut libc::c_char;
1787    pub fn _fmpz_mod_poly_fprint(
1788        file: *mut FILE,
1789        poly: *const fmpz,
1790        len: slong,
1791        p: *const fmpz,
1792    ) -> libc::c_int;
1793    pub fn fmpz_mod_poly_fprint(
1794        file: *mut FILE,
1795        poly: *const fmpz_mod_poly_struct,
1796        ctx: *const fmpz_mod_ctx_struct,
1797    ) -> libc::c_int;
1798    pub fn fmpz_mod_poly_fprint_pretty(
1799        file: *mut FILE,
1800        poly: *const fmpz_mod_poly_struct,
1801        x: *const libc::c_char,
1802        UNUSED_ctx: *const fmpz_mod_ctx_struct,
1803    ) -> libc::c_int;
1804    pub fn fmpz_mod_poly_fread(
1805        file: *mut FILE,
1806        poly: *mut fmpz_mod_poly_struct,
1807        ctx: *mut fmpz_mod_ctx_struct,
1808    ) -> libc::c_int;
1809    pub fn _fmpz_mod_poly_print(poly: *const fmpz, len: slong, p: *const fmpz) -> libc::c_int;
1810    pub fn fmpz_mod_poly_print(
1811        poly: *const fmpz_mod_poly_struct,
1812        ctx: *const fmpz_mod_ctx_struct,
1813    ) -> libc::c_int;
1814    pub fn fmpz_mod_poly_print_pretty(
1815        poly: *const fmpz_mod_poly_struct,
1816        x: *const libc::c_char,
1817        ctx: *const fmpz_mod_ctx_struct,
1818    ) -> libc::c_int;
1819    pub fn _fmpz_mod_poly_product_roots_fmpz_vec(
1820        poly: *mut fmpz,
1821        xs: *const fmpz,
1822        n: slong,
1823        ctx: *const fmpz_mod_ctx_struct,
1824    );
1825    pub fn fmpz_mod_poly_product_roots_fmpz_vec(
1826        poly: *mut fmpz_mod_poly_struct,
1827        xs: *const fmpz,
1828        n: slong,
1829        ctx: *const fmpz_mod_ctx_struct,
1830    );
1831    pub fn fmpz_mod_poly_find_distinct_nonzero_roots(
1832        roots: *mut fmpz,
1833        P: *const fmpz_mod_poly_struct,
1834        ctx: *const fmpz_mod_ctx_struct,
1835    ) -> libc::c_int;
1836    pub fn _fmpz_mod_poly_split_rabin(
1837        a: *mut fmpz_mod_poly_struct,
1838        b: *mut fmpz_mod_poly_struct,
1839        f: *const fmpz_mod_poly_struct,
1840        halfp: *const fmpz,
1841        t: *mut fmpz_mod_poly_struct,
1842        t2: *mut fmpz_mod_poly_struct,
1843        randstate: *mut flint_rand_struct,
1844        ctx: *const fmpz_mod_ctx_struct,
1845    );
1846    pub fn _fmpz_mod_mat_charpoly(
1847        p: *mut fmpz,
1848        M: *const fmpz_mod_mat_struct,
1849        ctx: *const fmpz_mod_ctx_struct,
1850    );
1851    pub fn fmpz_mod_mat_charpoly(
1852        p: *mut fmpz_mod_poly_struct,
1853        M: *const fmpz_mod_mat_struct,
1854        ctx: *const fmpz_mod_ctx_struct,
1855    );
1856    pub fn fmpz_mod_mat_minpoly(
1857        p: *mut fmpz_mod_poly_struct,
1858        M: *const fmpz_mod_mat_struct,
1859        ctx: *const fmpz_mod_ctx_struct,
1860    );
1861    pub fn fmpz_mod_berlekamp_massey_init(
1862        B: *mut fmpz_mod_berlekamp_massey_struct,
1863        ctx: *const fmpz_mod_ctx_struct,
1864    );
1865    pub fn fmpz_mod_berlekamp_massey_start_over(
1866        B: *mut fmpz_mod_berlekamp_massey_struct,
1867        ctx: *const fmpz_mod_ctx_struct,
1868    );
1869    pub fn fmpz_mod_berlekamp_massey_clear(
1870        B: *mut fmpz_mod_berlekamp_massey_struct,
1871        ctx: *const fmpz_mod_ctx_struct,
1872    );
1873    pub fn fmpz_mod_berlekamp_massey_print(
1874        B: *const fmpz_mod_berlekamp_massey_struct,
1875        ctx: *const fmpz_mod_ctx_struct,
1876    );
1877    pub fn fmpz_mod_berlekamp_massey_add_points(
1878        B: *mut fmpz_mod_berlekamp_massey_struct,
1879        a: *const fmpz,
1880        count: slong,
1881        ctx: *const fmpz_mod_ctx_struct,
1882    );
1883    pub fn fmpz_mod_berlekamp_massey_add_zeros(
1884        B: *mut fmpz_mod_berlekamp_massey_struct,
1885        count: slong,
1886        ctx: *const fmpz_mod_ctx_struct,
1887    );
1888    pub fn fmpz_mod_berlekamp_massey_add_point(
1889        B: *mut fmpz_mod_berlekamp_massey_struct,
1890        a: *const fmpz,
1891        ctx: *const fmpz_mod_ctx_struct,
1892    );
1893    pub fn fmpz_mod_berlekamp_massey_add_point_ui(
1894        B: *mut fmpz_mod_berlekamp_massey_struct,
1895        a: ulong,
1896        ctx: *const fmpz_mod_ctx_struct,
1897    );
1898    pub fn fmpz_mod_berlekamp_massey_reduce(
1899        B: *mut fmpz_mod_berlekamp_massey_struct,
1900        ctx: *const fmpz_mod_ctx_struct,
1901    ) -> libc::c_int;
1902    #[link_name = "fmpz_mod_berlekamp_massey_points__extern"]
1903    pub fn fmpz_mod_berlekamp_massey_points(
1904        B: *const fmpz_mod_berlekamp_massey_struct,
1905    ) -> *const fmpz;
1906    #[link_name = "fmpz_mod_berlekamp_massey_point_count__extern"]
1907    pub fn fmpz_mod_berlekamp_massey_point_count(
1908        B: *const fmpz_mod_berlekamp_massey_struct,
1909    ) -> slong;
1910    #[link_name = "fmpz_mod_berlekamp_massey_V_poly__extern"]
1911    pub fn fmpz_mod_berlekamp_massey_V_poly(
1912        B: *const fmpz_mod_berlekamp_massey_struct,
1913    ) -> *const fmpz_mod_poly_struct;
1914    #[link_name = "fmpz_mod_berlekamp_massey_R_poly__extern"]
1915    pub fn fmpz_mod_berlekamp_massey_R_poly(
1916        B: *const fmpz_mod_berlekamp_massey_struct,
1917    ) -> *const fmpz_mod_poly_struct;
1918    pub fn fmpz_mod_poly_add_si(
1919        res: *mut fmpz_mod_poly_struct,
1920        poly: *const fmpz_mod_poly_struct,
1921        c: slong,
1922        ctx: *const fmpz_mod_ctx_struct,
1923    );
1924    pub fn fmpz_mod_poly_sub_si(
1925        res: *mut fmpz_mod_poly_struct,
1926        poly: *const fmpz_mod_poly_struct,
1927        c: slong,
1928        ctx: *const fmpz_mod_ctx_struct,
1929    );
1930    pub fn fmpz_mod_poly_si_sub(
1931        res: *mut fmpz_mod_poly_struct,
1932        c: slong,
1933        poly: *const fmpz_mod_poly_struct,
1934        ctx: *const fmpz_mod_ctx_struct,
1935    );
1936    pub fn fmpz_mod_poly_add_fmpz(
1937        res: *mut fmpz_mod_poly_struct,
1938        poly: *const fmpz_mod_poly_struct,
1939        c: *const fmpz,
1940        ctx: *const fmpz_mod_ctx_struct,
1941    );
1942    pub fn fmpz_mod_poly_sub_fmpz(
1943        res: *mut fmpz_mod_poly_struct,
1944        poly: *const fmpz_mod_poly_struct,
1945        c: *const fmpz,
1946        ctx: *const fmpz_mod_ctx_struct,
1947    );
1948    pub fn fmpz_mod_poly_fmpz_sub(
1949        res: *mut fmpz_mod_poly_struct,
1950        c: *const fmpz,
1951        poly: *const fmpz_mod_poly_struct,
1952        ctx: *const fmpz_mod_ctx_struct,
1953    );
1954}