flint_sys/
fmpz_mod_poly.rs

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