flint_sys/
fq_poly.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_poly.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::fmpz_mod_poly::fmpz_mod_poly_struct;
9use crate::fmpz_poly::fmpz_poly_struct;
10use crate::fq::{fq_ctx_struct, fq_struct};
11use crate::fq_mat::fq_mat_struct;
12use crate::nmod_poly::nmod_poly_struct;
13use libc::{c_char, c_int, FILE};
14
15#[repr(C)]
16#[derive(Debug, Copy, Clone)]
17pub struct fq_poly_struct {
18    pub coeffs: *mut fq_struct,
19    pub alloc: mp_limb_signed_t,
20    pub length: mp_limb_signed_t,
21}
22
23pub type fq_poly_t = [fq_poly_struct; 1usize];
24
25extern "C" {
26    pub fn fq_poly_init(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
27    pub fn fq_poly_init2(
28        poly: *mut fq_poly_struct,
29        alloc: mp_limb_signed_t,
30        ctx: *mut fq_ctx_struct,
31    );
32    pub fn fq_poly_realloc(
33        poly: *mut fq_poly_struct,
34        alloc: mp_limb_signed_t,
35        ctx: *mut fq_ctx_struct,
36    );
37    pub fn fq_poly_truncate(
38        poly: *mut fq_poly_struct,
39        len: mp_limb_signed_t,
40        ctx: *mut fq_ctx_struct,
41    );
42    pub fn fq_poly_set_trunc(
43        poly1: *mut fq_poly_struct,
44        poly2: *mut fq_poly_struct,
45        len: mp_limb_signed_t,
46        ctx: *mut fq_ctx_struct,
47    );
48    pub fn fq_poly_fit_length(
49        poly: *mut fq_poly_struct,
50        len: mp_limb_signed_t,
51        ctx: *mut fq_ctx_struct,
52    );
53    pub fn fq_poly_clear(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
54    pub fn _fq_poly_normalise(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
55    pub fn _fq_poly_normalise2(
56        poly: *const fq_struct,
57        length: *mut mp_limb_signed_t,
58        ctx: *mut fq_ctx_struct,
59    );
60    pub fn _fq_poly_set_length(
61        poly: *mut fq_poly_struct,
62        len: mp_limb_signed_t,
63        ctx: *mut fq_ctx_struct,
64    );
65    pub fn fq_poly_length(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
66    pub fn fq_poly_degree(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
67    pub fn fq_poly_lead(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> *mut fq_struct;
68    pub fn fq_poly_randtest(
69        f: *mut fq_poly_struct,
70        state: *mut flint_rand_s,
71        len: mp_limb_signed_t,
72        ctx: *mut fq_ctx_struct,
73    );
74    pub fn fq_poly_randtest_not_zero(
75        f: *mut fq_poly_struct,
76        state: *mut flint_rand_s,
77        len: mp_limb_signed_t,
78        ctx: *mut fq_ctx_struct,
79    );
80    pub fn fq_poly_randtest_monic(
81        f: *mut fq_poly_struct,
82        state: *mut flint_rand_s,
83        len: mp_limb_signed_t,
84        ctx: *mut fq_ctx_struct,
85    );
86    pub fn fq_poly_randtest_irreducible(
87        f: *mut fq_poly_struct,
88        state: *mut flint_rand_s,
89        len: mp_limb_signed_t,
90        ctx: *mut fq_ctx_struct,
91    );
92    pub fn _fq_poly_set(
93        rop: *mut fq_struct,
94        op: *const fq_struct,
95        len: mp_limb_signed_t,
96        ctx: *mut fq_ctx_struct,
97    );
98    pub fn fq_poly_set(rop: *mut fq_poly_struct, op: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
99    pub fn fq_poly_set_fq(
100        poly: *mut fq_poly_struct,
101        c: *mut fmpz_poly_struct,
102        ctx: *mut fq_ctx_struct,
103    );
104    pub fn fq_poly_set_fmpz_mod_poly(
105        rop: *mut fq_poly_struct,
106        op: *mut fmpz_mod_poly_struct,
107        ctx: *mut fq_ctx_struct,
108    );
109    pub fn fq_poly_set_nmod_poly(
110        rop: *mut fq_poly_struct,
111        op: *mut nmod_poly_struct,
112        ctx: *mut fq_ctx_struct,
113    );
114    pub fn fq_poly_swap(
115        op1: *mut fq_poly_struct,
116        op2: *mut fq_poly_struct,
117        ctx: *mut fq_ctx_struct,
118    );
119    pub fn _fq_poly_zero(rop: *mut fq_struct, len: mp_limb_signed_t, ctx: *mut fq_ctx_struct);
120    pub fn fq_poly_zero(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
121    pub fn fq_poly_one(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
122    pub fn fq_poly_gen(f: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
123    pub fn _fq_poly_make_monic(
124        rop: *mut fq_struct,
125        op: *const fq_struct,
126        length: mp_limb_signed_t,
127        ctx: *mut fq_ctx_struct,
128    );
129    pub fn fq_poly_make_monic(
130        rop: *mut fq_poly_struct,
131        op: *mut fq_poly_struct,
132        ctx: *mut fq_ctx_struct,
133    );
134    pub fn _fq_poly_reverse(
135        res: *mut fq_struct,
136        poly: *const fq_struct,
137        len: mp_limb_signed_t,
138        n: mp_limb_signed_t,
139        ctx: *mut fq_ctx_struct,
140    );
141    pub fn fq_poly_reverse(
142        res: *mut fq_poly_struct,
143        poly: *mut fq_poly_struct,
144        n: mp_limb_signed_t,
145        ctx: *mut fq_ctx_struct,
146    );
147    pub fn fq_poly_deflation(input: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> mp_limb_t;
148    pub fn fq_poly_deflate(
149        result: *mut fq_poly_struct,
150        input: *mut fq_poly_struct,
151        deflation: mp_limb_t,
152        ctx: *mut fq_ctx_struct,
153    );
154    pub fn fq_poly_inflate(
155        result: *mut fq_poly_struct,
156        input: *mut fq_poly_struct,
157        inflation: mp_limb_t,
158        ctx: *mut fq_ctx_struct,
159    );
160    pub fn fq_poly_get_coeff(
161        x: *mut fmpz_poly_struct,
162        poly: *mut fq_poly_struct,
163        n: mp_limb_signed_t,
164        ctx: *mut fq_ctx_struct,
165    );
166    pub fn fq_poly_set_coeff(
167        poly: *mut fq_poly_struct,
168        n: mp_limb_signed_t,
169        x: *mut fmpz_poly_struct,
170        ctx: *mut fq_ctx_struct,
171    );
172    pub fn fq_poly_set_coeff_fmpz(
173        poly: *mut fq_poly_struct,
174        n: mp_limb_signed_t,
175        x: *mut fmpz,
176        ctx: *mut fq_ctx_struct,
177    );
178    pub fn fq_poly_is_gen(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
179    pub fn fq_poly_equal(
180        poly1: *mut fq_poly_struct,
181        poly2: *mut fq_poly_struct,
182        ctx: *mut fq_ctx_struct,
183    ) -> c_int;
184    pub fn fq_poly_equal_trunc(
185        poly1: *mut fq_poly_struct,
186        poly2: *mut fq_poly_struct,
187        n: mp_limb_signed_t,
188        ctx: *mut fq_ctx_struct,
189    ) -> c_int;
190    pub fn fq_poly_is_zero(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
191    pub fn fq_poly_is_one(op: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
192    pub fn fq_poly_is_unit(op: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
193    pub fn fq_poly_equal_fq(
194        poly: *mut fq_poly_struct,
195        c: *mut fmpz_poly_struct,
196        ctx: *mut fq_ctx_struct,
197    ) -> c_int;
198    pub fn _fq_poly_add(
199        res: *mut fq_struct,
200        poly1: *const fq_struct,
201        len1: mp_limb_signed_t,
202        poly2: *const fq_struct,
203        len2: mp_limb_signed_t,
204        ctx: *mut fq_ctx_struct,
205    );
206    pub fn fq_poly_add(
207        rop: *mut fq_poly_struct,
208        op1: *mut fq_poly_struct,
209        op2: *mut fq_poly_struct,
210        ctx: *mut fq_ctx_struct,
211    );
212    pub fn fq_poly_add_si(
213        rop: *mut fq_poly_struct,
214        op1: *mut fq_poly_struct,
215        c: mp_limb_signed_t,
216        ctx: *mut fq_ctx_struct,
217    );
218    pub fn fq_poly_add_series(
219        rop: *mut fq_poly_struct,
220        op1: *mut fq_poly_struct,
221        op2: *mut fq_poly_struct,
222        n: mp_limb_signed_t,
223        ctx: *mut fq_ctx_struct,
224    );
225    pub fn _fq_poly_sub(
226        res: *mut fq_struct,
227        poly1: *const fq_struct,
228        len1: mp_limb_signed_t,
229        poly2: *const fq_struct,
230        len2: mp_limb_signed_t,
231        ctx: *mut fq_ctx_struct,
232    );
233    pub fn fq_poly_sub(
234        rop: *mut fq_poly_struct,
235        op1: *mut fq_poly_struct,
236        op2: *mut fq_poly_struct,
237        ctx: *mut fq_ctx_struct,
238    );
239    pub fn fq_poly_sub_series(
240        rop: *mut fq_poly_struct,
241        op1: *mut fq_poly_struct,
242        op2: *mut fq_poly_struct,
243        n: mp_limb_signed_t,
244        ctx: *mut fq_ctx_struct,
245    );
246    pub fn _fq_poly_neg(
247        rop: *mut fq_struct,
248        op: *const fq_struct,
249        len: mp_limb_signed_t,
250        ctx: *mut fq_ctx_struct,
251    );
252    pub fn fq_poly_neg(rop: *mut fq_poly_struct, op: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
253    pub fn _fq_poly_scalar_mul_fq(
254        rop: *mut fq_struct,
255        op: *const fq_struct,
256        len: mp_limb_signed_t,
257        x: *mut fmpz_poly_struct,
258        ctx: *mut fq_ctx_struct,
259    );
260    pub fn fq_poly_scalar_mul_fq(
261        rop: *mut fq_poly_struct,
262        op: *mut fq_poly_struct,
263        x: *mut fmpz_poly_struct,
264        ctx: *mut fq_ctx_struct,
265    );
266    pub fn _fq_poly_scalar_div_fq(
267        rop: *mut fq_struct,
268        op: *const fq_struct,
269        len: mp_limb_signed_t,
270        x: *mut fmpz_poly_struct,
271        ctx: *mut fq_ctx_struct,
272    );
273    pub fn fq_poly_scalar_div_fq(
274        rop: *mut fq_poly_struct,
275        op: *mut fq_poly_struct,
276        x: *mut fmpz_poly_struct,
277        ctx: *mut fq_ctx_struct,
278    );
279    pub fn _fq_poly_scalar_addmul_fq(
280        rop: *mut fq_struct,
281        op: *const fq_struct,
282        len: mp_limb_signed_t,
283        x: *mut fmpz_poly_struct,
284        ctx: *mut fq_ctx_struct,
285    );
286    pub fn fq_poly_scalar_addmul_fq(
287        rop: *mut fq_poly_struct,
288        op: *mut fq_poly_struct,
289        x: *mut fmpz_poly_struct,
290        ctx: *mut fq_ctx_struct,
291    );
292    pub fn _fq_poly_scalar_submul_fq(
293        rop: *mut fq_struct,
294        op: *const fq_struct,
295        len: mp_limb_signed_t,
296        x: *mut fmpz_poly_struct,
297        ctx: *mut fq_ctx_struct,
298    );
299    pub fn fq_poly_scalar_submul_fq(
300        rop: *mut fq_poly_struct,
301        op: *mut fq_poly_struct,
302        x: *mut fmpz_poly_struct,
303        ctx: *mut fq_ctx_struct,
304    );
305    pub fn _fq_poly_mul_classical(
306        rop: *mut fq_struct,
307        op1: *const fq_struct,
308        len1: mp_limb_signed_t,
309        op2: *const fq_struct,
310        len2: mp_limb_signed_t,
311        ctx: *mut fq_ctx_struct,
312    );
313    pub fn fq_poly_mul_classical(
314        rop: *mut fq_poly_struct,
315        op1: *mut fq_poly_struct,
316        op2: *mut fq_poly_struct,
317        ctx: *mut fq_ctx_struct,
318    );
319    pub fn _fq_poly_mul_reorder(
320        rop: *mut fq_struct,
321        op1: *const fq_struct,
322        len1: mp_limb_signed_t,
323        op2: *const fq_struct,
324        len2: mp_limb_signed_t,
325        ctx: *mut fq_ctx_struct,
326    );
327    pub fn fq_poly_mul_reorder(
328        rop: *mut fq_poly_struct,
329        op1: *mut fq_poly_struct,
330        op2: *mut fq_poly_struct,
331        ctx: *mut fq_ctx_struct,
332    );
333    pub fn _fq_poly_mul_univariate(
334        rop: *mut fq_struct,
335        op1: *const fq_struct,
336        len1: mp_limb_signed_t,
337        op2: *const fq_struct,
338        len2: mp_limb_signed_t,
339        ctx: *mut fq_ctx_struct,
340    );
341    pub fn fq_poly_mul_univariate(
342        rop: *mut fq_poly_struct,
343        op1: *mut fq_poly_struct,
344        op2: *mut fq_poly_struct,
345        ctx: *mut fq_ctx_struct,
346    );
347    pub fn _fq_poly_mul_KS(
348        rop: *mut fq_struct,
349        op1: *const fq_struct,
350        len1: mp_limb_signed_t,
351        op2: *const fq_struct,
352        len2: mp_limb_signed_t,
353        ctx: *mut fq_ctx_struct,
354    );
355    pub fn fq_poly_mul_KS(
356        rop: *mut fq_poly_struct,
357        op1: *mut fq_poly_struct,
358        op2: *mut fq_poly_struct,
359        ctx: *mut fq_ctx_struct,
360    );
361    pub fn _fq_poly_mul(
362        rop: *mut fq_struct,
363        op1: *const fq_struct,
364        len1: mp_limb_signed_t,
365        op2: *const fq_struct,
366        len2: mp_limb_signed_t,
367        ctx: *mut fq_ctx_struct,
368    );
369    pub fn fq_poly_mul(
370        rop: *mut fq_poly_struct,
371        op1: *mut fq_poly_struct,
372        op2: *mut fq_poly_struct,
373        ctx: *mut fq_ctx_struct,
374    );
375    pub fn _fq_poly_mullow_classical(
376        rop: *mut fq_struct,
377        op1: *const fq_struct,
378        len1: mp_limb_signed_t,
379        op2: *const fq_struct,
380        len2: mp_limb_signed_t,
381        n: mp_limb_signed_t,
382        ctx: *mut fq_ctx_struct,
383    );
384    pub fn fq_poly_mullow_classical(
385        rop: *mut fq_poly_struct,
386        op1: *mut fq_poly_struct,
387        op2: *mut fq_poly_struct,
388        n: mp_limb_signed_t,
389        ctx: *mut fq_ctx_struct,
390    );
391    pub fn _fq_poly_mullow_KS(
392        rop: *mut fq_struct,
393        op1: *const fq_struct,
394        len1: mp_limb_signed_t,
395        op2: *const fq_struct,
396        len2: mp_limb_signed_t,
397        n: mp_limb_signed_t,
398        ctx: *mut fq_ctx_struct,
399    );
400    pub fn fq_poly_mullow_KS(
401        rop: *mut fq_poly_struct,
402        op1: *mut fq_poly_struct,
403        op2: *mut fq_poly_struct,
404        n: mp_limb_signed_t,
405        ctx: *mut fq_ctx_struct,
406    );
407    pub fn _fq_poly_mullow_univariate(
408        rop: *mut fq_struct,
409        op1: *const fq_struct,
410        len1: mp_limb_signed_t,
411        op2: *const fq_struct,
412        len2: mp_limb_signed_t,
413        n: mp_limb_signed_t,
414        ctx: *mut fq_ctx_struct,
415    );
416    pub fn fq_poly_mullow_univariate(
417        rop: *mut fq_poly_struct,
418        op1: *mut fq_poly_struct,
419        op2: *mut fq_poly_struct,
420        n: mp_limb_signed_t,
421        ctx: *mut fq_ctx_struct,
422    );
423    pub fn _fq_poly_mullow(
424        rop: *mut fq_struct,
425        op1: *const fq_struct,
426        len1: mp_limb_signed_t,
427        op2: *const fq_struct,
428        len2: mp_limb_signed_t,
429        n: mp_limb_signed_t,
430        ctx: *mut fq_ctx_struct,
431    );
432    pub fn fq_poly_mullow(
433        rop: *mut fq_poly_struct,
434        op1: *mut fq_poly_struct,
435        op2: *mut fq_poly_struct,
436        n: mp_limb_signed_t,
437        ctx: *mut fq_ctx_struct,
438    );
439    pub fn _fq_poly_mulhigh_classical(
440        rop: *mut fq_struct,
441        op1: *const fq_struct,
442        len1: mp_limb_signed_t,
443        op2: *const fq_struct,
444        len2: mp_limb_signed_t,
445        start: mp_limb_signed_t,
446        ctx: *mut fq_ctx_struct,
447    );
448    pub fn fq_poly_mulhigh_classical(
449        rop: *mut fq_poly_struct,
450        op1: *mut fq_poly_struct,
451        op2: *mut fq_poly_struct,
452        start: mp_limb_signed_t,
453        ctx: *mut fq_ctx_struct,
454    );
455    pub fn _fq_poly_mulhigh(
456        res: *mut fq_struct,
457        poly1: *const fq_struct,
458        len1: mp_limb_signed_t,
459        poly2: *const fq_struct,
460        len2: mp_limb_signed_t,
461        n: mp_limb_signed_t,
462        ctx: *mut fq_ctx_struct,
463    );
464    pub fn fq_poly_mulhigh(
465        rop: *mut fq_poly_struct,
466        op1: *mut fq_poly_struct,
467        op2: *mut fq_poly_struct,
468        start: mp_limb_signed_t,
469        ctx: *mut fq_ctx_struct,
470    );
471    pub fn _fq_poly_mulmod(
472        res: *mut fq_struct,
473        poly1: *const fq_struct,
474        len1: mp_limb_signed_t,
475        poly2: *const fq_struct,
476        len2: mp_limb_signed_t,
477        f: *const fq_struct,
478        lenf: mp_limb_signed_t,
479        ctx: *mut fq_ctx_struct,
480    );
481    pub fn fq_poly_mulmod(
482        res: *mut fq_poly_struct,
483        poly1: *mut fq_poly_struct,
484        poly2: *mut fq_poly_struct,
485        f: *mut fq_poly_struct,
486        ctx: *mut fq_ctx_struct,
487    );
488    pub fn _fq_poly_mulmod_preinv(
489        res: *mut fq_struct,
490        poly1: *const fq_struct,
491        len1: mp_limb_signed_t,
492        poly2: *const fq_struct,
493        len2: mp_limb_signed_t,
494        f: *const fq_struct,
495        lenf: mp_limb_signed_t,
496        finv: *const fq_struct,
497        lenfinv: mp_limb_signed_t,
498        ctx: *mut fq_ctx_struct,
499    );
500    pub fn fq_poly_mulmod_preinv(
501        res: *mut fq_poly_struct,
502        poly1: *mut fq_poly_struct,
503        poly2: *mut fq_poly_struct,
504        f: *mut fq_poly_struct,
505        finv: *mut fq_poly_struct,
506        ctx: *mut fq_ctx_struct,
507    );
508    pub fn _fq_poly_sqr_classical(
509        rop: *mut fq_struct,
510        op: *const fq_struct,
511        len: mp_limb_signed_t,
512        ctx: *mut fq_ctx_struct,
513    );
514    pub fn fq_poly_sqr_classical(
515        rop: *mut fq_poly_struct,
516        op: *mut fq_poly_struct,
517        ctx: *mut fq_ctx_struct,
518    );
519    pub fn _fq_poly_sqr_reorder(
520        rop: *mut fq_struct,
521        op: *const fq_struct,
522        len: mp_limb_signed_t,
523        ctx: *mut fq_ctx_struct,
524    );
525    pub fn fq_poly_sqr_reorder(
526        rop: *mut fq_poly_struct,
527        op: *mut fq_poly_struct,
528        ctx: *mut fq_ctx_struct,
529    );
530    pub fn _fq_poly_sqr_KS(
531        rop: *mut fq_struct,
532        op: *const fq_struct,
533        len: mp_limb_signed_t,
534        ctx: *mut fq_ctx_struct,
535    );
536    pub fn fq_poly_sqr_KS(
537        rop: *mut fq_poly_struct,
538        op: *mut fq_poly_struct,
539        ctx: *mut fq_ctx_struct,
540    );
541    pub fn _fq_poly_sqr(
542        rop: *mut fq_struct,
543        op: *const fq_struct,
544        len: mp_limb_signed_t,
545        ctx: *mut fq_ctx_struct,
546    );
547    pub fn fq_poly_sqr(rop: *mut fq_poly_struct, op: *mut fq_poly_struct, ctx: *mut fq_ctx_struct);
548    pub fn _fq_poly_pow(
549        rop: *mut fq_struct,
550        op: *const fq_struct,
551        len: mp_limb_signed_t,
552        e: mp_limb_t,
553        ctx: *mut fq_ctx_struct,
554    );
555    pub fn fq_poly_pow(
556        rop: *mut fq_poly_struct,
557        op: *mut fq_poly_struct,
558        e: mp_limb_t,
559        ctx: *mut fq_ctx_struct,
560    );
561    pub fn _fq_poly_pow_trunc_binexp(
562        res: *mut fq_struct,
563        poly: *const fq_struct,
564        e: mp_limb_t,
565        trunc: mp_limb_signed_t,
566        ctx: *mut fq_ctx_struct,
567    );
568    pub fn fq_poly_pow_trunc_binexp(
569        res: *mut fq_poly_struct,
570        poly: *mut fq_poly_struct,
571        e: mp_limb_t,
572        trunc: mp_limb_signed_t,
573        ctx: *mut fq_ctx_struct,
574    );
575    pub fn _fq_poly_pow_trunc(
576        res: *mut fq_struct,
577        poly: *const fq_struct,
578        e: mp_limb_t,
579        trunc: mp_limb_signed_t,
580        ctx: *mut fq_ctx_struct,
581    );
582    pub fn fq_poly_pow_trunc(
583        res: *mut fq_poly_struct,
584        poly: *mut fq_poly_struct,
585        e: mp_limb_t,
586        trunc: mp_limb_signed_t,
587        ctx: *mut fq_ctx_struct,
588    );
589    pub fn _fq_poly_powmod_fmpz_binexp(
590        res: *mut fq_struct,
591        poly: *const fq_struct,
592        e: *mut fmpz,
593        f: *const fq_struct,
594        lenf: mp_limb_signed_t,
595        ctx: *mut fq_ctx_struct,
596    );
597    pub fn fq_poly_powmod_fmpz_binexp(
598        res: *mut fq_poly_struct,
599        poly: *mut fq_poly_struct,
600        e: *mut fmpz,
601        f: *mut fq_poly_struct,
602        ctx: *mut fq_ctx_struct,
603    );
604    pub fn _fq_poly_powmod_fmpz_binexp_preinv(
605        res: *mut fq_struct,
606        poly: *const fq_struct,
607        e: *mut fmpz,
608        f: *const fq_struct,
609        lenf: mp_limb_signed_t,
610        finv: *const fq_struct,
611        lenfinv: mp_limb_signed_t,
612        ctx: *mut fq_ctx_struct,
613    );
614    pub fn fq_poly_powmod_fmpz_binexp_preinv(
615        res: *mut fq_poly_struct,
616        poly: *mut fq_poly_struct,
617        e: *mut fmpz,
618        f: *mut fq_poly_struct,
619        finv: *mut fq_poly_struct,
620        ctx: *mut fq_ctx_struct,
621    );
622    pub fn _fq_poly_powmod_ui_binexp(
623        res: *mut fq_struct,
624        poly: *const fq_struct,
625        e: mp_limb_t,
626        f: *const fq_struct,
627        lenf: mp_limb_signed_t,
628        ctx: *mut fq_ctx_struct,
629    );
630    pub fn fq_poly_powmod_ui_binexp(
631        res: *mut fq_poly_struct,
632        poly: *mut fq_poly_struct,
633        e: mp_limb_t,
634        f: *mut fq_poly_struct,
635        ctx: *mut fq_ctx_struct,
636    );
637    pub fn _fq_poly_powmod_ui_binexp_preinv(
638        res: *mut fq_struct,
639        poly: *const fq_struct,
640        e: mp_limb_t,
641        f: *const fq_struct,
642        lenf: mp_limb_signed_t,
643        finv: *const fq_struct,
644        lenfinv: mp_limb_signed_t,
645        ctx: *mut fq_ctx_struct,
646    );
647    pub fn fq_poly_powmod_ui_binexp_preinv(
648        res: *mut fq_poly_struct,
649        poly: *mut fq_poly_struct,
650        e: mp_limb_t,
651        f: *mut fq_poly_struct,
652        finv: *mut fq_poly_struct,
653        ctx: *mut fq_ctx_struct,
654    );
655    pub fn _fq_poly_powmod_fmpz_sliding_preinv(
656        res: *mut fq_struct,
657        poly: *const fq_struct,
658        e: *mut fmpz,
659        k: mp_limb_t,
660        f: *const fq_struct,
661        lenf: mp_limb_signed_t,
662        finv: *const fq_struct,
663        lenfinv: mp_limb_signed_t,
664        ctx: *mut fq_ctx_struct,
665    );
666    pub fn fq_poly_powmod_fmpz_sliding_preinv(
667        res: *mut fq_poly_struct,
668        poly: *mut fq_poly_struct,
669        e: *mut fmpz,
670        k: mp_limb_t,
671        f: *mut fq_poly_struct,
672        finv: *mut fq_poly_struct,
673        ctx: *mut fq_ctx_struct,
674    );
675    pub fn _fq_poly_powmod_x_fmpz_preinv(
676        res: *mut fq_struct,
677        e: *mut fmpz,
678        f: *const fq_struct,
679        lenf: mp_limb_signed_t,
680        finv: *const fq_struct,
681        lenfinv: mp_limb_signed_t,
682        ctx: *mut fq_ctx_struct,
683    );
684    pub fn fq_poly_powmod_x_fmpz_preinv(
685        res: *mut fq_poly_struct,
686        e: *mut fmpz,
687        f: *mut fq_poly_struct,
688        finv: *mut fq_poly_struct,
689        ctx: *mut fq_ctx_struct,
690    );
691    pub fn _fq_poly_shift_left(
692        rop: *mut fq_struct,
693        op: *const fq_struct,
694        len: mp_limb_signed_t,
695        n: mp_limb_signed_t,
696        ctx: *mut fq_ctx_struct,
697    );
698    pub fn fq_poly_shift_left(
699        rop: *mut fq_poly_struct,
700        op: *mut fq_poly_struct,
701        n: mp_limb_signed_t,
702        ctx: *mut fq_ctx_struct,
703    );
704    pub fn _fq_poly_shift_right(
705        rop: *mut fq_struct,
706        op: *const fq_struct,
707        len: mp_limb_signed_t,
708        n: mp_limb_signed_t,
709        ctx: *mut fq_ctx_struct,
710    );
711    pub fn fq_poly_shift_right(
712        rop: *mut fq_poly_struct,
713        op: *mut fq_poly_struct,
714        n: mp_limb_signed_t,
715        ctx: *mut fq_ctx_struct,
716    );
717    pub fn _fq_poly_hamming_weight(
718        op: *const fq_struct,
719        len: mp_limb_signed_t,
720        ctx: *mut fq_ctx_struct,
721    ) -> mp_limb_signed_t;
722    pub fn fq_poly_hamming_weight(
723        op: *mut fq_poly_struct,
724        ctx: *mut fq_ctx_struct,
725    ) -> mp_limb_signed_t;
726    pub fn fq_poly_gcd_euclidean(
727        rop: *mut fq_poly_struct,
728        op1: *mut fq_poly_struct,
729        op2: *mut fq_poly_struct,
730        ctx: *mut fq_ctx_struct,
731    );
732    pub fn _fq_poly_gcd_euclidean(
733        G: *mut fq_struct,
734        A: *const fq_struct,
735        lenA: mp_limb_signed_t,
736        B: *const fq_struct,
737        lenB: mp_limb_signed_t,
738        invB: *mut fmpz_poly_struct,
739        ctx: *mut fq_ctx_struct,
740    ) -> mp_limb_signed_t;
741    pub fn _fq_poly_gcd(
742        G: *mut fq_struct,
743        A: *const fq_struct,
744        lenA: mp_limb_signed_t,
745        B: *const fq_struct,
746        lenB: mp_limb_signed_t,
747        invB: *mut fmpz_poly_struct,
748        ctx: *mut fq_ctx_struct,
749    ) -> mp_limb_signed_t;
750    pub fn fq_poly_gcd(
751        rop: *mut fq_poly_struct,
752        op1: *mut fq_poly_struct,
753        op2: *mut fq_poly_struct,
754        ctx: *mut fq_ctx_struct,
755    );
756    pub fn _fq_poly_gcd_euclidean_f(
757        f: *mut fmpz_poly_struct,
758        G: *mut fq_struct,
759        A: *const fq_struct,
760        lenA: mp_limb_signed_t,
761        B: *const fq_struct,
762        lenB: mp_limb_signed_t,
763        ctx: *mut fq_ctx_struct,
764    ) -> mp_limb_signed_t;
765    pub fn fq_poly_gcd_euclidean_f(
766        f: *mut fmpz_poly_struct,
767        G: *mut fq_poly_struct,
768        A: *mut fq_poly_struct,
769        B: *mut fq_poly_struct,
770        ctx: *mut fq_ctx_struct,
771    );
772    pub fn _fq_poly_hgcd(
773        M: *mut *mut fq_struct,
774        lenM: *mut mp_limb_signed_t,
775        A: *mut fq_struct,
776        lenA: *mut mp_limb_signed_t,
777        B: *mut fq_struct,
778        lenB: *mut mp_limb_signed_t,
779        a: *const fq_struct,
780        lena: mp_limb_signed_t,
781        b: *const fq_struct,
782        lenb: mp_limb_signed_t,
783        ctx: *mut fq_ctx_struct,
784    ) -> mp_limb_signed_t;
785    pub fn _fq_poly_gcd_hgcd(
786        G: *mut fq_struct,
787        A: *const fq_struct,
788        lenA: mp_limb_signed_t,
789        B: *const fq_struct,
790        lenB: mp_limb_signed_t,
791        invB: *mut fmpz_poly_struct,
792        ctx: *mut fq_ctx_struct,
793    ) -> mp_limb_signed_t;
794    pub fn fq_poly_gcd_hgcd(
795        G: *mut fq_poly_struct,
796        A: *mut fq_poly_struct,
797        B: *mut fq_poly_struct,
798        ctx: *mut fq_ctx_struct,
799    );
800    pub fn _fq_poly_xgcd_euclidean_f(
801        f: *mut fmpz_poly_struct,
802        G: *mut fq_struct,
803        S: *mut fq_struct,
804        fq: *mut fq_struct,
805        A: *const fq_struct,
806        lenA: mp_limb_signed_t,
807        B: *const fq_struct,
808        lenB: mp_limb_signed_t,
809        ctx: *mut fq_ctx_struct,
810    ) -> mp_limb_signed_t;
811    pub fn fq_poly_xgcd_euclidean_f(
812        f: *mut fmpz_poly_struct,
813        G: *mut fq_poly_struct,
814        S: *mut fq_poly_struct,
815        fq: *mut fq_poly_struct,
816        A: *mut fq_poly_struct,
817        B: *mut fq_poly_struct,
818        ctx: *mut fq_ctx_struct,
819    );
820    pub fn _fq_poly_xgcd_euclidean(
821        G: *mut fq_struct,
822        S: *mut fq_struct,
823        fq: *mut fq_struct,
824        A: *const fq_struct,
825        lenA: mp_limb_signed_t,
826        B: *const fq_struct,
827        lenB: mp_limb_signed_t,
828        invB: *mut fmpz_poly_struct,
829        ctx: *mut fq_ctx_struct,
830    ) -> mp_limb_signed_t;
831    pub fn fq_poly_xgcd_euclidean(
832        G: *mut fq_poly_struct,
833        S: *mut fq_poly_struct,
834        fq: *mut fq_poly_struct,
835        A: *mut fq_poly_struct,
836        B: *mut fq_poly_struct,
837        ctx: *mut fq_ctx_struct,
838    );
839    pub fn _fq_poly_xgcd(
840        G: *mut fq_struct,
841        S: *mut fq_struct,
842        fq: *mut fq_struct,
843        A: *const fq_struct,
844        lenA: mp_limb_signed_t,
845        B: *const fq_struct,
846        lenB: mp_limb_signed_t,
847        invB: *mut fmpz_poly_struct,
848        ctx: *mut fq_ctx_struct,
849    ) -> mp_limb_signed_t;
850    pub fn fq_poly_xgcd(
851        G: *mut fq_poly_struct,
852        S: *mut fq_poly_struct,
853        fq: *mut fq_poly_struct,
854        A: *mut fq_poly_struct,
855        B: *mut fq_poly_struct,
856        ctx: *mut fq_ctx_struct,
857    );
858    pub fn fq_poly_remove(
859        f: *mut fq_poly_struct,
860        g: *mut fq_poly_struct,
861        ctx: *mut fq_ctx_struct,
862    ) -> mp_limb_t;
863    pub fn _fq_poly_div_basecase(
864        Q: *mut fq_struct,
865        R: *mut fq_struct,
866        A: *const fq_struct,
867        lenA: mp_limb_signed_t,
868        B: *const fq_struct,
869        lenB: mp_limb_signed_t,
870        invB: *mut fmpz_poly_struct,
871        ctx: *mut fq_ctx_struct,
872    );
873    pub fn fq_poly_div_basecase(
874        Q: *mut fq_poly_struct,
875        A: *mut fq_poly_struct,
876        B: *mut fq_poly_struct,
877        ctx: *mut fq_ctx_struct,
878    );
879    pub fn _fq_poly_divrem_basecase(
880        Q: *mut fq_struct,
881        R: *mut fq_struct,
882        A: *const fq_struct,
883        lenA: mp_limb_signed_t,
884        B: *const fq_struct,
885        lenB: mp_limb_signed_t,
886        invB: *mut fmpz_poly_struct,
887        ctx: *mut fq_ctx_struct,
888    );
889    pub fn fq_poly_divrem_basecase(
890        Q: *mut fq_poly_struct,
891        R: *mut fq_poly_struct,
892        A: *mut fq_poly_struct,
893        B: *mut fq_poly_struct,
894        ctx: *mut fq_ctx_struct,
895    );
896    pub fn _fq_poly_divrem_divconquer_recursive(
897        Q: *mut fq_struct,
898        BQ: *mut fq_struct,
899        W: *mut fq_struct,
900        A: *const fq_struct,
901        B: *const fq_struct,
902        lenB: mp_limb_signed_t,
903        invB: *mut fmpz_poly_struct,
904        ctx: *mut fq_ctx_struct,
905    );
906    pub fn _fq_poly_divrem_divconquer(
907        Q: *mut fq_struct,
908        R: *mut fq_struct,
909        A: *const fq_struct,
910        lenA: mp_limb_signed_t,
911        B: *const fq_struct,
912        lenB: mp_limb_signed_t,
913        invB: *mut fmpz_poly_struct,
914        ctx: *mut fq_ctx_struct,
915    );
916    pub fn fq_poly_divrem_divconquer(
917        Q: *mut fq_poly_struct,
918        R: *mut fq_poly_struct,
919        A: *mut fq_poly_struct,
920        B: *mut fq_poly_struct,
921        ctx: *mut fq_ctx_struct,
922    );
923    pub fn _fq_poly_divrem(
924        Q: *mut fq_struct,
925        R: *mut fq_struct,
926        A: *const fq_struct,
927        lenA: mp_limb_signed_t,
928        B: *const fq_struct,
929        lenB: mp_limb_signed_t,
930        invB: *mut fmpz_poly_struct,
931        ctx: *mut fq_ctx_struct,
932    );
933    pub fn fq_poly_divrem(
934        Q: *mut fq_poly_struct,
935        R: *mut fq_poly_struct,
936        A: *mut fq_poly_struct,
937        B: *mut fq_poly_struct,
938        ctx: *mut fq_ctx_struct,
939    );
940    pub fn _fq_poly_rem(
941        R: *mut fq_struct,
942        A: *const fq_struct,
943        lenA: mp_limb_signed_t,
944        B: *const fq_struct,
945        lenB: mp_limb_signed_t,
946        invB: *mut fmpz_poly_struct,
947        ctx: *mut fq_ctx_struct,
948    );
949    pub fn fq_poly_rem(
950        R: *mut fq_poly_struct,
951        A: *mut fq_poly_struct,
952        B: *mut fq_poly_struct,
953        ctx: *mut fq_ctx_struct,
954    );
955    pub fn _fq_poly_inv_series_newton(
956        Qinv: *mut fq_struct,
957        Q: *const fq_struct,
958        n: mp_limb_signed_t,
959        cinv: *mut fmpz_poly_struct,
960        ctx: *mut fq_ctx_struct,
961    );
962    pub fn fq_poly_inv_series_newton(
963        Qinv: *mut fq_poly_struct,
964        Q: *mut fq_poly_struct,
965        n: mp_limb_signed_t,
966        ctx: *mut fq_ctx_struct,
967    );
968    pub fn _fq_poly_inv_series(
969        Qinv: *mut fq_struct,
970        Q: *const fq_struct,
971        n: mp_limb_signed_t,
972        cinv: *mut fmpz_poly_struct,
973        ctx: *mut fq_ctx_struct,
974    );
975    pub fn fq_poly_inv_series(
976        Qinv: *mut fq_poly_struct,
977        Q: *mut fq_poly_struct,
978        n: mp_limb_signed_t,
979        ctx: *mut fq_ctx_struct,
980    );
981    pub fn _fq_poly_div_series(
982        Q: *mut fq_struct,
983        A: *const fq_struct,
984        Alen: mp_limb_signed_t,
985        B: *const fq_struct,
986        Blen: mp_limb_signed_t,
987        n: mp_limb_signed_t,
988        ctx: *mut fq_ctx_struct,
989    );
990    pub fn fq_poly_div_series(
991        Q: *mut fq_poly_struct,
992        A: *mut fq_poly_struct,
993        B: *mut fq_poly_struct,
994        n: mp_limb_signed_t,
995        ctx: *mut fq_ctx_struct,
996    );
997    pub fn _fq_poly_div_newton_n_preinv(
998        Q: *mut fq_struct,
999        A: *const fq_struct,
1000        lenA: mp_limb_signed_t,
1001        B: *const fq_struct,
1002        lenB: mp_limb_signed_t,
1003        Binv: *const fq_struct,
1004        lenBinv: mp_limb_signed_t,
1005        ctx: *mut fq_ctx_struct,
1006    );
1007    pub fn fq_poly_div_newton_n_preinv(
1008        Q: *mut fq_poly_struct,
1009        A: *mut fq_poly_struct,
1010        B: *mut fq_poly_struct,
1011        Binv: *mut fq_poly_struct,
1012        ctx: *mut fq_ctx_struct,
1013    );
1014    pub fn _fq_poly_divrem_newton_n_preinv(
1015        Q: *mut fq_struct,
1016        R: *mut fq_struct,
1017        A: *const fq_struct,
1018        lenA: mp_limb_signed_t,
1019        B: *const fq_struct,
1020        lenB: mp_limb_signed_t,
1021        Binv: *const fq_struct,
1022        lenBinv: mp_limb_signed_t,
1023        ctx: *mut fq_ctx_struct,
1024    );
1025    pub fn fq_poly_divrem_newton_n_preinv(
1026        Q: *mut fq_poly_struct,
1027        R: *mut fq_poly_struct,
1028        A: *mut fq_poly_struct,
1029        B: *mut fq_poly_struct,
1030        Binv: *mut fq_poly_struct,
1031        ctx: *mut fq_ctx_struct,
1032    );
1033    pub fn _fq_poly_divrem_f(
1034        f: *mut fmpz_poly_struct,
1035        Q: *mut fq_struct,
1036        R: *mut fq_struct,
1037        A: *const fq_struct,
1038        lenA: mp_limb_signed_t,
1039        B: *const fq_struct,
1040        lenB: mp_limb_signed_t,
1041        ctx: *mut fq_ctx_struct,
1042    );
1043    pub fn fq_poly_divrem_f(
1044        f: *mut fmpz_poly_struct,
1045        Q: *mut fq_poly_struct,
1046        R: *mut fq_poly_struct,
1047        A: *mut fq_poly_struct,
1048        B: *mut fq_poly_struct,
1049        ctx: *mut fq_ctx_struct,
1050    );
1051    pub fn _fq_poly_divides(
1052        Q: *mut fq_struct,
1053        A: *const fq_struct,
1054        lenA: mp_limb_signed_t,
1055        B: *const fq_struct,
1056        lenB: mp_limb_signed_t,
1057        invB: *mut fmpz_poly_struct,
1058        ctx: *mut fq_ctx_struct,
1059    ) -> c_int;
1060    pub fn fq_poly_divides(
1061        Q: *mut fq_poly_struct,
1062        A: *mut fq_poly_struct,
1063        B: *mut fq_poly_struct,
1064        ctx: *mut fq_ctx_struct,
1065    ) -> c_int;
1066    pub fn _fq_poly_derivative(
1067        rop: *mut fq_struct,
1068        op: *const fq_struct,
1069        len: mp_limb_signed_t,
1070        ctx: *mut fq_ctx_struct,
1071    );
1072    pub fn fq_poly_derivative(
1073        rop: *mut fq_poly_struct,
1074        op: *mut fq_poly_struct,
1075        ctx: *mut fq_ctx_struct,
1076    );
1077    pub fn _fq_poly_evaluate_fq(
1078        rop: *mut fmpz_poly_struct,
1079        op: *const fq_struct,
1080        len: mp_limb_signed_t,
1081        a: *mut fmpz_poly_struct,
1082        ctx: *mut fq_ctx_struct,
1083    );
1084    pub fn fq_poly_evaluate_fq(
1085        res: *mut fmpz_poly_struct,
1086        f: *mut fq_poly_struct,
1087        a: *mut fmpz_poly_struct,
1088        ctx: *mut fq_ctx_struct,
1089    );
1090    pub fn _fq_poly_evaluate_fq_vec(
1091        ys: *mut fq_struct,
1092        coeffs: *const fq_struct,
1093        len: mp_limb_signed_t,
1094        xs: *const fq_struct,
1095        n: mp_limb_signed_t,
1096        ctx: *mut fq_ctx_struct,
1097    );
1098    pub fn fq_poly_evaluate_fq_vec(
1099        ys: *mut fq_struct,
1100        poly: *mut fq_poly_struct,
1101        xs: *const fq_struct,
1102        n: mp_limb_signed_t,
1103        ctx: *mut fq_ctx_struct,
1104    );
1105    pub fn _fq_poly_tree_alloc(
1106        len: mp_limb_signed_t,
1107        ctx: *mut fq_ctx_struct,
1108    ) -> *mut *mut fq_poly_struct;
1109    pub fn _fq_poly_tree_free(
1110        tree: *mut *mut fq_poly_struct,
1111        len: mp_limb_signed_t,
1112        ctx: *mut fq_ctx_struct,
1113    );
1114    pub fn _fq_poly_tree_build(
1115        tree: *mut *mut fq_poly_struct,
1116        roots: *const fq_struct,
1117        len: mp_limb_signed_t,
1118        ctx: *mut fq_ctx_struct,
1119    );
1120    pub fn _fq_poly_evaluate_fq_vec_fast_precomp(
1121        vs: *mut fq_struct,
1122        poly: *const fq_struct,
1123        plen: mp_limb_signed_t,
1124        tree: *const *mut fq_poly_struct,
1125        len: mp_limb_signed_t,
1126        ctx: *mut fq_ctx_struct,
1127    );
1128    pub fn _fq_poly_evaluate_fq_vec_fast(
1129        ys: *mut fq_struct,
1130        poly: *const fq_struct,
1131        plen: mp_limb_signed_t,
1132        xs: *const fq_struct,
1133        n: mp_limb_signed_t,
1134        ctx: *mut fq_ctx_struct,
1135    );
1136    pub fn fq_poly_evaluate_fq_vec_fast(
1137        ys: *mut fq_struct,
1138        poly: *mut fq_poly_struct,
1139        xs: *const fq_struct,
1140        n: mp_limb_signed_t,
1141        ctx: *mut fq_ctx_struct,
1142    );
1143    pub fn _fq_poly_evaluate_fq_vec_iter(
1144        ys: *mut fq_struct,
1145        coeffs: *const fq_struct,
1146        len: mp_limb_signed_t,
1147        xs: *const fq_struct,
1148        n: mp_limb_signed_t,
1149        ctx: *mut fq_ctx_struct,
1150    );
1151    pub fn fq_poly_evaluate_fq_vec_iter(
1152        ys: *mut fq_struct,
1153        poly: *mut fq_poly_struct,
1154        xs: *const fq_struct,
1155        n: mp_limb_signed_t,
1156        ctx: *mut fq_ctx_struct,
1157    );
1158    pub fn _fq_poly_compose_divconquer(
1159        rop: *mut fq_struct,
1160        op1: *const fq_struct,
1161        len1: mp_limb_signed_t,
1162        op2: *const fq_struct,
1163        len2: mp_limb_signed_t,
1164        ctx: *mut fq_ctx_struct,
1165    );
1166    pub fn fq_poly_compose_divconquer(
1167        rop: *mut fq_poly_struct,
1168        op1: *mut fq_poly_struct,
1169        op2: *mut fq_poly_struct,
1170        ctx: *mut fq_ctx_struct,
1171    );
1172    pub fn _fq_poly_compose_horner(
1173        rop: *mut fq_struct,
1174        op1: *const fq_struct,
1175        len1: mp_limb_signed_t,
1176        op2: *const fq_struct,
1177        len2: mp_limb_signed_t,
1178        ctx: *mut fq_ctx_struct,
1179    );
1180    pub fn fq_poly_compose_horner(
1181        rop: *mut fq_poly_struct,
1182        op1: *mut fq_poly_struct,
1183        op2: *mut fq_poly_struct,
1184        ctx: *mut fq_ctx_struct,
1185    );
1186    pub fn _fq_poly_compose(
1187        rop: *mut fq_struct,
1188        op1: *const fq_struct,
1189        len1: mp_limb_signed_t,
1190        op2: *const fq_struct,
1191        len2: mp_limb_signed_t,
1192        ctx: *mut fq_ctx_struct,
1193    );
1194    pub fn fq_poly_compose(
1195        rop: *mut fq_poly_struct,
1196        op1: *mut fq_poly_struct,
1197        op2: *mut fq_poly_struct,
1198        ctx: *mut fq_ctx_struct,
1199    );
1200    pub fn _fq_poly_compose_mod(
1201        res: *mut fq_struct,
1202        f: *const fq_struct,
1203        lenf: mp_limb_signed_t,
1204        g: *const fq_struct,
1205        h: *const fq_struct,
1206        lenh: mp_limb_signed_t,
1207        ctx: *mut fq_ctx_struct,
1208    );
1209    pub fn fq_poly_compose_mod(
1210        res: *mut fq_poly_struct,
1211        poly1: *mut fq_poly_struct,
1212        poly2: *mut fq_poly_struct,
1213        poly3: *mut fq_poly_struct,
1214        ctx: *mut fq_ctx_struct,
1215    );
1216    pub fn _fq_poly_compose_mod_preinv(
1217        res: *mut fq_struct,
1218        f: *const fq_struct,
1219        lenf: mp_limb_signed_t,
1220        g: *const fq_struct,
1221        h: *const fq_struct,
1222        lenh: mp_limb_signed_t,
1223        hinv: *const fq_struct,
1224        lenhinv: mp_limb_signed_t,
1225        ctx: *mut fq_ctx_struct,
1226    );
1227    pub fn fq_poly_compose_mod_preinv(
1228        res: *mut fq_poly_struct,
1229        poly1: *mut fq_poly_struct,
1230        poly2: *mut fq_poly_struct,
1231        poly3: *mut fq_poly_struct,
1232        poly3inv: *mut fq_poly_struct,
1233        ctx: *mut fq_ctx_struct,
1234    );
1235    pub fn _fq_poly_compose_mod_horner(
1236        res: *mut fq_struct,
1237        f: *const fq_struct,
1238        lenf: mp_limb_signed_t,
1239        g: *const fq_struct,
1240        h: *const fq_struct,
1241        lenh: mp_limb_signed_t,
1242        ctx: *mut fq_ctx_struct,
1243    );
1244    pub fn fq_poly_compose_mod_horner(
1245        res: *mut fq_poly_struct,
1246        poly1: *mut fq_poly_struct,
1247        poly2: *mut fq_poly_struct,
1248        poly3: *mut fq_poly_struct,
1249        ctx: *mut fq_ctx_struct,
1250    );
1251    pub fn _fq_poly_compose_mod_horner_preinv(
1252        res: *mut fq_struct,
1253        f: *const fq_struct,
1254        lenf: mp_limb_signed_t,
1255        g: *const fq_struct,
1256        h: *const fq_struct,
1257        lenh: mp_limb_signed_t,
1258        hinv: *const fq_struct,
1259        lenhinv: mp_limb_signed_t,
1260        ctx: *mut fq_ctx_struct,
1261    );
1262    pub fn fq_poly_compose_mod_horner_preinv(
1263        res: *mut fq_poly_struct,
1264        poly1: *mut fq_poly_struct,
1265        poly2: *mut fq_poly_struct,
1266        poly3: *mut fq_poly_struct,
1267        poly3inv: *mut fq_poly_struct,
1268        ctx: *mut fq_ctx_struct,
1269    );
1270    pub fn fq_poly_compose_mod_brent_kung(
1271        res: *mut fq_poly_struct,
1272        poly1: *mut fq_poly_struct,
1273        poly2: *mut fq_poly_struct,
1274        poly3: *mut fq_poly_struct,
1275        ctx: *mut fq_ctx_struct,
1276    );
1277    pub fn _fq_poly_compose_mod_brent_kung(
1278        res: *mut fq_struct,
1279        poly1: *const fq_struct,
1280        len1: mp_limb_signed_t,
1281        poly2: *const fq_struct,
1282        poly3: *const fq_struct,
1283        len3: mp_limb_signed_t,
1284        ctx: *mut fq_ctx_struct,
1285    );
1286    pub fn _fq_poly_compose_mod_brent_kung_preinv(
1287        res: *mut fq_struct,
1288        poly1: *const fq_struct,
1289        len1: mp_limb_signed_t,
1290        poly2: *const fq_struct,
1291        poly3: *const fq_struct,
1292        len3: mp_limb_signed_t,
1293        poly3inv: *const fq_struct,
1294        len3inv: mp_limb_signed_t,
1295        ctx: *mut fq_ctx_struct,
1296    );
1297    pub fn fq_poly_compose_mod_brent_kung_preinv(
1298        res: *mut fq_poly_struct,
1299        poly1: *mut fq_poly_struct,
1300        poly2: *mut fq_poly_struct,
1301        poly3: *mut fq_poly_struct,
1302        poly3inv: *mut fq_poly_struct,
1303        ctx: *mut fq_ctx_struct,
1304    );
1305    pub fn _fq_poly_reduce_matrix_mod_poly(
1306        A: *mut fq_mat_struct,
1307        B: *mut fq_mat_struct,
1308        f: *mut fq_poly_struct,
1309        ctx: *mut fq_ctx_struct,
1310    );
1311    pub fn _fq_poly_precompute_matrix(
1312        A: *mut fq_mat_struct,
1313        poly1: *const fq_struct,
1314        poly2: *const fq_struct,
1315        len2: mp_limb_signed_t,
1316        poly2inv: *const fq_struct,
1317        len2inv: mp_limb_signed_t,
1318        ctx: *mut fq_ctx_struct,
1319    );
1320    pub fn fq_poly_precompute_matrix(
1321        A: *mut fq_mat_struct,
1322        poly1: *mut fq_poly_struct,
1323        poly2: *mut fq_poly_struct,
1324        poly2inv: *mut fq_poly_struct,
1325        ctx: *mut fq_ctx_struct,
1326    );
1327    pub fn _fq_poly_compose_mod_brent_kung_precomp_preinv(
1328        res: *mut fq_struct,
1329        poly1: *const fq_struct,
1330        len1: mp_limb_signed_t,
1331        A: *mut fq_mat_struct,
1332        poly3: *const fq_struct,
1333        len3: mp_limb_signed_t,
1334        poly3inv: *const fq_struct,
1335        len3inv: mp_limb_signed_t,
1336        ctx: *mut fq_ctx_struct,
1337    );
1338    pub fn fq_poly_compose_mod_brent_kung_precomp_preinv(
1339        res: *mut fq_poly_struct,
1340        poly1: *mut fq_poly_struct,
1341        A: *mut fq_mat_struct,
1342        poly3: *mut fq_poly_struct,
1343        poly3inv: *mut fq_poly_struct,
1344        ctx: *mut fq_ctx_struct,
1345    );
1346    pub fn _fq_poly_fprint_pretty(
1347        file: *mut FILE,
1348        poly: *const fq_struct,
1349        len: mp_limb_signed_t,
1350        x: *const c_char,
1351        ctx: *mut fq_ctx_struct,
1352    ) -> c_int;
1353    pub fn fq_poly_fprint_pretty(
1354        file: *mut FILE,
1355        poly: *mut fq_poly_struct,
1356        x: *const c_char,
1357        ctx: *mut fq_ctx_struct,
1358    ) -> c_int;
1359    pub fn _fq_poly_fprint(
1360        file: *mut FILE,
1361        poly: *const fq_struct,
1362        len: mp_limb_signed_t,
1363        ctx: *mut fq_ctx_struct,
1364    ) -> c_int;
1365    pub fn fq_poly_fprint(
1366        file: *mut FILE,
1367        poly: *mut fq_poly_struct,
1368        ctx: *mut fq_ctx_struct,
1369    ) -> c_int;
1370    pub fn _fq_poly_print(
1371        poly: *const fq_struct,
1372        len: mp_limb_signed_t,
1373        ctx: *mut fq_ctx_struct,
1374    ) -> c_int;
1375    pub fn fq_poly_print(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
1376    pub fn _fq_poly_print_pretty(
1377        poly: *const fq_struct,
1378        len: mp_limb_signed_t,
1379        x: *const c_char,
1380        ctx: *mut fq_ctx_struct,
1381    ) -> c_int;
1382    pub fn fq_poly_print_pretty(
1383        poly: *mut fq_poly_struct,
1384        x: *const c_char,
1385        ctx: *mut fq_ctx_struct,
1386    ) -> c_int;
1387    pub fn _fq_poly_get_str_pretty(
1388        poly: *const fq_struct,
1389        len: mp_limb_signed_t,
1390        x: *const c_char,
1391        ctx: *mut fq_ctx_struct,
1392    ) -> *mut c_char;
1393    pub fn fq_poly_get_str_pretty(
1394        poly: *mut fq_poly_struct,
1395        x: *const c_char,
1396        ctx: *mut fq_ctx_struct,
1397    ) -> *mut c_char;
1398    pub fn _fq_poly_get_str(
1399        poly: *const fq_struct,
1400        len: mp_limb_signed_t,
1401        ctx: *mut fq_ctx_struct,
1402    ) -> *mut c_char;
1403    pub fn fq_poly_get_str(poly: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> *mut c_char;
1404    pub fn fq_mat_charpoly_danilevsky(
1405        p: *mut fq_poly_struct,
1406        A: *mut fq_mat_struct,
1407        ctx: *mut fq_ctx_struct,
1408    );
1409    pub fn fq_mat_charpoly(p: *mut fq_poly_struct, M: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
1410    pub fn fq_mat_minpoly(p: *mut fq_poly_struct, X: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
1411}