Skip to main content

flint_sys/
nmod_poly.rs

1/* automatically generated by rust-bindgen 0.70.1 */
2
3use libc::*;
4use crate::deps::*;
5use crate::flint::*;
6use crate::nmod_types::*;
7
8
9pub const NMOD_POLY_MULMOD_PRECOND_NONE: u32 = 0;
10pub const NMOD_POLY_MULMOD_PRECOND_SHOUP: u32 = 1;
11pub const NMOD_POLY_MULMOD_PRECOND_MATRIX: u32 = 2;
12#[repr(C)]
13pub struct nmod_poly_res_struct {
14    pub res: ulong,
15    pub lc: ulong,
16    pub len0: slong,
17    pub len1: slong,
18    pub off: slong,
19}
20#[allow(clippy::unnecessary_operation, clippy::identity_op)]
21const _: () = {
22    ["Size of nmod_poly_res_struct"][::std::mem::size_of::<nmod_poly_res_struct>() - 40usize];
23    ["Alignment of nmod_poly_res_struct"][::std::mem::align_of::<nmod_poly_res_struct>() - 8usize];
24    ["Offset of field: nmod_poly_res_struct::res"]
25        [::std::mem::offset_of!(nmod_poly_res_struct, res) - 0usize];
26    ["Offset of field: nmod_poly_res_struct::lc"]
27        [::std::mem::offset_of!(nmod_poly_res_struct, lc) - 8usize];
28    ["Offset of field: nmod_poly_res_struct::len0"]
29        [::std::mem::offset_of!(nmod_poly_res_struct, len0) - 16usize];
30    ["Offset of field: nmod_poly_res_struct::len1"]
31        [::std::mem::offset_of!(nmod_poly_res_struct, len1) - 24usize];
32    ["Offset of field: nmod_poly_res_struct::off"]
33        [::std::mem::offset_of!(nmod_poly_res_struct, off) - 32usize];
34};
35impl Default for nmod_poly_res_struct {
36    fn default() -> Self {
37        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
38        unsafe {
39            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
40            s.assume_init()
41        }
42    }
43}
44pub type nmod_poly_res_t = [nmod_poly_res_struct; 1usize];
45#[repr(C)]
46#[derive(Debug, Copy, Clone)]
47pub struct nmod_poly_matrix_precompute_arg_t {
48    pub A: *mut nmod_mat_struct,
49    pub poly1: *mut nmod_poly_struct,
50    pub poly2: *mut nmod_poly_struct,
51    pub poly2inv: *mut nmod_poly_struct,
52}
53#[allow(clippy::unnecessary_operation, clippy::identity_op)]
54const _: () = {
55    ["Size of nmod_poly_matrix_precompute_arg_t"]
56        [::std::mem::size_of::<nmod_poly_matrix_precompute_arg_t>() - 32usize];
57    ["Alignment of nmod_poly_matrix_precompute_arg_t"]
58        [::std::mem::align_of::<nmod_poly_matrix_precompute_arg_t>() - 8usize];
59    ["Offset of field: nmod_poly_matrix_precompute_arg_t::A"]
60        [::std::mem::offset_of!(nmod_poly_matrix_precompute_arg_t, A) - 0usize];
61    ["Offset of field: nmod_poly_matrix_precompute_arg_t::poly1"]
62        [::std::mem::offset_of!(nmod_poly_matrix_precompute_arg_t, poly1) - 8usize];
63    ["Offset of field: nmod_poly_matrix_precompute_arg_t::poly2"]
64        [::std::mem::offset_of!(nmod_poly_matrix_precompute_arg_t, poly2) - 16usize];
65    ["Offset of field: nmod_poly_matrix_precompute_arg_t::poly2inv"]
66        [::std::mem::offset_of!(nmod_poly_matrix_precompute_arg_t, poly2inv) - 24usize];
67};
68impl Default for nmod_poly_matrix_precompute_arg_t {
69    fn default() -> Self {
70        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
71        unsafe {
72            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
73            s.assume_init()
74        }
75    }
76}
77#[repr(C)]
78#[derive(Debug, Copy, Clone)]
79pub struct nmod_poly_compose_mod_precomp_preinv_arg_t {
80    pub A: *mut nmod_mat_struct,
81    pub res: *mut nmod_poly_struct,
82    pub poly1: *mut nmod_poly_struct,
83    pub poly3: *mut nmod_poly_struct,
84    pub poly3inv: *mut nmod_poly_struct,
85}
86#[allow(clippy::unnecessary_operation, clippy::identity_op)]
87const _: () = {
88    ["Size of nmod_poly_compose_mod_precomp_preinv_arg_t"]
89        [::std::mem::size_of::<nmod_poly_compose_mod_precomp_preinv_arg_t>() - 40usize];
90    ["Alignment of nmod_poly_compose_mod_precomp_preinv_arg_t"]
91        [::std::mem::align_of::<nmod_poly_compose_mod_precomp_preinv_arg_t>() - 8usize];
92    ["Offset of field: nmod_poly_compose_mod_precomp_preinv_arg_t::A"]
93        [::std::mem::offset_of!(nmod_poly_compose_mod_precomp_preinv_arg_t, A) - 0usize];
94    ["Offset of field: nmod_poly_compose_mod_precomp_preinv_arg_t::res"]
95        [::std::mem::offset_of!(nmod_poly_compose_mod_precomp_preinv_arg_t, res) - 8usize];
96    ["Offset of field: nmod_poly_compose_mod_precomp_preinv_arg_t::poly1"]
97        [::std::mem::offset_of!(nmod_poly_compose_mod_precomp_preinv_arg_t, poly1) - 16usize];
98    ["Offset of field: nmod_poly_compose_mod_precomp_preinv_arg_t::poly3"]
99        [::std::mem::offset_of!(nmod_poly_compose_mod_precomp_preinv_arg_t, poly3) - 24usize];
100    ["Offset of field: nmod_poly_compose_mod_precomp_preinv_arg_t::poly3inv"]
101        [::std::mem::offset_of!(nmod_poly_compose_mod_precomp_preinv_arg_t, poly3inv) - 32usize];
102};
103impl Default for nmod_poly_compose_mod_precomp_preinv_arg_t {
104    fn default() -> Self {
105        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
106        unsafe {
107            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
108            s.assume_init()
109        }
110    }
111}
112#[repr(C)]
113pub struct nmod_geometric_progression_struct {
114    pub x: nn_ptr,
115    pub t: nn_ptr,
116    pub w: nn_ptr,
117    pub y: nn_ptr,
118    pub z: nn_ptr,
119    pub f: nmod_poly_t,
120    pub g1: nmod_poly_t,
121    pub g2: nmod_poly_t,
122    pub mod_: nmod_t,
123    pub len: slong,
124}
125#[allow(clippy::unnecessary_operation, clippy::identity_op)]
126const _: () = {
127    ["Size of nmod_geometric_progression_struct"]
128        [::std::mem::size_of::<nmod_geometric_progression_struct>() - 216usize];
129    ["Alignment of nmod_geometric_progression_struct"]
130        [::std::mem::align_of::<nmod_geometric_progression_struct>() - 8usize];
131    ["Offset of field: nmod_geometric_progression_struct::x"]
132        [::std::mem::offset_of!(nmod_geometric_progression_struct, x) - 0usize];
133    ["Offset of field: nmod_geometric_progression_struct::t"]
134        [::std::mem::offset_of!(nmod_geometric_progression_struct, t) - 8usize];
135    ["Offset of field: nmod_geometric_progression_struct::w"]
136        [::std::mem::offset_of!(nmod_geometric_progression_struct, w) - 16usize];
137    ["Offset of field: nmod_geometric_progression_struct::y"]
138        [::std::mem::offset_of!(nmod_geometric_progression_struct, y) - 24usize];
139    ["Offset of field: nmod_geometric_progression_struct::z"]
140        [::std::mem::offset_of!(nmod_geometric_progression_struct, z) - 32usize];
141    ["Offset of field: nmod_geometric_progression_struct::f"]
142        [::std::mem::offset_of!(nmod_geometric_progression_struct, f) - 40usize];
143    ["Offset of field: nmod_geometric_progression_struct::g1"]
144        [::std::mem::offset_of!(nmod_geometric_progression_struct, g1) - 88usize];
145    ["Offset of field: nmod_geometric_progression_struct::g2"]
146        [::std::mem::offset_of!(nmod_geometric_progression_struct, g2) - 136usize];
147    ["Offset of field: nmod_geometric_progression_struct::mod_"]
148        [::std::mem::offset_of!(nmod_geometric_progression_struct, mod_) - 184usize];
149    ["Offset of field: nmod_geometric_progression_struct::len"]
150        [::std::mem::offset_of!(nmod_geometric_progression_struct, len) - 208usize];
151};
152impl Default for nmod_geometric_progression_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_geometric_progression_t = [nmod_geometric_progression_struct; 1usize];
162#[repr(C)]
163pub struct nmod_poly_mulmod_precond_struct {
164    pub method: libc::c_int,
165    pub n: slong,
166    pub a: nn_srcptr,
167    pub alen: slong,
168    pub d: nn_srcptr,
169    pub dinv: nn_srcptr,
170    pub lendinv: slong,
171    pub adivd: nn_ptr,
172    pub matrix: nn_ptr,
173    pub packing: libc::c_int,
174    pub dot_params: dot_params_t,
175}
176#[allow(clippy::unnecessary_operation, clippy::identity_op)]
177const _: () = {
178    ["Size of nmod_poly_mulmod_precond_struct"]
179        [::std::mem::size_of::<nmod_poly_mulmod_precond_struct>() - 96usize];
180    ["Alignment of nmod_poly_mulmod_precond_struct"]
181        [::std::mem::align_of::<nmod_poly_mulmod_precond_struct>() - 8usize];
182    ["Offset of field: nmod_poly_mulmod_precond_struct::method"]
183        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, method) - 0usize];
184    ["Offset of field: nmod_poly_mulmod_precond_struct::n"]
185        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, n) - 8usize];
186    ["Offset of field: nmod_poly_mulmod_precond_struct::a"]
187        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, a) - 16usize];
188    ["Offset of field: nmod_poly_mulmod_precond_struct::alen"]
189        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, alen) - 24usize];
190    ["Offset of field: nmod_poly_mulmod_precond_struct::d"]
191        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, d) - 32usize];
192    ["Offset of field: nmod_poly_mulmod_precond_struct::dinv"]
193        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, dinv) - 40usize];
194    ["Offset of field: nmod_poly_mulmod_precond_struct::lendinv"]
195        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, lendinv) - 48usize];
196    ["Offset of field: nmod_poly_mulmod_precond_struct::adivd"]
197        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, adivd) - 56usize];
198    ["Offset of field: nmod_poly_mulmod_precond_struct::matrix"]
199        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, matrix) - 64usize];
200    ["Offset of field: nmod_poly_mulmod_precond_struct::packing"]
201        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, packing) - 72usize];
202    ["Offset of field: nmod_poly_mulmod_precond_struct::dot_params"]
203        [::std::mem::offset_of!(nmod_poly_mulmod_precond_struct, dot_params) - 80usize];
204};
205impl Default for nmod_poly_mulmod_precond_struct {
206    fn default() -> Self {
207        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
208        unsafe {
209            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
210            s.assume_init()
211        }
212    }
213}
214pub type nmod_poly_mulmod_precond_t = [nmod_poly_mulmod_precond_struct; 1usize];
215#[repr(C)]
216pub struct _nmod_poly_multi_crt_prog_instr {
217    pub a_idx: slong,
218    pub b_idx: slong,
219    pub c_idx: slong,
220    pub idem: nmod_poly_t,
221    pub modulus: nmod_poly_t,
222}
223#[allow(clippy::unnecessary_operation, clippy::identity_op)]
224const _: () = {
225    ["Size of _nmod_poly_multi_crt_prog_instr"]
226        [::std::mem::size_of::<_nmod_poly_multi_crt_prog_instr>() - 120usize];
227    ["Alignment of _nmod_poly_multi_crt_prog_instr"]
228        [::std::mem::align_of::<_nmod_poly_multi_crt_prog_instr>() - 8usize];
229    ["Offset of field: _nmod_poly_multi_crt_prog_instr::a_idx"]
230        [::std::mem::offset_of!(_nmod_poly_multi_crt_prog_instr, a_idx) - 0usize];
231    ["Offset of field: _nmod_poly_multi_crt_prog_instr::b_idx"]
232        [::std::mem::offset_of!(_nmod_poly_multi_crt_prog_instr, b_idx) - 8usize];
233    ["Offset of field: _nmod_poly_multi_crt_prog_instr::c_idx"]
234        [::std::mem::offset_of!(_nmod_poly_multi_crt_prog_instr, c_idx) - 16usize];
235    ["Offset of field: _nmod_poly_multi_crt_prog_instr::idem"]
236        [::std::mem::offset_of!(_nmod_poly_multi_crt_prog_instr, idem) - 24usize];
237    ["Offset of field: _nmod_poly_multi_crt_prog_instr::modulus"]
238        [::std::mem::offset_of!(_nmod_poly_multi_crt_prog_instr, modulus) - 72usize];
239};
240impl Default for _nmod_poly_multi_crt_prog_instr {
241    fn default() -> Self {
242        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
243        unsafe {
244            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
245            s.assume_init()
246        }
247    }
248}
249#[repr(C)]
250pub struct nmod_poly_multi_crt_struct {
251    pub prog: *mut _nmod_poly_multi_crt_prog_instr,
252    pub length: slong,
253    pub alloc: slong,
254    pub localsize: slong,
255    pub temp1loc: slong,
256    pub temp2loc: slong,
257    pub good: libc::c_int,
258}
259#[allow(clippy::unnecessary_operation, clippy::identity_op)]
260const _: () = {
261    ["Size of nmod_poly_multi_crt_struct"]
262        [::std::mem::size_of::<nmod_poly_multi_crt_struct>() - 56usize];
263    ["Alignment of nmod_poly_multi_crt_struct"]
264        [::std::mem::align_of::<nmod_poly_multi_crt_struct>() - 8usize];
265    ["Offset of field: nmod_poly_multi_crt_struct::prog"]
266        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, prog) - 0usize];
267    ["Offset of field: nmod_poly_multi_crt_struct::length"]
268        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, length) - 8usize];
269    ["Offset of field: nmod_poly_multi_crt_struct::alloc"]
270        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, alloc) - 16usize];
271    ["Offset of field: nmod_poly_multi_crt_struct::localsize"]
272        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, localsize) - 24usize];
273    ["Offset of field: nmod_poly_multi_crt_struct::temp1loc"]
274        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, temp1loc) - 32usize];
275    ["Offset of field: nmod_poly_multi_crt_struct::temp2loc"]
276        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, temp2loc) - 40usize];
277    ["Offset of field: nmod_poly_multi_crt_struct::good"]
278        [::std::mem::offset_of!(nmod_poly_multi_crt_struct, good) - 48usize];
279};
280impl Default for nmod_poly_multi_crt_struct {
281    fn default() -> Self {
282        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
283        unsafe {
284            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
285            s.assume_init()
286        }
287    }
288}
289pub type nmod_poly_multi_crt_t = [nmod_poly_multi_crt_struct; 1usize];
290#[repr(C)]
291pub struct nmod_berlekamp_massey_struct {
292    pub npoints: slong,
293    pub R0: nmod_poly_t,
294    pub R1: nmod_poly_t,
295    pub V0: nmod_poly_t,
296    pub V1: nmod_poly_t,
297    pub qt: nmod_poly_t,
298    pub rt: nmod_poly_t,
299    pub points: nmod_poly_t,
300}
301#[allow(clippy::unnecessary_operation, clippy::identity_op)]
302const _: () = {
303    ["Size of nmod_berlekamp_massey_struct"]
304        [::std::mem::size_of::<nmod_berlekamp_massey_struct>() - 344usize];
305    ["Alignment of nmod_berlekamp_massey_struct"]
306        [::std::mem::align_of::<nmod_berlekamp_massey_struct>() - 8usize];
307    ["Offset of field: nmod_berlekamp_massey_struct::npoints"]
308        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, npoints) - 0usize];
309    ["Offset of field: nmod_berlekamp_massey_struct::R0"]
310        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, R0) - 8usize];
311    ["Offset of field: nmod_berlekamp_massey_struct::R1"]
312        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, R1) - 56usize];
313    ["Offset of field: nmod_berlekamp_massey_struct::V0"]
314        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, V0) - 104usize];
315    ["Offset of field: nmod_berlekamp_massey_struct::V1"]
316        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, V1) - 152usize];
317    ["Offset of field: nmod_berlekamp_massey_struct::qt"]
318        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, qt) - 200usize];
319    ["Offset of field: nmod_berlekamp_massey_struct::rt"]
320        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, rt) - 248usize];
321    ["Offset of field: nmod_berlekamp_massey_struct::points"]
322        [::std::mem::offset_of!(nmod_berlekamp_massey_struct, points) - 296usize];
323};
324impl Default for nmod_berlekamp_massey_struct {
325    fn default() -> Self {
326        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
327        unsafe {
328            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
329            s.assume_init()
330        }
331    }
332}
333pub type nmod_berlekamp_massey_t = [nmod_berlekamp_massey_struct; 1usize];
334extern "C" {
335    pub fn nmod_poly_init(poly: *mut nmod_poly_struct, n: ulong);
336    pub fn nmod_poly_init_preinv(poly: *mut nmod_poly_struct, n: ulong, ninv: ulong);
337    pub fn nmod_poly_init2(poly: *mut nmod_poly_struct, n: ulong, alloc: slong);
338    pub fn nmod_poly_init2_preinv(poly: *mut nmod_poly_struct, n: ulong, ninv: ulong, alloc: slong);
339    pub fn nmod_poly_realloc(poly: *mut nmod_poly_struct, alloc: slong);
340    pub fn nmod_poly_clear(poly: *mut nmod_poly_struct);
341    pub fn nmod_poly_fit_length(poly: *mut nmod_poly_struct, alloc: slong);
342    #[link_name = "nmod_poly_init_mod__extern"]
343    pub fn nmod_poly_init_mod(poly: *mut nmod_poly_struct, mod_: nmod_t);
344    #[link_name = "nmod_poly_set_mod__extern"]
345    pub fn nmod_poly_set_mod(poly: *mut nmod_poly_struct, mod_: nmod_t);
346    #[link_name = "_nmod_poly_set_length__extern"]
347    pub fn _nmod_poly_set_length(poly: *mut nmod_poly_struct, len: slong);
348    #[link_name = "_nmod_poly_normalise__extern"]
349    pub fn _nmod_poly_normalise(poly: *mut nmod_poly_struct);
350    #[link_name = "nmod_poly_length__extern"]
351    pub fn nmod_poly_length(poly: *const nmod_poly_struct) -> slong;
352    #[link_name = "nmod_poly_degree__extern"]
353    pub fn nmod_poly_degree(poly: *const nmod_poly_struct) -> slong;
354    #[link_name = "nmod_poly_modulus__extern"]
355    pub fn nmod_poly_modulus(poly: *const nmod_poly_struct) -> ulong;
356    pub fn nmod_poly_max_bits(poly: *const nmod_poly_struct) -> flint_bitcnt_t;
357    #[link_name = "nmod_poly_lead__extern"]
358    pub fn nmod_poly_lead(poly: *const nmod_poly_struct) -> nn_ptr;
359    pub fn nmod_poly_set(a: *mut nmod_poly_struct, b: *const nmod_poly_struct);
360    #[link_name = "nmod_poly_swap__extern"]
361    pub fn nmod_poly_swap(poly1: *mut nmod_poly_struct, poly2: *mut nmod_poly_struct);
362    #[link_name = "nmod_poly_zero__extern"]
363    pub fn nmod_poly_zero(res: *mut nmod_poly_struct);
364    #[link_name = "nmod_poly_one__extern"]
365    pub fn nmod_poly_one(res: *mut nmod_poly_struct);
366    pub fn nmod_poly_set_trunc(
367        res: *mut nmod_poly_struct,
368        poly: *const nmod_poly_struct,
369        len: slong,
370    );
371    #[link_name = "nmod_poly_truncate__extern"]
372    pub fn nmod_poly_truncate(poly: *mut nmod_poly_struct, len: slong);
373    pub fn _nmod_poly_reverse(output: nn_ptr, input: nn_srcptr, len: slong, m: slong);
374    pub fn nmod_poly_reverse(
375        output: *mut nmod_poly_struct,
376        input: *const nmod_poly_struct,
377        m: slong,
378    );
379    pub fn nmod_poly_equal(a: *const nmod_poly_struct, b: *const nmod_poly_struct) -> libc::c_int;
380    pub fn nmod_poly_equal_nmod(poly: *const nmod_poly_struct, cst: ulong) -> libc::c_int;
381    pub fn nmod_poly_equal_ui(poly: *const nmod_poly_struct, cst: ulong) -> libc::c_int;
382    pub fn nmod_poly_equal_trunc(
383        poly1: *const nmod_poly_struct,
384        poly2: *const nmod_poly_struct,
385        n: slong,
386    ) -> libc::c_int;
387    #[link_name = "nmod_poly_is_zero__extern"]
388    pub fn nmod_poly_is_zero(poly: *const nmod_poly_struct) -> libc::c_int;
389    #[link_name = "nmod_poly_is_one__extern"]
390    pub fn nmod_poly_is_one(poly: *const nmod_poly_struct) -> libc::c_int;
391    #[link_name = "nmod_poly_is_unit__extern"]
392    pub fn nmod_poly_is_unit(poly: *const nmod_poly_struct) -> libc::c_int;
393    #[link_name = "nmod_poly_is_gen__extern"]
394    pub fn nmod_poly_is_gen(poly: *const nmod_poly_struct) -> libc::c_int;
395    #[link_name = "nmod_poly_is_monic__extern"]
396    pub fn nmod_poly_is_monic(poly: *const nmod_poly_struct) -> libc::c_int;
397    pub fn nmod_poly_randtest(
398        poly: *mut nmod_poly_struct,
399        state: *mut flint_rand_struct,
400        len: slong,
401    );
402    #[link_name = "nmod_poly_randtest_not_zero__extern"]
403    pub fn nmod_poly_randtest_not_zero(
404        poly: *mut nmod_poly_struct,
405        state: *mut flint_rand_struct,
406        len: slong,
407    );
408    pub fn nmod_poly_minimal_irreducible(res: *mut nmod_poly_struct, n: ulong);
409    pub fn nmod_poly_randtest_irreducible(
410        poly: *mut nmod_poly_struct,
411        state: *mut flint_rand_struct,
412        len: slong,
413    );
414    pub fn nmod_poly_randtest_monic(
415        poly: *mut nmod_poly_struct,
416        state: *mut flint_rand_struct,
417        len: slong,
418    );
419    pub fn nmod_poly_randtest_monic_irreducible(
420        poly: *mut nmod_poly_struct,
421        state: *mut flint_rand_struct,
422        len: slong,
423    );
424    pub fn nmod_poly_randtest_monic_primitive(
425        poly: *mut nmod_poly_struct,
426        state: *mut flint_rand_struct,
427        len: slong,
428    );
429    pub fn nmod_poly_randtest_trinomial(
430        poly: *mut nmod_poly_struct,
431        state: *mut flint_rand_struct,
432        len: slong,
433    );
434    pub fn nmod_poly_randtest_trinomial_irreducible(
435        poly: *mut nmod_poly_struct,
436        state: *mut flint_rand_struct,
437        len: slong,
438        max_attempts: slong,
439    ) -> libc::c_int;
440    pub fn nmod_poly_randtest_pentomial(
441        poly: *mut nmod_poly_struct,
442        state: *mut flint_rand_struct,
443        len: slong,
444    );
445    pub fn nmod_poly_randtest_pentomial_irreducible(
446        poly: *mut nmod_poly_struct,
447        state: *mut flint_rand_struct,
448        len: slong,
449        max_attempts: slong,
450    ) -> libc::c_int;
451    pub fn nmod_poly_randtest_sparse_irreducible(
452        poly: *mut nmod_poly_struct,
453        state: *mut flint_rand_struct,
454        len: slong,
455    );
456    #[link_name = "nmod_poly_get_coeff_ui__extern"]
457    pub fn nmod_poly_get_coeff_ui(poly: *const nmod_poly_struct, j: slong) -> ulong;
458    pub fn nmod_poly_set_coeff_ui(poly: *mut nmod_poly_struct, j: slong, c: ulong);
459    pub fn nmod_poly_get_str(poly: *const nmod_poly_struct) -> *mut libc::c_char;
460    pub fn nmod_poly_get_str_pretty(
461        poly: *const nmod_poly_struct,
462        x: *const libc::c_char,
463    ) -> *mut libc::c_char;
464    pub fn nmod_poly_set_str(poly: *mut nmod_poly_struct, s: *const libc::c_char) -> libc::c_int;
465    pub fn nmod_poly_fprint(f: *mut FILE, poly: *const nmod_poly_struct) -> libc::c_int;
466    pub fn nmod_poly_fprint_pretty(
467        f: *mut FILE,
468        a: *const nmod_poly_struct,
469        x: *const libc::c_char,
470    ) -> libc::c_int;
471    pub fn nmod_poly_fread(f: *mut FILE, poly: *mut nmod_poly_struct) -> libc::c_int;
472    pub fn nmod_poly_print(a: *const nmod_poly_struct) -> libc::c_int;
473    pub fn nmod_poly_print_pretty(
474        a: *const nmod_poly_struct,
475        x: *const libc::c_char,
476    ) -> libc::c_int;
477    pub fn nmod_poly_read(poly: *mut nmod_poly_struct) -> libc::c_int;
478    pub fn _nmod_poly_shift_left(res: nn_ptr, poly: nn_srcptr, len: slong, k: slong);
479    pub fn nmod_poly_shift_left(
480        res: *mut nmod_poly_struct,
481        poly: *const nmod_poly_struct,
482        k: slong,
483    );
484    pub fn _nmod_poly_shift_right(res: nn_ptr, poly: nn_srcptr, len: slong, k: slong);
485    pub fn nmod_poly_shift_right(
486        res: *mut nmod_poly_struct,
487        poly: *const nmod_poly_struct,
488        k: slong,
489    );
490    pub fn _nmod_poly_add(
491        res: nn_ptr,
492        poly1: nn_srcptr,
493        len1: slong,
494        poly2: nn_srcptr,
495        len2: slong,
496        mod_: nmod_t,
497    );
498    pub fn nmod_poly_add(
499        res: *mut nmod_poly_struct,
500        poly1: *const nmod_poly_struct,
501        poly2: *const nmod_poly_struct,
502    );
503    pub fn _nmod_poly_sub(
504        res: nn_ptr,
505        poly1: nn_srcptr,
506        len1: slong,
507        poly2: nn_srcptr,
508        len2: slong,
509        mod_: nmod_t,
510    );
511    pub fn nmod_poly_sub(
512        res: *mut nmod_poly_struct,
513        poly1: *const nmod_poly_struct,
514        poly2: *const nmod_poly_struct,
515    );
516    pub fn nmod_poly_add_series(
517        res: *mut nmod_poly_struct,
518        poly1: *const nmod_poly_struct,
519        poly2: *const nmod_poly_struct,
520        n: slong,
521    );
522    pub fn nmod_poly_sub_series(
523        res: *mut nmod_poly_struct,
524        poly1: *const nmod_poly_struct,
525        poly2: *const nmod_poly_struct,
526        n: slong,
527    );
528    pub fn nmod_poly_add_ui(res: *mut nmod_poly_struct, poly: *const nmod_poly_struct, c: ulong);
529    pub fn nmod_poly_sub_ui(res: *mut nmod_poly_struct, poly: *const nmod_poly_struct, c: ulong);
530    pub fn nmod_poly_neg(res: *mut nmod_poly_struct, poly1: *const nmod_poly_struct);
531    pub fn nmod_poly_scalar_mul_nmod(
532        res: *mut nmod_poly_struct,
533        poly: *const nmod_poly_struct,
534        c: ulong,
535    );
536    pub fn nmod_poly_scalar_addmul_nmod(
537        res: *mut nmod_poly_struct,
538        poly: *const nmod_poly_struct,
539        c: ulong,
540    );
541    pub fn _nmod_poly_make_monic(output: nn_ptr, input: nn_srcptr, len: slong, mod_: nmod_t);
542    pub fn nmod_poly_make_monic(output: *mut nmod_poly_struct, input: *const nmod_poly_struct);
543    pub fn _nmod_poly_KS2_pack1(
544        res: nn_ptr,
545        op: nn_srcptr,
546        n: slong,
547        s: slong,
548        b: ulong,
549        k: ulong,
550        r: slong,
551    );
552    pub fn _nmod_poly_KS2_pack(
553        res: nn_ptr,
554        op: nn_srcptr,
555        n: slong,
556        s: slong,
557        b: ulong,
558        k: ulong,
559        r: slong,
560    );
561    pub fn _nmod_poly_KS2_unpack1(res: nn_ptr, op: nn_srcptr, n: slong, b: ulong, k: ulong);
562    pub fn _nmod_poly_KS2_unpack2(res: nn_ptr, op: nn_srcptr, n: slong, b: ulong, k: ulong);
563    pub fn _nmod_poly_KS2_unpack3(res: nn_ptr, op: nn_srcptr, n: slong, b: ulong, k: ulong);
564    pub fn _nmod_poly_KS2_unpack(res: nn_ptr, op: nn_srcptr, n: slong, b: ulong, k: ulong);
565    pub fn _nmod_poly_KS2_reduce(
566        res: nn_ptr,
567        s: slong,
568        op: nn_srcptr,
569        n: slong,
570        w: ulong,
571        mod_: nmod_t,
572    );
573    pub fn _nmod_poly_KS2_recover_reduce1(
574        res: nn_ptr,
575        s: slong,
576        op1: nn_srcptr,
577        op2: nn_srcptr,
578        n: slong,
579        b: ulong,
580        mod_: nmod_t,
581    );
582    pub fn _nmod_poly_KS2_recover_reduce2(
583        res: nn_ptr,
584        s: slong,
585        op1: nn_srcptr,
586        op2: nn_srcptr,
587        n: slong,
588        b: ulong,
589        mod_: nmod_t,
590    );
591    pub fn _nmod_poly_KS2_recover_reduce2b(
592        res: nn_ptr,
593        s: slong,
594        op1: nn_srcptr,
595        op2: nn_srcptr,
596        n: slong,
597        UNUSED_b: ulong,
598        mod_: nmod_t,
599    );
600    pub fn _nmod_poly_KS2_recover_reduce3(
601        res: nn_ptr,
602        s: slong,
603        op1: nn_srcptr,
604        op2: nn_srcptr,
605        n: slong,
606        b: ulong,
607        mod_: nmod_t,
608    );
609    pub fn _nmod_poly_KS2_recover_reduce(
610        res: nn_ptr,
611        s: slong,
612        op1: nn_srcptr,
613        op2: nn_srcptr,
614        n: slong,
615        b: ulong,
616        mod_: nmod_t,
617    );
618    pub fn _nmod_poly_bit_pack(res: nn_ptr, poly: nn_srcptr, len: slong, bits: flint_bitcnt_t);
619    pub fn nmod_poly_bit_pack(
620        f: *mut fmpz,
621        poly: *const nmod_poly_struct,
622        bit_size: flint_bitcnt_t,
623    );
624    pub fn _nmod_poly_bit_unpack(
625        res: nn_ptr,
626        nlo: slong,
627        nhi: slong,
628        mpn: nn_srcptr,
629        bits: flint_bitcnt_t,
630        mod_: nmod_t,
631    );
632    pub fn nmod_poly_bit_unpack(
633        poly: *mut nmod_poly_struct,
634        f: *const fmpz,
635        bit_size: flint_bitcnt_t,
636    );
637    pub fn _nmod_poly_mul_classical(
638        res: nn_ptr,
639        poly1: nn_srcptr,
640        len1: slong,
641        poly2: nn_srcptr,
642        len2: slong,
643        mod_: nmod_t,
644    );
645    pub fn nmod_poly_mul_classical(
646        res: *mut nmod_poly_struct,
647        poly1: *const nmod_poly_struct,
648        poly2: *const nmod_poly_struct,
649    );
650    pub fn _nmod_poly_mullow_classical(
651        res: nn_ptr,
652        poly1: nn_srcptr,
653        len1: slong,
654        poly2: nn_srcptr,
655        len2: slong,
656        trunc: slong,
657        mod_: nmod_t,
658    );
659    pub fn nmod_poly_mullow_classical(
660        res: *mut nmod_poly_struct,
661        poly1: *const nmod_poly_struct,
662        poly2: *const nmod_poly_struct,
663        trunc: slong,
664    );
665    pub fn _nmod_poly_mulhigh_classical(
666        res: nn_ptr,
667        poly1: nn_srcptr,
668        len1: slong,
669        poly2: nn_srcptr,
670        len2: slong,
671        start: slong,
672        mod_: nmod_t,
673    );
674    pub fn nmod_poly_mulhigh_classical(
675        res: *mut nmod_poly_struct,
676        poly1: *const nmod_poly_struct,
677        poly2: *const nmod_poly_struct,
678        start: slong,
679    );
680    pub fn _nmod_poly_mul_KS(
681        out: nn_ptr,
682        in1: nn_srcptr,
683        len1: slong,
684        in2: nn_srcptr,
685        len2: slong,
686        mod_: nmod_t,
687    );
688    pub fn nmod_poly_mul_KS(
689        res: *mut nmod_poly_struct,
690        poly1: *const nmod_poly_struct,
691        poly2: *const nmod_poly_struct,
692    );
693    pub fn _nmod_poly_mul_KS2(
694        res: nn_ptr,
695        op1: nn_srcptr,
696        n1: slong,
697        op2: nn_srcptr,
698        n2: slong,
699        mod_: nmod_t,
700    );
701    pub fn nmod_poly_mul_KS2(
702        res: *mut nmod_poly_struct,
703        poly1: *const nmod_poly_struct,
704        poly2: *const nmod_poly_struct,
705    );
706    pub fn _nmod_poly_mul_KS4(
707        res: nn_ptr,
708        op1: nn_srcptr,
709        n1: slong,
710        op2: nn_srcptr,
711        n2: slong,
712        mod_: nmod_t,
713    );
714    pub fn nmod_poly_mul_KS4(
715        res: *mut nmod_poly_struct,
716        poly1: *const nmod_poly_struct,
717        poly2: *const nmod_poly_struct,
718    );
719    pub fn _nmod_poly_mullow_KS(
720        out: nn_ptr,
721        in1: nn_srcptr,
722        len1: slong,
723        in2: nn_srcptr,
724        len2: slong,
725        n: slong,
726        mod_: nmod_t,
727    );
728    pub fn nmod_poly_mullow_KS(
729        res: *mut nmod_poly_struct,
730        poly1: *const nmod_poly_struct,
731        poly2: *const nmod_poly_struct,
732        n: slong,
733    );
734    pub fn _nmod_poly_mul(
735        res: nn_ptr,
736        poly1: nn_srcptr,
737        len1: slong,
738        poly2: nn_srcptr,
739        len2: slong,
740        mod_: nmod_t,
741    );
742    pub fn nmod_poly_mul(
743        res: *mut nmod_poly_struct,
744        poly1: *const nmod_poly_struct,
745        poly2: *const nmod_poly_struct,
746    );
747    pub fn _nmod_poly_mulmid_fft_small_repack(
748        z: nn_ptr,
749        a: nn_srcptr,
750        an: slong,
751        b: nn_srcptr,
752        bn: slong,
753        znlo: slong,
754        zn: slong,
755        mod_: nmod_t,
756    ) -> libc::c_int;
757    pub fn _nmod_poly_mullow_want_fft_small(
758        len1: slong,
759        len2: slong,
760        n: slong,
761        squaring: libc::c_int,
762        mod_: nmod_t,
763    ) -> libc::c_int;
764    pub fn _nmod_poly_mulmid_fft_small(
765        z: nn_ptr,
766        a: nn_srcptr,
767        an: slong,
768        b: nn_srcptr,
769        bn: slong,
770        znlo: slong,
771        zn: slong,
772        mod_: nmod_t,
773    );
774    pub fn _nmod_poly_mullow_fft_small(
775        z: nn_ptr,
776        a: nn_srcptr,
777        an: slong,
778        b: nn_srcptr,
779        bn: slong,
780        zn: slong,
781        mod_: nmod_t,
782    );
783    pub fn _nmod_poly_mullow(
784        res: nn_ptr,
785        poly1: nn_srcptr,
786        len1: slong,
787        poly2: nn_srcptr,
788        len2: slong,
789        trunc: slong,
790        mod_: nmod_t,
791    );
792    pub fn nmod_poly_mullow(
793        res: *mut nmod_poly_struct,
794        poly1: *const nmod_poly_struct,
795        poly2: *const nmod_poly_struct,
796        trunc: slong,
797    );
798    pub fn _nmod_poly_mulmid_classical(
799        res: nn_ptr,
800        poly1: nn_srcptr,
801        len1: slong,
802        poly2: nn_srcptr,
803        len2: slong,
804        nlo: slong,
805        nhi: slong,
806        mod_: nmod_t,
807    );
808    pub fn nmod_poly_mulmid_classical(
809        res: *mut nmod_poly_struct,
810        poly1: *const nmod_poly_struct,
811        poly2: *const nmod_poly_struct,
812        nlo: slong,
813        nhi: slong,
814    );
815    pub fn _nmod_poly_mulmid_KS(
816        res: nn_ptr,
817        poly1: nn_srcptr,
818        len1: slong,
819        poly2: nn_srcptr,
820        len2: slong,
821        nlo: slong,
822        nhi: slong,
823        mod_: nmod_t,
824    );
825    pub fn nmod_poly_mulmid_KS(
826        res: *mut nmod_poly_struct,
827        poly1: *const nmod_poly_struct,
828        poly2: *const nmod_poly_struct,
829        nlo: slong,
830        nhi: slong,
831    );
832    pub fn _nmod_poly_mulmid(
833        res: nn_ptr,
834        poly1: nn_srcptr,
835        len1: slong,
836        poly2: nn_srcptr,
837        len2: slong,
838        nlo: slong,
839        nhi: slong,
840        mod_: nmod_t,
841    );
842    pub fn nmod_poly_mulmid(
843        res: *mut nmod_poly_struct,
844        poly1: *const nmod_poly_struct,
845        poly2: *const nmod_poly_struct,
846        nlo: slong,
847        nhi: slong,
848    );
849    pub fn _nmod_poly_mulhigh(
850        res: nn_ptr,
851        poly1: nn_srcptr,
852        len1: slong,
853        poly2: nn_srcptr,
854        len2: slong,
855        n: slong,
856        mod_: nmod_t,
857    );
858    pub fn nmod_poly_mulhigh(
859        res: *mut nmod_poly_struct,
860        poly1: *const nmod_poly_struct,
861        poly2: *const nmod_poly_struct,
862        n: slong,
863    );
864    pub fn _nmod_poly_mulmod(
865        res: nn_ptr,
866        poly1: nn_srcptr,
867        len1: slong,
868        poly2: nn_srcptr,
869        len2: slong,
870        f: nn_srcptr,
871        lenf: slong,
872        mod_: nmod_t,
873    );
874    pub fn nmod_poly_mulmod(
875        res: *mut nmod_poly_struct,
876        poly1: *const nmod_poly_struct,
877        poly2: *const nmod_poly_struct,
878        f: *const nmod_poly_struct,
879    );
880    pub fn _nmod_poly_mulmod_preinv(
881        res: nn_ptr,
882        poly1: nn_srcptr,
883        len1: slong,
884        poly2: nn_srcptr,
885        len2: slong,
886        f: nn_srcptr,
887        lenf: slong,
888        finv: nn_srcptr,
889        lenfinv: slong,
890        mod_: nmod_t,
891    );
892    pub fn nmod_poly_mulmod_preinv(
893        res: *mut nmod_poly_struct,
894        poly1: *const nmod_poly_struct,
895        poly2: *const nmod_poly_struct,
896        f: *const nmod_poly_struct,
897        finv: *const nmod_poly_struct,
898    );
899    pub fn _nmod_poly_invmod(
900        A: *mut ulong,
901        B: *const ulong,
902        lenB: slong,
903        P: *const ulong,
904        lenP: slong,
905        mod_: nmod_t,
906    ) -> libc::c_int;
907    pub fn nmod_poly_invmod(
908        A: *mut nmod_poly_struct,
909        B: *const nmod_poly_struct,
910        P: *const nmod_poly_struct,
911    ) -> libc::c_int;
912    pub fn _nmod_poly_mulmod_precond_init_method(
913        precond: *mut nmod_poly_mulmod_precond_struct,
914        a: nn_srcptr,
915        alen: slong,
916        d: nn_srcptr,
917        dlen: slong,
918        dinv: nn_srcptr,
919        lendinv: slong,
920        method: libc::c_int,
921        mod_: nmod_t,
922    );
923    pub fn nmod_poly_mulmod_precond_init_method(
924        precond: *mut nmod_poly_mulmod_precond_struct,
925        a: *const nmod_poly_struct,
926        d: *const nmod_poly_struct,
927        dinv: *const nmod_poly_struct,
928        method: libc::c_int,
929    );
930    pub fn _nmod_poly_mulmod_precond_init_num(
931        precond: *mut nmod_poly_mulmod_precond_struct,
932        a: nn_srcptr,
933        alen: slong,
934        d: nn_srcptr,
935        dlen: slong,
936        dinv: nn_srcptr,
937        lendinv: slong,
938        num: slong,
939        mod_: nmod_t,
940    );
941    pub fn nmod_poly_mulmod_precond_init_num(
942        precond: *mut nmod_poly_mulmod_precond_struct,
943        a: *const nmod_poly_struct,
944        d: *const nmod_poly_struct,
945        dinv: *const nmod_poly_struct,
946        num: slong,
947    );
948    pub fn nmod_poly_mulmod_precond_clear(precond: *mut nmod_poly_mulmod_precond_struct);
949    pub fn _nmod_poly_mulmod_precond(
950        res: nn_ptr,
951        precond: *const nmod_poly_mulmod_precond_struct,
952        b: nn_srcptr,
953        blen: slong,
954        mod_: nmod_t,
955    );
956    pub fn nmod_poly_mulmod_precond(
957        res: *mut nmod_poly_struct,
958        precond: *const nmod_poly_mulmod_precond_struct,
959        b: *const nmod_poly_struct,
960    );
961    pub fn _nmod_poly_pow_binexp(res: nn_ptr, poly: nn_srcptr, len: slong, e: ulong, mod_: nmod_t);
962    pub fn nmod_poly_pow_binexp(
963        res: *mut nmod_poly_struct,
964        poly: *const nmod_poly_struct,
965        e: ulong,
966    );
967    pub fn _nmod_poly_pow(res: nn_ptr, poly: nn_srcptr, len: slong, e: ulong, mod_: nmod_t);
968    pub fn nmod_poly_pow(res: *mut nmod_poly_struct, poly: *const nmod_poly_struct, e: ulong);
969    pub fn _nmod_poly_pow_trunc_binexp(
970        res: nn_ptr,
971        poly: nn_srcptr,
972        e: ulong,
973        trunc: slong,
974        mod_: nmod_t,
975    );
976    pub fn nmod_poly_pow_trunc_binexp(
977        res: *mut nmod_poly_struct,
978        poly: *const nmod_poly_struct,
979        e: ulong,
980        trunc: slong,
981    );
982    pub fn _nmod_poly_pow_trunc(res: nn_ptr, poly: nn_srcptr, e: ulong, trunc: slong, mod_: nmod_t);
983    pub fn nmod_poly_pow_trunc(
984        res: *mut nmod_poly_struct,
985        poly: *const nmod_poly_struct,
986        e: ulong,
987        trunc: slong,
988    );
989    pub fn _nmod_poly_powmod_ui_binexp(
990        res: nn_ptr,
991        poly: nn_srcptr,
992        e: ulong,
993        f: nn_srcptr,
994        lenf: slong,
995        mod_: nmod_t,
996    );
997    pub fn nmod_poly_powmod_ui_binexp(
998        res: *mut nmod_poly_struct,
999        poly: *const nmod_poly_struct,
1000        e: ulong,
1001        f: *const nmod_poly_struct,
1002    );
1003    pub fn _nmod_poly_powmod_fmpz_binexp(
1004        res: nn_ptr,
1005        poly: nn_srcptr,
1006        e: *mut fmpz,
1007        f: nn_srcptr,
1008        lenf: slong,
1009        mod_: nmod_t,
1010    );
1011    pub fn nmod_poly_powmod_fmpz_binexp(
1012        res: *mut nmod_poly_struct,
1013        poly: *const nmod_poly_struct,
1014        e: *mut fmpz,
1015        f: *const nmod_poly_struct,
1016    );
1017    pub fn _nmod_poly_powmod_ui_binexp_preinv(
1018        res: nn_ptr,
1019        poly: nn_srcptr,
1020        e: ulong,
1021        f: nn_srcptr,
1022        lenf: slong,
1023        finv: nn_srcptr,
1024        lenfinv: slong,
1025        mod_: nmod_t,
1026    );
1027    pub fn nmod_poly_powmod_ui_binexp_preinv(
1028        res: *mut nmod_poly_struct,
1029        poly: *const nmod_poly_struct,
1030        e: ulong,
1031        f: *const nmod_poly_struct,
1032        finv: *const nmod_poly_struct,
1033    );
1034    pub fn _nmod_poly_powmod_fmpz_binexp_preinv(
1035        res: nn_ptr,
1036        poly: nn_srcptr,
1037        e: *mut fmpz,
1038        f: nn_srcptr,
1039        lenf: slong,
1040        finv: nn_srcptr,
1041        lenfinv: slong,
1042        mod_: nmod_t,
1043    );
1044    pub fn nmod_poly_powmod_fmpz_binexp_preinv(
1045        res: *mut nmod_poly_struct,
1046        poly: *const nmod_poly_struct,
1047        e: *mut fmpz,
1048        f: *const nmod_poly_struct,
1049        finv: *const nmod_poly_struct,
1050    );
1051    pub fn _nmod_poly_powmod_x_ui_preinv(
1052        res: nn_ptr,
1053        e: ulong,
1054        f: nn_srcptr,
1055        lenf: slong,
1056        finv: nn_srcptr,
1057        lenfinv: slong,
1058        mod_: nmod_t,
1059    );
1060    pub fn nmod_poly_powmod_x_ui_preinv(
1061        res: *mut nmod_poly_struct,
1062        e: ulong,
1063        f: *const nmod_poly_struct,
1064        finv: *const nmod_poly_struct,
1065    );
1066    pub fn _nmod_poly_powmod_x_fmpz_preinv(
1067        res: nn_ptr,
1068        e: *mut fmpz,
1069        f: nn_srcptr,
1070        lenf: slong,
1071        finv: nn_srcptr,
1072        lenfinv: slong,
1073        mod_: nmod_t,
1074    );
1075    pub fn nmod_poly_powmod_x_fmpz_preinv(
1076        res: *mut nmod_poly_struct,
1077        e: *mut fmpz,
1078        f: *const nmod_poly_struct,
1079        finv: *const nmod_poly_struct,
1080    );
1081    pub fn _nmod_poly_powers_mod_preinv_naive(
1082        res: *mut nn_ptr,
1083        f: nn_srcptr,
1084        flen: slong,
1085        n: slong,
1086        g: nn_srcptr,
1087        glen: slong,
1088        ginv: nn_srcptr,
1089        ginvlen: slong,
1090        mod_: nmod_t,
1091    );
1092    pub fn nmod_poly_powers_mod_naive(
1093        res: *mut nmod_poly_struct,
1094        f: *const nmod_poly_struct,
1095        n: slong,
1096        g: *const nmod_poly_struct,
1097    );
1098    pub fn _nmod_poly_powers_mod_preinv_threaded_pool(
1099        res: *mut nn_ptr,
1100        f: nn_srcptr,
1101        flen: slong,
1102        n: slong,
1103        g: nn_srcptr,
1104        glen: slong,
1105        ginv: nn_srcptr,
1106        ginvlen: slong,
1107        mod_: nmod_t,
1108        threads: *mut thread_pool_handle,
1109        num_threads: slong,
1110    );
1111    pub fn _nmod_poly_powers_mod_preinv_threaded(
1112        res: *mut nn_ptr,
1113        f: nn_srcptr,
1114        flen: slong,
1115        n: slong,
1116        g: nn_srcptr,
1117        glen: slong,
1118        ginv: nn_srcptr,
1119        ginvlen: slong,
1120        mod_: nmod_t,
1121    );
1122    pub fn nmod_poly_powers_mod_bsgs(
1123        res: *mut nmod_poly_struct,
1124        f: *const nmod_poly_struct,
1125        n: slong,
1126        g: *const nmod_poly_struct,
1127    );
1128    pub fn _nmod_poly_divrem_q1_preinv1(
1129        Q: nn_ptr,
1130        R: nn_ptr,
1131        A: nn_srcptr,
1132        lenA: slong,
1133        B: nn_srcptr,
1134        lenB: slong,
1135        invL: ulong,
1136        mod_: nmod_t,
1137    );
1138    pub fn _nmod_poly_divrem_basecase_preinv1(
1139        Q: nn_ptr,
1140        R: nn_ptr,
1141        A: nn_srcptr,
1142        A_len: slong,
1143        B: nn_srcptr,
1144        B_len: slong,
1145        invB: ulong,
1146        mod_: nmod_t,
1147    );
1148    pub fn _nmod_poly_divrem_basecase(
1149        Q: nn_ptr,
1150        R: nn_ptr,
1151        A: nn_srcptr,
1152        A_len: slong,
1153        B: nn_srcptr,
1154        B_len: slong,
1155        mod_: nmod_t,
1156    );
1157    pub fn nmod_poly_divrem_basecase(
1158        Q: *mut nmod_poly_struct,
1159        R: *mut nmod_poly_struct,
1160        A: *const nmod_poly_struct,
1161        B: *const nmod_poly_struct,
1162    );
1163    pub fn _nmod_poly_divrem(
1164        Q: nn_ptr,
1165        R: nn_ptr,
1166        A: nn_srcptr,
1167        lenA: slong,
1168        B: nn_srcptr,
1169        lenB: slong,
1170        mod_: nmod_t,
1171    );
1172    pub fn nmod_poly_divrem(
1173        Q: *mut nmod_poly_struct,
1174        R: *mut nmod_poly_struct,
1175        A: *const nmod_poly_struct,
1176        B: *const nmod_poly_struct,
1177    );
1178    pub fn _nmod_poly_div(
1179        Q: nn_ptr,
1180        A: nn_srcptr,
1181        lenA: slong,
1182        B: nn_srcptr,
1183        lenB: slong,
1184        mod_: nmod_t,
1185    );
1186    pub fn nmod_poly_div(
1187        Q: *mut nmod_poly_struct,
1188        A: *const nmod_poly_struct,
1189        B: *const nmod_poly_struct,
1190    );
1191    pub fn _nmod_poly_rem(
1192        R: nn_ptr,
1193        A: nn_srcptr,
1194        lenA: slong,
1195        B: nn_srcptr,
1196        lenB: slong,
1197        mod_: nmod_t,
1198    );
1199    pub fn nmod_poly_rem(
1200        R: *mut nmod_poly_struct,
1201        A: *const nmod_poly_struct,
1202        B: *const nmod_poly_struct,
1203    );
1204    pub fn _nmod_poly_divexact(
1205        Q: nn_ptr,
1206        A: nn_srcptr,
1207        lenA: slong,
1208        B: nn_srcptr,
1209        lenB: slong,
1210        mod_: nmod_t,
1211    );
1212    pub fn nmod_poly_divexact(
1213        Q: *mut nmod_poly_struct,
1214        A: *const nmod_poly_struct,
1215        B: *const nmod_poly_struct,
1216    );
1217    pub fn _nmod_poly_inv_series_basecase(
1218        Qinv: nn_ptr,
1219        Q: nn_srcptr,
1220        Qlen: slong,
1221        n: slong,
1222        mod_: nmod_t,
1223    );
1224    pub fn nmod_poly_inv_series_basecase(
1225        Qinv: *mut nmod_poly_struct,
1226        Q: *const nmod_poly_struct,
1227        n: slong,
1228    );
1229    pub fn _nmod_poly_inv_series_newton(
1230        Qinv: nn_ptr,
1231        Q: nn_srcptr,
1232        Qlen: slong,
1233        n: slong,
1234        mod_: nmod_t,
1235    );
1236    pub fn nmod_poly_inv_series_newton(
1237        Qinv: *mut nmod_poly_struct,
1238        Q: *const nmod_poly_struct,
1239        n: slong,
1240    );
1241    pub fn _nmod_poly_inv_series(Qinv: nn_ptr, Q: nn_srcptr, Qlen: slong, n: slong, mod_: nmod_t);
1242    pub fn nmod_poly_inv_series(Qinv: *mut nmod_poly_struct, Q: *const nmod_poly_struct, n: slong);
1243    pub fn _nmod_poly_div_series_basecase(
1244        Q: nn_ptr,
1245        A: nn_srcptr,
1246        Alen: slong,
1247        B: nn_srcptr,
1248        Blen: slong,
1249        n: slong,
1250        mod_: nmod_t,
1251    );
1252    pub fn nmod_poly_div_series_basecase(
1253        Q: *mut nmod_poly_struct,
1254        A: *const nmod_poly_struct,
1255        B: *const nmod_poly_struct,
1256        n: slong,
1257    );
1258    pub fn _nmod_poly_div_series(
1259        Q: nn_ptr,
1260        A: nn_srcptr,
1261        Alen: slong,
1262        B: nn_srcptr,
1263        Blen: slong,
1264        n: slong,
1265        mod_: nmod_t,
1266    );
1267    pub fn nmod_poly_div_series(
1268        Q: *mut nmod_poly_struct,
1269        A: *const nmod_poly_struct,
1270        B: *const nmod_poly_struct,
1271        n: slong,
1272    );
1273    pub fn _nmod_poly_div_newton_n_preinv(
1274        Q: nn_ptr,
1275        A: nn_srcptr,
1276        lenA: slong,
1277        UNUSED_B: nn_srcptr,
1278        lenB: slong,
1279        Binv: nn_srcptr,
1280        lenBinv: slong,
1281        mod_: nmod_t,
1282    );
1283    pub fn nmod_poly_div_newton_n_preinv(
1284        Q: *mut nmod_poly_struct,
1285        A: *const nmod_poly_struct,
1286        B: *const nmod_poly_struct,
1287        Binv: *const nmod_poly_struct,
1288    );
1289    pub fn _nmod_poly_divrem_newton_n_preinv(
1290        Q: nn_ptr,
1291        R: nn_ptr,
1292        A: nn_srcptr,
1293        lenA: slong,
1294        B: nn_srcptr,
1295        lenB: slong,
1296        Binv: nn_srcptr,
1297        lenBinv: slong,
1298        mod_: nmod_t,
1299    );
1300    pub fn nmod_poly_divrem_newton_n_preinv(
1301        Q: *mut nmod_poly_struct,
1302        R: *mut nmod_poly_struct,
1303        A: *const nmod_poly_struct,
1304        B: *const nmod_poly_struct,
1305        Binv: *const nmod_poly_struct,
1306    );
1307    pub fn _nmod_poly_div_root(
1308        Q: nn_ptr,
1309        A: nn_srcptr,
1310        len: slong,
1311        c: ulong,
1312        mod_: nmod_t,
1313    ) -> ulong;
1314    pub fn nmod_poly_div_root(
1315        Q: *mut nmod_poly_struct,
1316        A: *const nmod_poly_struct,
1317        c: ulong,
1318    ) -> ulong;
1319    pub fn _nmod_poly_divides_classical(
1320        Q: nn_ptr,
1321        A: nn_srcptr,
1322        lenA: slong,
1323        B: nn_srcptr,
1324        lenB: slong,
1325        mod_: nmod_t,
1326    ) -> libc::c_int;
1327    pub fn nmod_poly_divides_classical(
1328        Q: *mut nmod_poly_struct,
1329        A: *const nmod_poly_struct,
1330        B: *const nmod_poly_struct,
1331    ) -> libc::c_int;
1332    pub fn _nmod_poly_divides(
1333        Q: nn_ptr,
1334        A: nn_srcptr,
1335        lenA: slong,
1336        B: nn_srcptr,
1337        lenB: slong,
1338        mod_: nmod_t,
1339    ) -> libc::c_int;
1340    pub fn nmod_poly_divides(
1341        Q: *mut nmod_poly_struct,
1342        A: *const nmod_poly_struct,
1343        B: *const nmod_poly_struct,
1344    ) -> libc::c_int;
1345    pub fn nmod_poly_remove(f: *mut nmod_poly_struct, p: *const nmod_poly_struct) -> ulong;
1346    pub fn _nmod_poly_derivative(x_prime: nn_ptr, x: nn_srcptr, len: slong, mod_: nmod_t);
1347    pub fn nmod_poly_derivative(x_prime: *mut nmod_poly_struct, x: *const nmod_poly_struct);
1348    pub fn _nmod_poly_integral(x_int: nn_ptr, x: nn_srcptr, len: slong, mod_: nmod_t);
1349    pub fn nmod_poly_integral(x_int: *mut nmod_poly_struct, x: *const nmod_poly_struct);
1350    pub fn _nmod_poly_evaluate_nmod(poly: nn_srcptr, len: slong, c: ulong, mod_: nmod_t) -> ulong;
1351    pub fn _nmod_poly_evaluate_nmod_precomp(
1352        poly: nn_srcptr,
1353        len: slong,
1354        c: ulong,
1355        c_precomp: ulong,
1356        modn: ulong,
1357    ) -> ulong;
1358    pub fn _nmod_poly_evaluate_nmod_precomp_lazy(
1359        poly: nn_srcptr,
1360        len: slong,
1361        c: ulong,
1362        c_precomp: ulong,
1363        modn: ulong,
1364    ) -> ulong;
1365    pub fn nmod_poly_evaluate_nmod(poly: *const nmod_poly_struct, c: ulong) -> ulong;
1366    pub fn _nmod_poly_evaluate_nmod_vec(
1367        ys: nn_ptr,
1368        coeffs: nn_srcptr,
1369        len: slong,
1370        xs: nn_srcptr,
1371        n: slong,
1372        mod_: nmod_t,
1373    );
1374    pub fn nmod_poly_evaluate_nmod_vec(
1375        ys: nn_ptr,
1376        poly: *const nmod_poly_struct,
1377        xs: nn_srcptr,
1378        n: slong,
1379    );
1380    pub fn _nmod_poly_evaluate_nmod_vec_iter(
1381        ys: nn_ptr,
1382        coeffs: nn_srcptr,
1383        len: slong,
1384        xs: nn_srcptr,
1385        n: slong,
1386        mod_: nmod_t,
1387    );
1388    pub fn nmod_poly_evaluate_nmod_vec_iter(
1389        ys: nn_ptr,
1390        poly: *const nmod_poly_struct,
1391        xs: nn_srcptr,
1392        n: slong,
1393    );
1394    pub fn _nmod_poly_evaluate_nmod_vec_fast_precomp(
1395        vs: nn_ptr,
1396        poly: nn_srcptr,
1397        plen: slong,
1398        tree: *const nn_ptr,
1399        len: slong,
1400        mod_: nmod_t,
1401    );
1402    pub fn _nmod_poly_evaluate_nmod_vec_fast(
1403        ys: nn_ptr,
1404        coeffs: nn_srcptr,
1405        len: slong,
1406        xs: nn_srcptr,
1407        n: slong,
1408        mod_: nmod_t,
1409    );
1410    pub fn nmod_poly_evaluate_nmod_vec_fast(
1411        ys: nn_ptr,
1412        poly: *const nmod_poly_struct,
1413        xs: nn_srcptr,
1414        n: slong,
1415    );
1416    pub fn nmod_mat_one_addmul(dest: *mut nmod_mat_struct, mat: *const nmod_mat_struct, c: ulong);
1417    pub fn nmod_poly_evaluate_mat_horner(
1418        dest: *mut nmod_mat_struct,
1419        poly: *const nmod_poly_struct,
1420        c: *const nmod_mat_struct,
1421    );
1422    pub fn nmod_poly_evaluate_mat_paterson_stockmeyer(
1423        dest: *mut nmod_mat_struct,
1424        poly: *const nmod_poly_struct,
1425        c: *const nmod_mat_struct,
1426    );
1427    #[link_name = "nmod_poly_evaluate_mat__extern"]
1428    pub fn nmod_poly_evaluate_mat(
1429        dest: *mut nmod_mat_struct,
1430        poly: *const nmod_poly_struct,
1431        c: *const nmod_mat_struct,
1432    );
1433    pub fn _nmod_poly_tree_alloc(len: slong) -> *mut nn_ptr;
1434    pub fn _nmod_poly_tree_free(tree: *mut nn_ptr, len: slong);
1435    pub fn _nmod_poly_tree_build(tree: *mut nn_ptr, roots: nn_srcptr, len: slong, mod_: nmod_t);
1436    pub fn nmod_geometric_progression_init(
1437        G: *mut nmod_geometric_progression_struct,
1438        r: ulong,
1439        len: slong,
1440        mod_: nmod_t,
1441    );
1442    pub fn nmod_geometric_progression_clear(G: *mut nmod_geometric_progression_struct);
1443    pub fn _nmod_poly_evaluate_geometric_nmod_vec_iter(
1444        ys: nn_ptr,
1445        coeffs: nn_srcptr,
1446        len: slong,
1447        r: ulong,
1448        n: slong,
1449        mod_: nmod_t,
1450    );
1451    pub fn nmod_poly_evaluate_geometric_nmod_vec_iter(
1452        ys: nn_ptr,
1453        poly: *const nmod_poly_struct,
1454        r: ulong,
1455        n: slong,
1456    );
1457    pub fn _nmod_poly_evaluate_geometric_nmod_vec_fast_precomp(
1458        vs: nn_ptr,
1459        poly: nn_srcptr,
1460        plen: slong,
1461        G: *const nmod_geometric_progression_struct,
1462        len: slong,
1463        mod_: nmod_t,
1464    );
1465    pub fn _nmod_poly_evaluate_geometric_nmod_vec_fast(
1466        ys: nn_ptr,
1467        coeffs: nn_srcptr,
1468        len: slong,
1469        r: ulong,
1470        n: slong,
1471        mod_: nmod_t,
1472    );
1473    pub fn nmod_poly_evaluate_geometric_nmod_vec_fast(
1474        ys: nn_ptr,
1475        poly: *const nmod_poly_struct,
1476        r: ulong,
1477        n: slong,
1478    );
1479    pub fn _nmod_poly_interpolate_geometric_nmod_vec_fast_precomp(
1480        poly: nn_ptr,
1481        v: nn_srcptr,
1482        G: *const nmod_geometric_progression_struct,
1483        len: slong,
1484        mod_: nmod_t,
1485    );
1486    pub fn nmod_poly_interpolate_geometric_nmod_vec_fast_precomp(
1487        poly: *mut nmod_poly_struct,
1488        v: nn_srcptr,
1489        G: *const nmod_geometric_progression_struct,
1490        len: slong,
1491    );
1492    pub fn nmod_poly_interpolate_geometric_nmod_vec_fast(
1493        poly: *mut nmod_poly_struct,
1494        r: ulong,
1495        ys: nn_srcptr,
1496        n: slong,
1497    );
1498    pub fn _nmod_poly_interpolate_nmod_vec_newton(
1499        poly: nn_ptr,
1500        xs: nn_srcptr,
1501        ys: nn_srcptr,
1502        n: slong,
1503        mod_: nmod_t,
1504    );
1505    pub fn nmod_poly_interpolate_nmod_vec_newton(
1506        poly: *mut nmod_poly_struct,
1507        xs: nn_srcptr,
1508        ys: nn_srcptr,
1509        n: slong,
1510    );
1511    pub fn _nmod_poly_interpolate_nmod_vec_barycentric(
1512        poly: nn_ptr,
1513        xs: nn_srcptr,
1514        ys: nn_srcptr,
1515        n: slong,
1516        mod_: nmod_t,
1517    );
1518    pub fn nmod_poly_interpolate_nmod_vec_barycentric(
1519        poly: *mut nmod_poly_struct,
1520        xs: nn_srcptr,
1521        ys: nn_srcptr,
1522        n: slong,
1523    );
1524    pub fn _nmod_poly_interpolate_nmod_vec(
1525        poly: nn_ptr,
1526        xs: nn_srcptr,
1527        ys: nn_srcptr,
1528        n: slong,
1529        mod_: nmod_t,
1530    );
1531    pub fn nmod_poly_interpolate_nmod_vec(
1532        poly: *mut nmod_poly_struct,
1533        xs: nn_srcptr,
1534        ys: nn_srcptr,
1535        n: slong,
1536    );
1537    pub fn _nmod_poly_interpolate_nmod_vec_fast(
1538        poly: nn_ptr,
1539        xs: nn_srcptr,
1540        ys: nn_srcptr,
1541        len: slong,
1542        mod_: nmod_t,
1543    );
1544    pub fn nmod_poly_interpolate_nmod_vec_fast(
1545        poly: *mut nmod_poly_struct,
1546        xs: nn_srcptr,
1547        ys: nn_srcptr,
1548        n: slong,
1549    );
1550    pub fn _nmod_poly_interpolate_nmod_vec_fast_precomp(
1551        poly: nn_ptr,
1552        ys: nn_srcptr,
1553        tree: *const nn_ptr,
1554        weights: nn_srcptr,
1555        len: slong,
1556        mod_: nmod_t,
1557    );
1558    pub fn _nmod_poly_interpolation_weights(
1559        w: nn_ptr,
1560        tree: *const nn_ptr,
1561        len: slong,
1562        mod_: nmod_t,
1563    );
1564    pub fn _nmod_poly_compose_horner(
1565        res: nn_ptr,
1566        poly1: nn_srcptr,
1567        len1: slong,
1568        poly2: nn_srcptr,
1569        len2: slong,
1570        mod_: nmod_t,
1571    );
1572    pub fn nmod_poly_compose_horner(
1573        res: *mut nmod_poly_struct,
1574        poly1: *const nmod_poly_struct,
1575        poly2: *const nmod_poly_struct,
1576    );
1577    pub fn _nmod_poly_compose(
1578        res: nn_ptr,
1579        poly1: nn_srcptr,
1580        len1: slong,
1581        poly2: nn_srcptr,
1582        len2: slong,
1583        mod_: nmod_t,
1584    );
1585    pub fn nmod_poly_compose(
1586        res: *mut nmod_poly_struct,
1587        poly1: *const nmod_poly_struct,
1588        poly2: *const nmod_poly_struct,
1589    );
1590    pub fn _nmod_poly_taylor_shift_horner(poly: nn_ptr, c: ulong, len: slong, mod_: nmod_t);
1591    pub fn nmod_poly_taylor_shift_horner(
1592        g: *mut nmod_poly_struct,
1593        f: *const nmod_poly_struct,
1594        c: ulong,
1595    );
1596    pub fn _nmod_poly_taylor_shift_convolution(poly: nn_ptr, c: ulong, len: slong, mod_: nmod_t);
1597    pub fn nmod_poly_taylor_shift_convolution(
1598        g: *mut nmod_poly_struct,
1599        f: *const nmod_poly_struct,
1600        c: ulong,
1601    );
1602    pub fn _nmod_poly_taylor_shift(poly: nn_ptr, c: ulong, len: slong, mod_: nmod_t);
1603    pub fn nmod_poly_taylor_shift(g: *mut nmod_poly_struct, f: *const nmod_poly_struct, c: ulong);
1604    pub fn _nmod_poly_mod_matrix_rows_evaluate(
1605        res: nn_ptr,
1606        A: *const nmod_mat_struct,
1607        h: nn_srcptr,
1608        n: slong,
1609        poly3: nn_srcptr,
1610        len3: slong,
1611        poly3inv: nn_srcptr,
1612        len3inv: slong,
1613        mod_: nmod_t,
1614    );
1615    pub fn _nmod_poly_compose_mod_brent_kung(
1616        res: nn_ptr,
1617        f: nn_srcptr,
1618        lenf: slong,
1619        g: nn_srcptr,
1620        h: nn_srcptr,
1621        lenh: slong,
1622        mod_: nmod_t,
1623    );
1624    pub fn nmod_poly_compose_mod_brent_kung(
1625        res: *mut nmod_poly_struct,
1626        f: *const nmod_poly_struct,
1627        g: *const nmod_poly_struct,
1628        h: *const nmod_poly_struct,
1629    );
1630    pub fn _nmod_poly_reduce_matrix_mod_poly(
1631        A: *mut nmod_mat_struct,
1632        B: *const nmod_mat_struct,
1633        f: *const nmod_poly_struct,
1634    );
1635    pub fn _nmod_poly_precompute_matrix(
1636        A: *mut nmod_mat_struct,
1637        poly1: nn_srcptr,
1638        poly2: nn_srcptr,
1639        len2: slong,
1640        poly2inv: nn_srcptr,
1641        len2inv: slong,
1642        mod_: nmod_t,
1643    );
1644    pub fn _nmod_poly_precompute_matrix_worker(arg_ptr: *mut libc::c_void);
1645    pub fn nmod_poly_precompute_matrix(
1646        A: *mut nmod_mat_struct,
1647        poly1: *const nmod_poly_struct,
1648        poly2: *const nmod_poly_struct,
1649        poly2inv: *const nmod_poly_struct,
1650    );
1651    pub fn _nmod_poly_compose_mod_brent_kung_precomp_preinv(
1652        res: nn_ptr,
1653        poly1: nn_srcptr,
1654        len1: slong,
1655        A: *const nmod_mat_struct,
1656        poly3: nn_srcptr,
1657        len3: slong,
1658        poly3inv: nn_srcptr,
1659        len3inv: slong,
1660        mod_: nmod_t,
1661    );
1662    pub fn _nmod_poly_compose_mod_brent_kung_precomp_preinv_worker(arg_ptr: *mut libc::c_void);
1663    pub fn nmod_poly_compose_mod_brent_kung_precomp_preinv(
1664        res: *mut nmod_poly_struct,
1665        poly1: *const nmod_poly_struct,
1666        A: *const nmod_mat_struct,
1667        poly3: *const nmod_poly_struct,
1668        poly3inv: *const nmod_poly_struct,
1669    );
1670    pub fn _nmod_poly_compose_mod_brent_kung_preinv(
1671        res: nn_ptr,
1672        poly1: nn_srcptr,
1673        len1: slong,
1674        poly2: nn_srcptr,
1675        poly3: nn_srcptr,
1676        len3: slong,
1677        poly3inv: nn_srcptr,
1678        len3inv: slong,
1679        mod_: nmod_t,
1680    );
1681    pub fn nmod_poly_compose_mod_brent_kung_preinv(
1682        res: *mut nmod_poly_struct,
1683        poly1: *const nmod_poly_struct,
1684        poly2: *const nmod_poly_struct,
1685        poly3: *const nmod_poly_struct,
1686        poly3inv: *const nmod_poly_struct,
1687    );
1688    pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv(
1689        res: *mut nmod_poly_struct,
1690        polys: *const nmod_poly_struct,
1691        UNUSED_lenpolys: slong,
1692        l: slong,
1693        g: nn_srcptr,
1694        glen: slong,
1695        poly: nn_srcptr,
1696        len: slong,
1697        polyinv: nn_srcptr,
1698        leninv: slong,
1699        mod_: nmod_t,
1700    );
1701    pub fn nmod_poly_compose_mod_brent_kung_vec_preinv(
1702        res: *mut nmod_poly_struct,
1703        polys: *const nmod_poly_struct,
1704        len1: slong,
1705        n: slong,
1706        g: *const nmod_poly_struct,
1707        poly: *const nmod_poly_struct,
1708        polyinv: *const nmod_poly_struct,
1709    );
1710    pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv_worker(arg_ptr: *mut libc::c_void);
1711    pub fn nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1712        res: *mut nmod_poly_struct,
1713        polys: *const nmod_poly_struct,
1714        len1: slong,
1715        n: slong,
1716        g: *const nmod_poly_struct,
1717        poly: *const nmod_poly_struct,
1718        polyinv: *const nmod_poly_struct,
1719        threads: *mut thread_pool_handle,
1720        num_threads: slong,
1721    );
1722    pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1723        res: *mut nmod_poly_struct,
1724        polys: *const nmod_poly_struct,
1725        UNUSED_lenpolys: slong,
1726        l: slong,
1727        g: nn_srcptr,
1728        glen: slong,
1729        poly: nn_srcptr,
1730        len: slong,
1731        polyinv: nn_srcptr,
1732        leninv: slong,
1733        mod_: nmod_t,
1734        threads: *mut thread_pool_handle,
1735        num_threads: slong,
1736    );
1737    pub fn nmod_poly_compose_mod_brent_kung_vec_preinv_threaded(
1738        res: *mut nmod_poly_struct,
1739        polys: *const nmod_poly_struct,
1740        len1: slong,
1741        n: slong,
1742        g: *const nmod_poly_struct,
1743        poly: *const nmod_poly_struct,
1744        polyinv: *const nmod_poly_struct,
1745    );
1746    pub fn _nmod_poly_compose_mod_horner(
1747        res: nn_ptr,
1748        f: nn_srcptr,
1749        lenf: slong,
1750        g: nn_srcptr,
1751        h: nn_srcptr,
1752        lenh: slong,
1753        mod_: nmod_t,
1754    );
1755    pub fn nmod_poly_compose_mod_horner(
1756        res: *mut nmod_poly_struct,
1757        f: *const nmod_poly_struct,
1758        g: *const nmod_poly_struct,
1759        h: *const nmod_poly_struct,
1760    );
1761    pub fn _nmod_poly_compose_mod(
1762        res: nn_ptr,
1763        f: nn_srcptr,
1764        lenf: slong,
1765        g: nn_srcptr,
1766        h: nn_srcptr,
1767        lenh: slong,
1768        mod_: nmod_t,
1769    );
1770    pub fn nmod_poly_compose_mod(
1771        res: *mut nmod_poly_struct,
1772        f: *const nmod_poly_struct,
1773        g: *const nmod_poly_struct,
1774        h: *const nmod_poly_struct,
1775    );
1776    pub fn _nmod_poly_compose_series(
1777        res: nn_ptr,
1778        poly1: nn_srcptr,
1779        len1: slong,
1780        poly2: nn_srcptr,
1781        len2: slong,
1782        n: slong,
1783        mod_: nmod_t,
1784    );
1785    pub fn nmod_poly_compose_series(
1786        res: *mut nmod_poly_struct,
1787        poly1: *const nmod_poly_struct,
1788        poly2: *const nmod_poly_struct,
1789        n: slong,
1790    );
1791    pub fn _nmod_poly_revert_series(
1792        Qinv: nn_ptr,
1793        Q: nn_srcptr,
1794        Qlen: slong,
1795        n: slong,
1796        mod_: nmod_t,
1797    );
1798    pub fn nmod_poly_revert_series(
1799        Qinv: *mut nmod_poly_struct,
1800        Q: *const nmod_poly_struct,
1801        n: slong,
1802    );
1803    #[link_name = "_nmod_poly_hamming_weight__extern"]
1804    pub fn _nmod_poly_hamming_weight(a: nn_srcptr, len: slong) -> slong;
1805    #[link_name = "nmod_poly_hamming_weight__extern"]
1806    pub fn nmod_poly_hamming_weight(A: *const nmod_poly_struct) -> slong;
1807    pub fn nmod_poly_hgcd_iter_recursive_cutoff(mod_: nmod_t) -> slong;
1808    pub fn nmod_poly_hgcd_outer_cutoff(mod_: nmod_t) -> slong;
1809    pub fn nmod_poly_gcd_hgcd_cutoff(mod_: nmod_t) -> slong;
1810    pub fn nmod_poly_xgcd_hgcd_cutoff(mod_: nmod_t) -> slong;
1811    pub fn _nmod_poly_gcd_euclidean(
1812        G: nn_ptr,
1813        A: nn_srcptr,
1814        lenA: slong,
1815        B: nn_srcptr,
1816        lenB: slong,
1817        mod_: nmod_t,
1818    ) -> slong;
1819    pub fn nmod_poly_gcd_euclidean(
1820        G: *mut nmod_poly_struct,
1821        A: *const nmod_poly_struct,
1822        B: *const nmod_poly_struct,
1823    );
1824    pub fn _nmod_poly_gcd_euclidean_redc_fast(
1825        G: nn_ptr,
1826        A: nn_srcptr,
1827        lenA: slong,
1828        B: nn_srcptr,
1829        lenB: slong,
1830        mod_: nmod_t,
1831    ) -> slong;
1832    pub fn nmod_poly_gcd_euclidean_redc_fast(
1833        G: *mut nmod_poly_struct,
1834        A: *const nmod_poly_struct,
1835        B: *const nmod_poly_struct,
1836    );
1837    pub fn _nmod_poly_hgcd_recursive(
1838        M: *mut nn_ptr,
1839        lenM: *mut slong,
1840        A: nn_ptr,
1841        lenA: *mut slong,
1842        B: nn_ptr,
1843        lenB: *mut slong,
1844        a: nn_srcptr,
1845        lena: slong,
1846        b: nn_srcptr,
1847        lenb: slong,
1848        P: nn_ptr,
1849        mod_: nmod_t,
1850        flag: libc::c_int,
1851        res: *mut nmod_poly_res_struct,
1852    ) -> slong;
1853    pub fn nmod_poly_hgcd_ref(
1854        m11: *mut nmod_poly_struct,
1855        m12: *mut nmod_poly_struct,
1856        m21: *mut nmod_poly_struct,
1857        m22: *mut nmod_poly_struct,
1858        A: *mut nmod_poly_struct,
1859        B: *mut nmod_poly_struct,
1860        a: *const nmod_poly_struct,
1861        b: *const nmod_poly_struct,
1862    ) -> slong;
1863    pub fn _nmod_poly_hgcd(
1864        M: *mut nn_ptr,
1865        lenM: *mut slong,
1866        A: nn_ptr,
1867        lenA: *mut slong,
1868        B: nn_ptr,
1869        lenB: *mut slong,
1870        a: nn_srcptr,
1871        lena: slong,
1872        b: nn_srcptr,
1873        lenb: slong,
1874        mod_: nmod_t,
1875    ) -> slong;
1876    pub fn nmod_poly_hgcd(
1877        m11: *mut nmod_poly_struct,
1878        m12: *mut nmod_poly_struct,
1879        m21: *mut nmod_poly_struct,
1880        m22: *mut nmod_poly_struct,
1881        A: *mut nmod_poly_struct,
1882        B: *mut nmod_poly_struct,
1883        a: *const nmod_poly_struct,
1884        b: *const nmod_poly_struct,
1885    ) -> slong;
1886    pub fn _nmod_poly_gcd_hgcd(
1887        G: nn_ptr,
1888        A: nn_srcptr,
1889        lenA: slong,
1890        B: nn_srcptr,
1891        lenB: slong,
1892        mod_: nmod_t,
1893    ) -> slong;
1894    pub fn nmod_poly_gcd_hgcd(
1895        G: *mut nmod_poly_struct,
1896        A: *const nmod_poly_struct,
1897        B: *const nmod_poly_struct,
1898    );
1899    pub fn _nmod_poly_gcd(
1900        G: nn_ptr,
1901        A: nn_srcptr,
1902        lenA: slong,
1903        B: nn_srcptr,
1904        lenB: slong,
1905        mod_: nmod_t,
1906    ) -> slong;
1907    pub fn nmod_poly_gcd(
1908        G: *mut nmod_poly_struct,
1909        A: *const nmod_poly_struct,
1910        B: *const nmod_poly_struct,
1911    );
1912    pub fn _nmod_poly_xgcd_euclidean(
1913        res: nn_ptr,
1914        s: nn_ptr,
1915        t: nn_ptr,
1916        poly1: nn_srcptr,
1917        len1: slong,
1918        poly2: nn_srcptr,
1919        len2: slong,
1920        mod_: nmod_t,
1921    ) -> slong;
1922    pub fn nmod_poly_xgcd_euclidean(
1923        G: *mut nmod_poly_struct,
1924        S: *mut nmod_poly_struct,
1925        T: *mut nmod_poly_struct,
1926        A: *const nmod_poly_struct,
1927        B: *const nmod_poly_struct,
1928    );
1929    pub fn _nmod_poly_xgcd_hgcd(
1930        G: nn_ptr,
1931        S: nn_ptr,
1932        T: nn_ptr,
1933        A: nn_srcptr,
1934        lenA: slong,
1935        B: nn_srcptr,
1936        lenB: slong,
1937        mod_: nmod_t,
1938    ) -> slong;
1939    pub fn nmod_poly_xgcd_hgcd(
1940        G: *mut nmod_poly_struct,
1941        S: *mut nmod_poly_struct,
1942        T: *mut nmod_poly_struct,
1943        A: *const nmod_poly_struct,
1944        B: *const nmod_poly_struct,
1945    );
1946    pub fn _nmod_poly_xgcd(
1947        G: nn_ptr,
1948        S: nn_ptr,
1949        T: nn_ptr,
1950        A: nn_srcptr,
1951        lenA: slong,
1952        B: nn_srcptr,
1953        lenB: slong,
1954        mod_: nmod_t,
1955    ) -> slong;
1956    pub fn nmod_poly_xgcd(
1957        G: *mut nmod_poly_struct,
1958        S: *mut nmod_poly_struct,
1959        T: *mut nmod_poly_struct,
1960        A: *const nmod_poly_struct,
1961        B: *const nmod_poly_struct,
1962    );
1963    pub fn _nmod_poly_resultant_euclidean(
1964        poly1: nn_srcptr,
1965        len1: slong,
1966        poly2: nn_srcptr,
1967        len2: slong,
1968        mod_: nmod_t,
1969    ) -> ulong;
1970    pub fn nmod_poly_resultant_euclidean(
1971        f: *const nmod_poly_struct,
1972        g: *const nmod_poly_struct,
1973    ) -> ulong;
1974    pub fn _nmod_poly_resultant_hgcd(
1975        A: nn_srcptr,
1976        lenA: slong,
1977        B: nn_srcptr,
1978        lenB: slong,
1979        mod_: nmod_t,
1980    ) -> ulong;
1981    pub fn nmod_poly_resultant_hgcd(
1982        A: *const nmod_poly_struct,
1983        B: *const nmod_poly_struct,
1984    ) -> ulong;
1985    pub fn _nmod_poly_resultant(
1986        A: nn_srcptr,
1987        lenA: slong,
1988        B: nn_srcptr,
1989        lenB: slong,
1990        mod_: nmod_t,
1991    ) -> ulong;
1992    pub fn nmod_poly_resultant(A: *const nmod_poly_struct, B: *const nmod_poly_struct) -> ulong;
1993    pub fn _nmod_poly_gcdinv(
1994        G: *mut ulong,
1995        S: *mut ulong,
1996        A: *const ulong,
1997        lenA: slong,
1998        B: *const ulong,
1999        lenB: slong,
2000        mod_: nmod_t,
2001    ) -> slong;
2002    pub fn nmod_poly_gcdinv(
2003        G: *mut nmod_poly_struct,
2004        S: *mut nmod_poly_struct,
2005        A: *const nmod_poly_struct,
2006        B: *const nmod_poly_struct,
2007    );
2008    pub fn _nmod_poly_discriminant(poly: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
2009    pub fn nmod_poly_discriminant(f: *const nmod_poly_struct) -> ulong;
2010    pub fn _nmod_poly_invsqrt_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2011    pub fn nmod_poly_invsqrt_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2012    pub fn _nmod_poly_sqrt_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2013    pub fn nmod_poly_sqrt_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2014    pub fn _nmod_poly_sqrt(s: nn_ptr, p: nn_srcptr, len: slong, mod_: nmod_t) -> libc::c_int;
2015    pub fn nmod_poly_sqrt(b: *mut nmod_poly_struct, a: *const nmod_poly_struct) -> libc::c_int;
2016    pub fn _nmod_poly_power_sums_naive(
2017        res: nn_ptr,
2018        poly: nn_srcptr,
2019        len: slong,
2020        n: slong,
2021        mod_: nmod_t,
2022    );
2023    pub fn nmod_poly_power_sums_naive(
2024        res: *mut nmod_poly_struct,
2025        poly: *const nmod_poly_struct,
2026        n: slong,
2027    );
2028    pub fn _nmod_poly_power_sums_schoenhage(
2029        res: nn_ptr,
2030        poly: nn_srcptr,
2031        len: slong,
2032        n: slong,
2033        mod_: nmod_t,
2034    );
2035    pub fn nmod_poly_power_sums_schoenhage(
2036        res: *mut nmod_poly_struct,
2037        poly: *const nmod_poly_struct,
2038        n: slong,
2039    );
2040    pub fn _nmod_poly_power_sums(res: nn_ptr, poly: nn_srcptr, len: slong, n: slong, mod_: nmod_t);
2041    pub fn nmod_poly_power_sums(
2042        res: *mut nmod_poly_struct,
2043        poly: *const nmod_poly_struct,
2044        n: slong,
2045    );
2046    pub fn _nmod_poly_power_sums_to_poly_naive(
2047        res: nn_ptr,
2048        poly: nn_srcptr,
2049        len: slong,
2050        mod_: nmod_t,
2051    );
2052    pub fn nmod_poly_power_sums_to_poly_naive(
2053        res: *mut nmod_poly_struct,
2054        Q: *const nmod_poly_struct,
2055    );
2056    pub fn _nmod_poly_power_sums_to_poly_schoenhage(
2057        res: nn_ptr,
2058        poly: nn_srcptr,
2059        len: slong,
2060        mod_: nmod_t,
2061    );
2062    pub fn nmod_poly_power_sums_to_poly_schoenhage(
2063        res: *mut nmod_poly_struct,
2064        Q: *const nmod_poly_struct,
2065    );
2066    pub fn _nmod_poly_power_sums_to_poly(res: nn_ptr, poly: nn_srcptr, len: slong, mod_: nmod_t);
2067    pub fn nmod_poly_power_sums_to_poly(res: *mut nmod_poly_struct, Q: *const nmod_poly_struct);
2068    pub fn _nmod_poly_atan_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2069    pub fn nmod_poly_atan_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2070    pub fn _nmod_poly_tan_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2071    pub fn nmod_poly_tan_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2072    pub fn _nmod_poly_asin_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2073    pub fn nmod_poly_asin_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2074    pub fn _nmod_poly_sin_series(g: nn_ptr, h: nn_srcptr, n: slong, mod_: nmod_t);
2075    pub fn nmod_poly_sin_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2076    pub fn _nmod_poly_cos_series(g: nn_ptr, h: nn_srcptr, n: slong, mod_: nmod_t);
2077    pub fn nmod_poly_cos_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2078    pub fn _nmod_poly_asinh_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2079    pub fn nmod_poly_asinh_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2080    pub fn _nmod_poly_atanh_series(g: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2081    pub fn nmod_poly_atanh_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2082    pub fn _nmod_poly_sinh_series(g: nn_ptr, h: nn_srcptr, n: slong, mod_: nmod_t);
2083    pub fn nmod_poly_sinh_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2084    pub fn _nmod_poly_cosh_series(g: nn_ptr, h: nn_srcptr, n: slong, mod_: nmod_t);
2085    pub fn nmod_poly_cosh_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2086    pub fn _nmod_poly_tanh_series(g: nn_ptr, h: nn_srcptr, n: slong, mod_: nmod_t);
2087    pub fn nmod_poly_tanh_series(g: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2088    pub fn _nmod_poly_log_series(res: nn_ptr, f: nn_srcptr, flen: slong, n: slong, mod_: nmod_t);
2089    pub fn nmod_poly_log_series(res: *mut nmod_poly_struct, f: *const nmod_poly_struct, n: slong);
2090    pub fn _nmod_poly_exp_expinv_series(
2091        f: nn_ptr,
2092        g: nn_ptr,
2093        h: nn_srcptr,
2094        hlen: slong,
2095        n: slong,
2096        mod_: nmod_t,
2097    );
2098    pub fn _nmod_poly_exp_series(f: nn_ptr, h: nn_srcptr, hlen: slong, n: slong, mod_: nmod_t);
2099    pub fn nmod_poly_exp_series(f: *mut nmod_poly_struct, h: *const nmod_poly_struct, n: slong);
2100    pub fn _nmod_poly_conway(op: nn_ptr, prime: ulong, deg: slong) -> libc::c_int;
2101    pub fn _nmod_poly_conway_rand(
2102        degree: *mut slong,
2103        state: *mut flint_rand_struct,
2104        type_: libc::c_int,
2105    ) -> ulong;
2106    pub fn nmod_poly_product_roots_nmod_vec(poly: *mut nmod_poly_struct, xs: nn_srcptr, n: slong);
2107    pub fn _nmod_poly_product_roots_nmod_vec(poly: nn_ptr, xs: nn_srcptr, n: slong, mod_: nmod_t);
2108    pub fn _nmod_poly_split_rabin(
2109        a: *mut nmod_poly_struct,
2110        b: *mut nmod_poly_struct,
2111        f: *const nmod_poly_struct,
2112        t: *mut nmod_poly_struct,
2113        t2: *mut nmod_poly_struct,
2114        randstate: *mut flint_rand_struct,
2115    );
2116    pub fn nmod_poly_find_distinct_nonzero_roots(
2117        roots: *mut ulong,
2118        P: *const nmod_poly_struct,
2119    ) -> libc::c_int;
2120    pub fn nmod_poly_multi_crt_init(CRT: *mut nmod_poly_multi_crt_struct);
2121    pub fn nmod_poly_multi_crt_clear(CRT: *mut nmod_poly_multi_crt_struct);
2122    pub fn nmod_poly_multi_crt_precompute(
2123        CRT: *mut nmod_poly_multi_crt_struct,
2124        moduli: *const nmod_poly_struct,
2125        len: slong,
2126    ) -> libc::c_int;
2127    pub fn nmod_poly_multi_crt_precompute_p(
2128        CRT: *mut nmod_poly_multi_crt_struct,
2129        moduli: *const *const nmod_poly_struct,
2130        len: slong,
2131    ) -> libc::c_int;
2132    pub fn nmod_poly_multi_crt_precomp(
2133        output: *mut nmod_poly_struct,
2134        CRT: *const nmod_poly_multi_crt_struct,
2135        values: *const nmod_poly_struct,
2136    );
2137    pub fn nmod_poly_multi_crt_precomp_p(
2138        output: *mut nmod_poly_struct,
2139        CRT: *const nmod_poly_multi_crt_struct,
2140        values: *const *const nmod_poly_struct,
2141    );
2142    pub fn nmod_poly_multi_crt(
2143        output: *mut nmod_poly_struct,
2144        moduli: *const nmod_poly_struct,
2145        values: *const nmod_poly_struct,
2146        len: slong,
2147    ) -> libc::c_int;
2148    #[link_name = "_nmod_poly_multi_crt_local_size__extern"]
2149    pub fn _nmod_poly_multi_crt_local_size(CRT: *const nmod_poly_multi_crt_struct) -> slong;
2150    pub fn _nmod_poly_multi_crt_run(
2151        outputs: *mut nmod_poly_struct,
2152        CRT: *const nmod_poly_multi_crt_struct,
2153        inputs: *const nmod_poly_struct,
2154    );
2155    pub fn _nmod_poly_multi_crt_run_p(
2156        outputs: *mut nmod_poly_struct,
2157        CRT: *const nmod_poly_multi_crt_struct,
2158        inputs: *const *const nmod_poly_struct,
2159    );
2160    pub fn nmod_poly_deflation(input: *const nmod_poly_struct) -> slong;
2161    pub fn nmod_poly_deflate(
2162        result: *mut nmod_poly_struct,
2163        input: *const nmod_poly_struct,
2164        deflation: slong,
2165    );
2166    pub fn nmod_poly_inflate(
2167        result: *mut nmod_poly_struct,
2168        input: *const nmod_poly_struct,
2169        inflation: slong,
2170    );
2171    pub fn _nmod_mat_charpoly_berkowitz(p: nn_ptr, M: *const nmod_mat_struct, mod_: nmod_t);
2172    pub fn nmod_mat_charpoly_berkowitz(p: *mut nmod_poly_struct, M: *const nmod_mat_struct);
2173    pub fn nmod_mat_charpoly_danilevsky(p: *mut nmod_poly_struct, M: *const nmod_mat_struct);
2174    pub fn nmod_mat_charpoly(p: *mut nmod_poly_struct, M: *const nmod_mat_struct);
2175    pub fn nmod_mat_minpoly_with_gens(
2176        p: *mut nmod_poly_struct,
2177        X: *const nmod_mat_struct,
2178        P: *mut ulong,
2179    );
2180    pub fn nmod_mat_minpoly(p: *mut nmod_poly_struct, M: *const nmod_mat_struct);
2181    pub fn nmod_berlekamp_massey_init(B: *mut nmod_berlekamp_massey_struct, p: ulong);
2182    pub fn nmod_berlekamp_massey_clear(B: *mut nmod_berlekamp_massey_struct);
2183    pub fn nmod_berlekamp_massey_start_over(B: *mut nmod_berlekamp_massey_struct);
2184    pub fn nmod_berlekamp_massey_set_prime(B: *mut nmod_berlekamp_massey_struct, p: ulong);
2185    pub fn nmod_berlekamp_massey_print(B: *const nmod_berlekamp_massey_struct);
2186    pub fn nmod_berlekamp_massey_add_point(B: *mut nmod_berlekamp_massey_struct, a: ulong);
2187    pub fn nmod_berlekamp_massey_add_points(
2188        B: *mut nmod_berlekamp_massey_struct,
2189        a: *const ulong,
2190        count: slong,
2191    );
2192    pub fn nmod_berlekamp_massey_add_zeros(B: *mut nmod_berlekamp_massey_struct, count: slong);
2193    pub fn nmod_berlekamp_massey_reduce(B: *mut nmod_berlekamp_massey_struct) -> libc::c_int;
2194    #[link_name = "nmod_berlekamp_massey_points__extern"]
2195    pub fn nmod_berlekamp_massey_points(B: *const nmod_berlekamp_massey_struct) -> *const ulong;
2196    #[link_name = "nmod_berlekamp_massey_point_count__extern"]
2197    pub fn nmod_berlekamp_massey_point_count(B: *const nmod_berlekamp_massey_struct) -> slong;
2198    #[link_name = "nmod_berlekamp_massey_V_poly__extern"]
2199    pub fn nmod_berlekamp_massey_V_poly(
2200        B: *const nmod_berlekamp_massey_struct,
2201    ) -> *const nmod_poly_struct;
2202    #[link_name = "nmod_berlekamp_massey_R_poly__extern"]
2203    pub fn nmod_berlekamp_massey_R_poly(
2204        B: *const nmod_berlekamp_massey_struct,
2205    ) -> *const nmod_poly_struct;
2206}