flint_sys/
n_poly.rs

1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4//! *See the [FLINT documentation](http://flintlib.org/doc/n_poly.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpz::fmpz;
9use crate::fq_nmod::fq_nmod_ctx_struct;
10use crate::fq_nmod_poly::fq_nmod_poly_struct;
11use crate::nmod_poly::nmod_poly_struct;
12use crate::nmod_vec::nmod_t;
13use libc::{c_char, c_int, FILE};
14
15#[repr(C)]
16#[derive(Debug, Copy, Clone)]
17pub struct n_poly_struct {
18    pub coeffs: *mut mp_limb_t,
19    pub alloc: mp_limb_signed_t,
20    pub length: mp_limb_signed_t,
21}
22pub type n_poly_t = [n_poly_struct; 1usize];
23pub type n_fq_poly_struct = n_poly_struct;
24pub type n_fq_poly_t = n_poly_t;
25#[repr(C)]
26#[derive(Debug, Copy, Clone)]
27pub struct n_bpoly_struct {
28    pub coeffs: *mut n_poly_struct,
29    pub alloc: mp_limb_signed_t,
30    pub length: mp_limb_signed_t,
31}
32pub type n_bpoly_t = [n_bpoly_struct; 1usize];
33pub type n_fq_bpoly_struct = n_bpoly_struct;
34pub type n_fq_bpoly_t = n_bpoly_t;
35#[repr(C)]
36#[derive(Debug, Copy, Clone)]
37pub struct n_tpoly_struct {
38    pub coeffs: *mut n_bpoly_struct,
39    pub alloc: mp_limb_signed_t,
40    pub length: mp_limb_signed_t,
41}
42pub type n_tpoly_t = [n_tpoly_struct; 1usize];
43pub type n_fq_tpoly_struct = n_tpoly_struct;
44pub type n_fq_tpoly_t = n_tpoly_t;
45#[repr(C)]
46#[derive(Debug, Copy, Clone)]
47pub struct n_polyu_struct {
48    pub exps: *mut mp_limb_t,
49    pub coeffs: *mut mp_limb_t,
50    pub length: mp_limb_signed_t,
51    pub alloc: mp_limb_signed_t,
52}
53pub type n_polyu_t = [n_polyu_struct; 1usize];
54pub type n_fq_polyu_struct = n_polyu_struct;
55pub type n_fq_polyu_t = n_polyu_t;
56#[repr(C)]
57#[derive(Debug, Copy, Clone)]
58pub struct n_polyun_struct {
59    pub coeffs: *mut n_poly_struct,
60    pub exps: *mut mp_limb_t,
61    pub length: mp_limb_signed_t,
62    pub alloc: mp_limb_signed_t,
63}
64pub type n_polyun_t = [n_polyun_struct; 1usize];
65pub type n_fq_polyun_struct = n_polyun_struct;
66pub type n_fq_polyun_t = n_polyun_t;
67#[repr(C)]
68#[derive(Debug, Copy, Clone)]
69pub struct n_poly_stack_struct {
70    pub array: *mut *mut n_poly_struct,
71    pub alloc: mp_limb_signed_t,
72    pub top: mp_limb_signed_t,
73}
74pub type n_poly_stack_t = [n_poly_stack_struct; 1usize];
75#[repr(C)]
76#[derive(Debug, Copy, Clone)]
77pub struct n_bpoly_stack_struct {
78    pub array: *mut *mut n_bpoly_struct,
79    pub alloc: mp_limb_signed_t,
80    pub top: mp_limb_signed_t,
81}
82pub type n_bpoly_stack_t = [n_bpoly_stack_struct; 1usize];
83#[repr(C)]
84#[derive(Debug, Copy, Clone)]
85pub struct n_poly_bpoly_stack_struct {
86    pub poly_stack: n_poly_stack_t,
87    pub bpoly_stack: n_bpoly_stack_t,
88}
89pub type n_poly_bpoly_stack_t = [n_poly_bpoly_stack_struct; 1usize];
90#[repr(C)]
91#[derive(Debug, Copy, Clone)]
92pub struct n_polyun_stack_struct {
93    pub array: *mut *mut n_polyun_struct,
94    pub alloc: mp_limb_signed_t,
95    pub top: mp_limb_signed_t,
96}
97pub type n_polyun_stack_t = [n_polyun_stack_struct; 1usize];
98#[repr(C)]
99#[derive(Debug, Copy, Clone)]
100pub struct n_poly_polyun_stack_struct {
101    pub poly_stack: n_poly_stack_t,
102    pub polyun_stack: n_polyun_stack_t,
103}
104pub type n_poly_polyun_stack_t = [n_poly_polyun_stack_struct; 1usize];
105extern "C" {
106    pub fn n_poly_init(A: *mut n_poly_struct);
107}
108extern "C" {
109    pub fn n_poly_init2(A: *mut n_poly_struct, alloc: mp_limb_signed_t);
110}
111extern "C" {
112    pub fn n_poly_clear(A: *mut n_poly_struct);
113}
114extern "C" {
115    pub fn n_poly_is_canonical(A: *mut n_poly_struct) -> c_int;
116}
117extern "C" {
118    pub fn n_poly_realloc(A: *mut n_poly_struct, len: mp_limb_signed_t);
119}
120extern "C" {
121    pub fn n_poly_print_pretty(A: *mut n_poly_struct, x: *const c_char);
122}
123extern "C" {
124    pub fn n_poly_fit_length(A: *mut n_poly_struct, len: mp_limb_signed_t);
125}
126extern "C" {
127    pub fn nmod_poly_mock(a: *mut nmod_poly_struct, b: *mut n_poly_struct, mod_: nmod_t);
128}
129extern "C" {
130    pub fn n_poly_mock(a: *mut n_poly_struct, b: *mut nmod_poly_struct);
131}
132extern "C" {
133    pub fn n_poly_set(A: *mut n_poly_struct, B: *mut n_poly_struct);
134}
135extern "C" {
136    pub fn n_poly_swap(A: *mut n_poly_struct, B: *mut n_poly_struct);
137}
138extern "C" {
139    pub fn _n_poly_normalise(A: *mut n_poly_struct);
140}
141extern "C" {
142    pub fn n_poly_degree(A: *mut n_poly_struct) -> mp_limb_signed_t;
143}
144extern "C" {
145    pub fn n_poly_is_one(A: *mut n_poly_struct) -> c_int;
146}
147extern "C" {
148    pub fn n_poly_lead(A: *mut n_poly_struct) -> mp_limb_t;
149}
150extern "C" {
151    pub fn n_poly_one(A: *mut n_poly_struct);
152}
153extern "C" {
154    pub fn n_poly_set_ui(A: *mut n_poly_struct, c: mp_limb_t);
155}
156extern "C" {
157    pub fn n_poly_is_zero(poly: *mut n_poly_struct) -> c_int;
158}
159extern "C" {
160    pub fn n_poly_zero(res: *mut n_poly_struct);
161}
162extern "C" {
163    pub fn n_poly_equal(a: *mut n_poly_struct, b: *mut n_poly_struct) -> c_int;
164}
165extern "C" {
166    pub fn n_poly_mod_is_canonical(A: *mut n_poly_struct, mod_: nmod_t) -> c_int;
167}
168extern "C" {
169    pub fn n_poly_mod_make_monic(A: *mut n_poly_struct, B: *mut n_poly_struct, mod_: nmod_t);
170}
171extern "C" {
172    pub fn n_poly_mod_taylor_shift(g: *mut n_poly_struct, c: mp_limb_t, mod_: nmod_t);
173}
174extern "C" {
175    pub fn n_poly_get_coeff(poly: *mut n_poly_struct, j: mp_limb_signed_t) -> mp_limb_t;
176}
177extern "C" {
178    pub fn n_poly_set_coeff_nonzero(A: *mut n_poly_struct, j: mp_limb_signed_t, c: mp_limb_t);
179}
180extern "C" {
181    pub fn n_poly_set_coeff(A: *mut n_poly_struct, e: mp_limb_signed_t, c: mp_limb_t);
182}
183extern "C" {
184    pub fn n_poly_mod_set_coeff_ui(
185        A: *mut n_poly_struct,
186        j: mp_limb_signed_t,
187        c: mp_limb_t,
188        mod_: nmod_t,
189    );
190}
191extern "C" {
192    pub fn n_poly_set_nmod_poly(a: *mut n_poly_struct, b: *mut nmod_poly_struct);
193}
194extern "C" {
195    pub fn nmod_poly_set_n_poly(a: *mut nmod_poly_struct, b: *mut n_poly_struct);
196}
197extern "C" {
198    pub fn n_poly_shift_left(A: *mut n_poly_struct, B: *mut n_poly_struct, k: mp_limb_signed_t);
199}
200extern "C" {
201    pub fn n_poly_shift_right(
202        res: *mut n_poly_struct,
203        poly: *mut n_poly_struct,
204        k: mp_limb_signed_t,
205    );
206}
207extern "C" {
208    pub fn n_poly_truncate(poly: *mut n_poly_struct, len: mp_limb_signed_t);
209}
210extern "C" {
211    pub fn _n_poly_mod_scalar_mul_nmod(
212        A: *mut n_poly_struct,
213        B: *mut n_poly_struct,
214        c: mp_limb_t,
215        mod_: nmod_t,
216    );
217}
218extern "C" {
219    pub fn _n_poly_mod_scalar_mul_nmod_inplace(A: *mut n_poly_struct, c: mp_limb_t, mod_: nmod_t);
220}
221extern "C" {
222    pub fn n_poly_mod_scalar_mul_ui(
223        A: *mut n_poly_struct,
224        B: *mut n_poly_struct,
225        c: mp_limb_t,
226        ctx: nmod_t,
227    );
228}
229extern "C" {
230    pub fn n_poly_mod_eval_step2(
231        Acur: *mut n_poly_struct,
232        Ainc: *mut n_poly_struct,
233        mod_: nmod_t,
234    ) -> mp_limb_t;
235}
236extern "C" {
237    pub fn n_poly_mod_evaluate_nmod(A: *mut n_poly_struct, c: mp_limb_t, mod_: nmod_t)
238        -> mp_limb_t;
239}
240extern "C" {
241    pub fn n_poly_mod_neg(A: *mut n_poly_struct, B: *mut n_poly_struct, mod_: nmod_t);
242}
243extern "C" {
244    pub fn n_poly_mod_add(
245        A: *mut n_poly_struct,
246        B: *mut n_poly_struct,
247        C: *mut n_poly_struct,
248        mod_: nmod_t,
249    );
250}
251extern "C" {
252    pub fn n_poly_mod_add_ui(
253        res: *mut n_poly_struct,
254        poly: *mut n_poly_struct,
255        c: mp_limb_t,
256        ctx: nmod_t,
257    );
258}
259extern "C" {
260    pub fn n_poly_mod_sub(
261        A: *mut n_poly_struct,
262        B: *mut n_poly_struct,
263        C: *mut n_poly_struct,
264        mod_: nmod_t,
265    );
266}
267extern "C" {
268    pub fn n_poly_mod_product_roots_nmod_vec(
269        A: *mut n_poly_struct,
270        r: mp_srcptr,
271        n: mp_limb_signed_t,
272        mod_: nmod_t,
273    );
274}
275extern "C" {
276    pub fn n_poly_mod_shift_left_scalar_addmul(
277        A: *mut n_poly_struct,
278        k: mp_limb_signed_t,
279        c: mp_limb_t,
280        mod_: nmod_t,
281    );
282}
283extern "C" {
284    pub fn n_poly_mod_addmul_linear(
285        A: *mut n_poly_struct,
286        B: *mut n_poly_struct,
287        C: *mut n_poly_struct,
288        d1: mp_limb_t,
289        d0: mp_limb_t,
290        mod_: nmod_t,
291    );
292}
293extern "C" {
294    pub fn n_poly_mod_scalar_addmul_nmod(
295        A: *mut n_poly_struct,
296        B: *mut n_poly_struct,
297        C: *mut n_poly_struct,
298        d0: mp_limb_t,
299        ctx: nmod_t,
300    );
301}
302extern "C" {
303    pub fn _n_poly_eval_pow(
304        P: *mut n_poly_struct,
305        alphapow: *mut n_poly_struct,
306        nlimbs: c_int,
307        ctx: nmod_t,
308    ) -> mp_limb_t;
309}
310extern "C" {
311    pub fn n_poly_mod_eval_pow(
312        P: *mut n_poly_struct,
313        alphapow: *mut n_poly_struct,
314        ctx: nmod_t,
315    ) -> mp_limb_t;
316}
317extern "C" {
318    pub fn n_poly_mod_eval2_pow(
319        vp: *mut mp_limb_t,
320        vm: *mut mp_limb_t,
321        P: *mut n_poly_struct,
322        alphapow: *mut n_poly_struct,
323        ctx: nmod_t,
324    );
325}
326extern "C" {
327    pub fn n_poly_mod_div_root(
328        Q: *mut n_poly_struct,
329        A: *mut n_poly_struct,
330        c: mp_limb_t,
331        ctx: nmod_t,
332    ) -> mp_limb_t;
333}
334extern "C" {
335    pub fn _n_poly_mod_mul(
336        A: *mut n_poly_struct,
337        B: *mut n_poly_struct,
338        C: *mut n_poly_struct,
339        ctx: nmod_t,
340    );
341}
342extern "C" {
343    pub fn _n_poly_mod_div(
344        Q: *mut n_poly_struct,
345        A: *mut n_poly_struct,
346        B: *mut n_poly_struct,
347        mod_: nmod_t,
348    );
349}
350extern "C" {
351    pub fn _n_poly_mod_rem(
352        R: *mut n_poly_struct,
353        A: *mut n_poly_struct,
354        B: *mut n_poly_struct,
355        mod_: nmod_t,
356    );
357}
358extern "C" {
359    pub fn _n_poly_mod_divrem(
360        Q: *mut n_poly_struct,
361        R: *mut n_poly_struct,
362        A: *mut n_poly_struct,
363        B: *mut n_poly_struct,
364        mod_: nmod_t,
365    );
366}
367extern "C" {
368    pub fn n_poly_mod_remove(
369        f: *mut n_poly_struct,
370        p: *mut n_poly_struct,
371        ctx: nmod_t,
372    ) -> mp_limb_t;
373}
374extern "C" {
375    pub fn n_poly_mod_pow(
376        res: *mut n_poly_struct,
377        poly: *mut n_poly_struct,
378        e: mp_limb_t,
379        ctx: nmod_t,
380    );
381}
382extern "C" {
383    pub fn n_poly_mod_mul(
384        A: *mut n_poly_struct,
385        B: *mut n_poly_struct,
386        C: *mut n_poly_struct,
387        mod_: nmod_t,
388    );
389}
390extern "C" {
391    pub fn n_poly_mod_mullow(
392        A: *mut n_poly_struct,
393        B: *mut n_poly_struct,
394        C: *mut n_poly_struct,
395        n: mp_limb_signed_t,
396        mod_: nmod_t,
397    );
398}
399extern "C" {
400    pub fn n_poly_mod_div(
401        Q: *mut n_poly_struct,
402        A: *mut n_poly_struct,
403        B: *mut n_poly_struct,
404        mod_: nmod_t,
405    );
406}
407extern "C" {
408    pub fn n_poly_mod_rem(
409        R: *mut n_poly_struct,
410        A: *mut n_poly_struct,
411        B: *mut n_poly_struct,
412        mod_: nmod_t,
413    );
414}
415extern "C" {
416    pub fn n_poly_mod_divrem(
417        Q: *mut n_poly_struct,
418        R: *mut n_poly_struct,
419        A: *mut n_poly_struct,
420        B: *mut n_poly_struct,
421        mod_: nmod_t,
422    );
423}
424extern "C" {
425    pub fn n_poly_mod_mulmod(
426        res: *mut n_poly_struct,
427        poly1: *mut n_poly_struct,
428        poly2: *mut n_poly_struct,
429        f: *mut n_poly_struct,
430        mod_: nmod_t,
431    );
432}
433extern "C" {
434    pub fn n_poly_mod_invmod(
435        A: *mut n_poly_struct,
436        B: *mut n_poly_struct,
437        P: *mut n_poly_struct,
438        mod_: nmod_t,
439    ) -> c_int;
440}
441extern "C" {
442    pub fn n_poly_mod_gcd(
443        G: *mut n_poly_struct,
444        A: *mut n_poly_struct,
445        B: *mut n_poly_struct,
446        mod_: nmod_t,
447    );
448}
449extern "C" {
450    pub fn n_poly_mod_xgcd(
451        G: *mut n_poly_struct,
452        S: *mut n_poly_struct,
453        T: *mut n_poly_struct,
454        A: *mut n_poly_struct,
455        B: *mut n_poly_struct,
456        mod_: nmod_t,
457    );
458}
459extern "C" {
460    pub fn n_poly_mod_inv_series(
461        Qinv: *mut n_poly_struct,
462        Q: *mut n_poly_struct,
463        n: mp_limb_signed_t,
464        mod_: nmod_t,
465    );
466}
467extern "C" {
468    pub fn n_poly_mod_div_series(
469        Q: *mut n_poly_struct,
470        A: *mut n_poly_struct,
471        B: *mut n_poly_struct,
472        order: mp_limb_signed_t,
473        ctx: nmod_t,
474    );
475}
476extern "C" {
477    pub fn n_poly_reverse(
478        output: *mut n_poly_struct,
479        input: *mut n_poly_struct,
480        m: mp_limb_signed_t,
481    );
482}
483extern "C" {
484    pub fn n_poly_mod_mulmod_preinv(
485        A: *mut n_poly_struct,
486        B: *mut n_poly_struct,
487        C: *mut n_poly_struct,
488        M: *mut n_poly_struct,
489        Minv: *mut n_poly_struct,
490        ctx: nmod_t,
491    );
492}
493extern "C" {
494    pub fn fq_nmod_ctx_mod(ctx: *mut fq_nmod_ctx_struct) -> nmod_t;
495}
496extern "C" {
497    pub fn _n_fq_is_zero(a: *const mp_limb_t, d: mp_limb_signed_t) -> c_int;
498}
499extern "C" {
500    pub fn _n_fq_zero(a: *mut mp_limb_t, d: mp_limb_signed_t);
501}
502extern "C" {
503    pub fn _n_fq_is_one(a: *const mp_limb_t, d: mp_limb_signed_t) -> c_int;
504}
505extern "C" {
506    pub fn _n_fq_is_ui(a: *const mp_limb_t, d: mp_limb_signed_t) -> c_int;
507}
508extern "C" {
509    pub fn n_fq_is_one(a: *const mp_limb_t, ctx: *mut fq_nmod_ctx_struct) -> c_int;
510}
511extern "C" {
512    pub fn _n_fq_one(a: *mut mp_limb_t, d: mp_limb_signed_t);
513}
514extern "C" {
515    pub fn _n_fq_set_nmod(a: *mut mp_limb_t, b: mp_limb_t, d: mp_limb_signed_t);
516}
517extern "C" {
518    pub fn n_fq_gen(a: *mut mp_limb_t, ctx: *mut fq_nmod_ctx_struct);
519}
520extern "C" {
521    pub fn _n_fq_set(a: *mut mp_limb_t, b: *const mp_limb_t, d: mp_limb_signed_t);
522}
523extern "C" {
524    pub fn _n_fq_swap(a: *mut mp_limb_t, b: *mut mp_limb_t, d: mp_limb_signed_t);
525}
526extern "C" {
527    pub fn _n_fq_equal(a: *mut mp_limb_t, b: *const mp_limb_t, d: mp_limb_signed_t) -> c_int;
528}
529extern "C" {
530    pub fn n_fq_equal_fq_nmod(
531        a: *const mp_limb_t,
532        b: *mut nmod_poly_struct,
533        ctx: *mut fq_nmod_ctx_struct,
534    ) -> c_int;
535}
536extern "C" {
537    pub fn n_fq_is_canonical(a: *const mp_limb_t, ctx: *mut fq_nmod_ctx_struct) -> c_int;
538}
539extern "C" {
540    pub fn n_fq_randtest_not_zero(
541        a: *mut mp_limb_t,
542        state: *mut flint_rand_s,
543        ctx: *mut fq_nmod_ctx_struct,
544    );
545}
546extern "C" {
547    pub fn n_fq_get_str_pretty(a: *const mp_limb_t, ctx: *mut fq_nmod_ctx_struct) -> *mut c_char;
548}
549extern "C" {
550    pub fn n_fq_fprint_pretty(
551        file: *mut FILE,
552        a: *const mp_limb_t,
553        ctx: *mut fq_nmod_ctx_struct,
554    ) -> c_int;
555}
556extern "C" {
557    pub fn n_fq_print_pretty(a: *const mp_limb_t, ctx: *mut fq_nmod_ctx_struct);
558}
559extern "C" {
560    pub fn n_fq_get_fq_nmod(
561        a: *mut nmod_poly_struct,
562        b: *const mp_limb_t,
563        ctx: *mut fq_nmod_ctx_struct,
564    );
565}
566extern "C" {
567    pub fn n_fq_set_fq_nmod(
568        a: *mut mp_limb_t,
569        b: *mut nmod_poly_struct,
570        ctx: *mut fq_nmod_ctx_struct,
571    );
572}
573extern "C" {
574    pub fn n_fq_get_n_poly(
575        a: *mut n_poly_struct,
576        b: *const mp_limb_t,
577        ctx: *mut fq_nmod_ctx_struct,
578    );
579}
580extern "C" {
581    pub fn _n_fq_set_n_poly(
582        a: *mut mp_limb_t,
583        bcoeffs: *const mp_limb_t,
584        blen: mp_limb_signed_t,
585        ctx: *mut fq_nmod_ctx_struct,
586    );
587}
588extern "C" {
589    pub fn n_fq_add_si(
590        a: *mut mp_limb_t,
591        b: *const mp_limb_t,
592        c: mp_limb_signed_t,
593        ctx: *mut fq_nmod_ctx_struct,
594    );
595}
596extern "C" {
597    pub fn n_fq_add(
598        a: *mut mp_limb_t,
599        b: *const mp_limb_t,
600        c: *const mp_limb_t,
601        ctx: *mut fq_nmod_ctx_struct,
602    );
603}
604extern "C" {
605    pub fn n_fq_add_fq_nmod(
606        a: *mut mp_limb_t,
607        b: *const mp_limb_t,
608        c: *mut nmod_poly_struct,
609        ctx: *mut fq_nmod_ctx_struct,
610    );
611}
612extern "C" {
613    pub fn n_fq_sub_fq_nmod(
614        a: *mut mp_limb_t,
615        b: *const mp_limb_t,
616        c: *mut nmod_poly_struct,
617        ctx: *mut fq_nmod_ctx_struct,
618    );
619}
620extern "C" {
621    pub fn n_fq_sub(
622        a: *mut mp_limb_t,
623        b: *const mp_limb_t,
624        c: *const mp_limb_t,
625        ctx: *mut fq_nmod_ctx_struct,
626    );
627}
628extern "C" {
629    pub fn _n_fq_add(
630        a: *mut mp_limb_t,
631        b: *const mp_limb_t,
632        c: *const mp_limb_t,
633        d: mp_limb_signed_t,
634        mod_: nmod_t,
635    );
636}
637extern "C" {
638    pub fn _n_fq_sub(
639        a: *mut mp_limb_t,
640        b: *const mp_limb_t,
641        c: *const mp_limb_t,
642        d: mp_limb_signed_t,
643        mod_: nmod_t,
644    );
645}
646extern "C" {
647    pub fn _n_fq_neg(a: *mut mp_limb_t, b: *const mp_limb_t, d: mp_limb_signed_t, mod_: nmod_t);
648}
649extern "C" {
650    pub fn _n_fq_mul_ui(
651        a: *mut mp_limb_t,
652        b: *const mp_limb_t,
653        c: mp_limb_t,
654        d: mp_limb_signed_t,
655        mod_: nmod_t,
656    );
657}
658extern "C" {
659    pub fn _n_fq_madd2(
660        a: *mut mp_limb_t,
661        b: *const mp_limb_t,
662        c: *const mp_limb_t,
663        ctx: *mut fq_nmod_ctx_struct,
664        t: *mut mp_limb_t,
665    );
666}
667extern "C" {
668    pub fn _n_fq_mul2(
669        t: *mut mp_limb_t,
670        b: *const mp_limb_t,
671        c: *const mp_limb_t,
672        ctx: *mut fq_nmod_ctx_struct,
673    );
674}
675extern "C" {
676    pub fn _n_fq_reduce(
677        a: *mut mp_limb_t,
678        b: *mut mp_limb_t,
679        blen: mp_limb_signed_t,
680        ctx: *mut fq_nmod_ctx_struct,
681        t: *mut mp_limb_t,
682    );
683}
684extern "C" {
685    pub fn _n_fq_reduce2(
686        a: *mut mp_limb_t,
687        b: *mut mp_limb_t,
688        ctx: *mut fq_nmod_ctx_struct,
689        t: *mut mp_limb_t,
690    );
691}
692extern "C" {
693    pub fn _n_fq_mul(
694        a: *mut mp_limb_t,
695        b: *const mp_limb_t,
696        c: *const mp_limb_t,
697        ctx: *mut fq_nmod_ctx_struct,
698        t: *mut mp_limb_t,
699    );
700}
701extern "C" {
702    pub fn _n_fq_addmul(
703        a: *mut mp_limb_t,
704        b: *const mp_limb_t,
705        c: *const mp_limb_t,
706        e: *const mp_limb_t,
707        ctx: *mut fq_nmod_ctx_struct,
708        t: *mut mp_limb_t,
709    );
710}
711extern "C" {
712    pub fn _n_fq_dot_lazy_size(len: mp_limb_signed_t, ctx: *mut fq_nmod_ctx_struct) -> c_int;
713}
714extern "C" {
715    pub fn _n_fq_reduce2_lazy1(a: *mut mp_limb_t, d: mp_limb_signed_t, ctx: nmod_t);
716}
717extern "C" {
718    pub fn _n_fq_madd2_lazy1(
719        a: *mut mp_limb_t,
720        b: *const mp_limb_t,
721        c: *const mp_limb_t,
722        d: mp_limb_signed_t,
723    );
724}
725extern "C" {
726    pub fn _n_fq_mul2_lazy1(
727        a: *mut mp_limb_t,
728        b: *const mp_limb_t,
729        c: *const mp_limb_t,
730        d: mp_limb_signed_t,
731    );
732}
733extern "C" {
734    pub fn _n_fq_reduce2_lazy2(a: *mut mp_limb_t, d: mp_limb_signed_t, ctx: nmod_t);
735}
736extern "C" {
737    pub fn _n_fq_madd2_lazy2(
738        a: *mut mp_limb_t,
739        b: *const mp_limb_t,
740        c: *const mp_limb_t,
741        d: mp_limb_signed_t,
742    );
743}
744extern "C" {
745    pub fn _n_fq_mul2_lazy2(
746        a: *mut mp_limb_t,
747        b: *const mp_limb_t,
748        c: *const mp_limb_t,
749        d: mp_limb_signed_t,
750    );
751}
752extern "C" {
753    pub fn _n_fq_reduce2_lazy3(a: *mut mp_limb_t, d: mp_limb_signed_t, ctx: nmod_t);
754}
755extern "C" {
756    pub fn _n_fq_madd2_lazy3(
757        a: *mut mp_limb_t,
758        b: *const mp_limb_t,
759        c: *const mp_limb_t,
760        d: mp_limb_signed_t,
761    );
762}
763extern "C" {
764    pub fn _n_fq_mul2_lazy3(
765        a: *mut mp_limb_t,
766        b: *const mp_limb_t,
767        c: *const mp_limb_t,
768        d: mp_limb_signed_t,
769    );
770}
771extern "C" {
772    pub fn _n_fq_inv(
773        a: *mut mp_limb_t,
774        b: *const mp_limb_t,
775        ctx: *mut fq_nmod_ctx_struct,
776        t: *mut mp_limb_t,
777    );
778}
779extern "C" {
780    pub fn _n_fq_pow_ui(
781        a: *mut mp_limb_t,
782        b: *const mp_limb_t,
783        e: mp_limb_t,
784        ctx: *mut fq_nmod_ctx_struct,
785    );
786}
787extern "C" {
788    pub fn n_fq_pow_fmpz(
789        a: *mut mp_limb_t,
790        b: *const mp_limb_t,
791        e: *mut fmpz,
792        ctx: *mut fq_nmod_ctx_struct,
793    );
794}
795extern "C" {
796    pub fn n_fq_mul(
797        a: *mut mp_limb_t,
798        b: *const mp_limb_t,
799        c: *const mp_limb_t,
800        ctx: *mut fq_nmod_ctx_struct,
801    );
802}
803extern "C" {
804    pub fn n_fq_mul_fq_nmod(
805        a: *mut mp_limb_t,
806        b: *const mp_limb_t,
807        c: *mut nmod_poly_struct,
808        ctx: *mut fq_nmod_ctx_struct,
809    );
810}
811extern "C" {
812    pub fn n_fq_addmul(
813        a: *mut mp_limb_t,
814        b: *const mp_limb_t,
815        c: *const mp_limb_t,
816        d: *const mp_limb_t,
817        ctx: *mut fq_nmod_ctx_struct,
818    );
819}
820extern "C" {
821    pub fn n_fq_inv(a: *mut mp_limb_t, b: *const mp_limb_t, ctx: *mut fq_nmod_ctx_struct);
822}
823extern "C" {
824    pub fn n_fq_pow_ui(
825        a: *mut mp_limb_t,
826        b: *const mp_limb_t,
827        e: mp_limb_t,
828        ctx: *mut fq_nmod_ctx_struct,
829    );
830}
831extern "C" {
832    pub fn n_fq_poly_init2(
833        A: *mut n_poly_struct,
834        alloc: mp_limb_signed_t,
835        ctx: *mut fq_nmod_ctx_struct,
836    );
837}
838extern "C" {
839    pub fn _n_fq_poly_one(A: *mut n_poly_struct, d: mp_limb_signed_t);
840}
841extern "C" {
842    pub fn n_fq_poly_one(A: *mut n_poly_struct, ctx: *mut fq_nmod_ctx_struct);
843}
844extern "C" {
845    pub fn n_fq_poly_is_one(A: *mut n_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
846}
847extern "C" {
848    pub fn n_fq_poly_is_canonical(a: *mut n_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
849}
850extern "C" {
851    pub fn _n_fq_poly_normalise(A: *mut n_poly_struct, d: mp_limb_signed_t);
852}
853extern "C" {
854    pub fn n_fq_poly_print_pretty(
855        A: *mut n_poly_struct,
856        x: *const c_char,
857        ctx: *mut fq_nmod_ctx_struct,
858    );
859}
860extern "C" {
861    pub fn n_fq_poly_equal(
862        A: *mut n_poly_struct,
863        B: *mut n_poly_struct,
864        ctx: *mut fq_nmod_ctx_struct,
865    ) -> c_int;
866}
867extern "C" {
868    pub fn n_fq_poly_set(
869        A: *mut n_poly_struct,
870        B: *mut n_poly_struct,
871        ctx: *mut fq_nmod_ctx_struct,
872    );
873}
874extern "C" {
875    pub fn n_fq_poly_randtest(
876        A: *mut n_poly_struct,
877        state: *mut flint_rand_s,
878        len: mp_limb_signed_t,
879        ctx: *mut fq_nmod_ctx_struct,
880    );
881}
882extern "C" {
883    pub fn n_fq_poly_make_monic(
884        A: *mut n_poly_struct,
885        B: *mut n_poly_struct,
886        ctx: *mut fq_nmod_ctx_struct,
887    );
888}
889extern "C" {
890    pub fn n_fq_poly_get_coeff_n_fq(
891        c: *mut mp_limb_t,
892        A: *mut n_poly_struct,
893        e: mp_limb_signed_t,
894        ctx: *mut fq_nmod_ctx_struct,
895    );
896}
897extern "C" {
898    pub fn n_fq_poly_get_coeff_fq_nmod(
899        c: *mut nmod_poly_struct,
900        A: *mut n_poly_struct,
901        e: mp_limb_signed_t,
902        ctx: *mut fq_nmod_ctx_struct,
903    );
904}
905extern "C" {
906    pub fn n_fq_poly_set_coeff_n_fq(
907        A: *mut n_poly_struct,
908        j: mp_limb_signed_t,
909        c: *const mp_limb_t,
910        ctx: *mut fq_nmod_ctx_struct,
911    );
912}
913extern "C" {
914    pub fn n_fq_poly_set_coeff_fq_nmod(
915        A: *mut n_poly_struct,
916        j: mp_limb_signed_t,
917        c: *mut nmod_poly_struct,
918        ctx: *mut fq_nmod_ctx_struct,
919    );
920}
921extern "C" {
922    pub fn n_fq_poly_scalar_mul_n_fq(
923        A: *mut n_poly_struct,
924        B: *mut n_poly_struct,
925        c: *const mp_limb_t,
926        ctx: *mut fq_nmod_ctx_struct,
927    );
928}
929extern "C" {
930    pub fn n_fq_poly_scalar_mul_ui(
931        A: *mut n_poly_struct,
932        B: *mut n_poly_struct,
933        c: mp_limb_t,
934        ctx: *mut fq_nmod_ctx_struct,
935    );
936}
937extern "C" {
938    pub fn n_fq_poly_scalar_addmul_n_fq(
939        A: *mut n_poly_struct,
940        B: *mut n_poly_struct,
941        C: *mut n_poly_struct,
942        d: *const mp_limb_t,
943        ctx: *mut fq_nmod_ctx_struct,
944    );
945}
946extern "C" {
947    pub fn n_fq_poly_shift_left_scalar_submul(
948        A: *mut n_poly_struct,
949        k: mp_limb_signed_t,
950        c: *const mp_limb_t,
951        ctx: *mut fq_nmod_ctx_struct,
952    );
953}
954extern "C" {
955    pub fn n_fq_poly_evaluate_fq_nmod(
956        e: *mut nmod_poly_struct,
957        A: *mut n_poly_struct,
958        c: *mut nmod_poly_struct,
959        ctx: *mut fq_nmod_ctx_struct,
960    );
961}
962extern "C" {
963    pub fn n_fq_poly_evaluate_n_fq(
964        e: *mut mp_limb_t,
965        A: *mut n_poly_struct,
966        c: *const mp_limb_t,
967        ctx: *mut fq_nmod_ctx_struct,
968    );
969}
970extern "C" {
971    pub fn n_fq_poly_get_fq_nmod_poly(
972        A: *mut fq_nmod_poly_struct,
973        B: *mut n_poly_struct,
974        ctx: *mut fq_nmod_ctx_struct,
975    );
976}
977extern "C" {
978    pub fn n_fq_poly_set_fq_nmod_poly(
979        A: *mut n_poly_struct,
980        B: *mut fq_nmod_poly_struct,
981        ctx: *mut fq_nmod_ctx_struct,
982    );
983}
984extern "C" {
985    pub fn n_fq_poly_set_n_fq(
986        A: *mut n_poly_struct,
987        c: *const mp_limb_t,
988        ctx: *mut fq_nmod_ctx_struct,
989    );
990}
991extern "C" {
992    pub fn n_fq_poly_set_fq_nmod(
993        A: *mut n_poly_struct,
994        c: *mut nmod_poly_struct,
995        ctx: *mut fq_nmod_ctx_struct,
996    );
997}
998extern "C" {
999    pub fn n_fq_poly_shift_right(
1000        A: *mut n_poly_struct,
1001        B: *mut n_poly_struct,
1002        n: mp_limb_signed_t,
1003        ctx: *mut fq_nmod_ctx_struct,
1004    );
1005}
1006extern "C" {
1007    pub fn n_fq_poly_shift_left(
1008        A: *mut n_poly_struct,
1009        B: *mut n_poly_struct,
1010        n: mp_limb_signed_t,
1011        ctx: *mut fq_nmod_ctx_struct,
1012    );
1013}
1014extern "C" {
1015    pub fn n_fq_poly_truncate(
1016        A: *mut n_poly_struct,
1017        len: mp_limb_signed_t,
1018        ctx: *mut fq_nmod_ctx_struct,
1019    );
1020}
1021extern "C" {
1022    pub fn n_fq_poly_add(
1023        A: *mut n_poly_struct,
1024        B: *mut n_poly_struct,
1025        C: *mut n_poly_struct,
1026        ctx: *mut fq_nmod_ctx_struct,
1027    );
1028}
1029extern "C" {
1030    pub fn n_fq_poly_sub(
1031        A: *mut n_poly_struct,
1032        B: *mut n_poly_struct,
1033        C: *mut n_poly_struct,
1034        ctx: *mut fq_nmod_ctx_struct,
1035    );
1036}
1037extern "C" {
1038    pub fn n_fq_poly_neg(
1039        A: *mut n_poly_struct,
1040        B: *mut n_poly_struct,
1041        ctx: *mut fq_nmod_ctx_struct,
1042    );
1043}
1044extern "C" {
1045    pub fn n_fq_poly_add_si(
1046        A: *mut n_poly_struct,
1047        B: *mut n_poly_struct,
1048        c: mp_limb_signed_t,
1049        ctx: *mut fq_nmod_ctx_struct,
1050    );
1051}
1052extern "C" {
1053    pub fn _n_fq_poly_mul_(
1054        A: *mut mp_limb_t,
1055        B: *const mp_limb_t,
1056        Blen: mp_limb_signed_t,
1057        C: *const mp_limb_t,
1058        Clen: mp_limb_signed_t,
1059        ctx: *mut fq_nmod_ctx_struct,
1060        St: *mut n_poly_stack_struct,
1061    );
1062}
1063extern "C" {
1064    pub fn n_fq_poly_mul_(
1065        A: *mut n_poly_struct,
1066        B: *mut n_poly_struct,
1067        C: *mut n_poly_struct,
1068        ctx: *mut fq_nmod_ctx_struct,
1069        St: *mut n_poly_stack_struct,
1070    );
1071}
1072extern "C" {
1073    pub fn n_fq_poly_mul(
1074        A: *mut n_poly_struct,
1075        B: *mut n_poly_struct,
1076        C: *mut n_poly_struct,
1077        ctx: *mut fq_nmod_ctx_struct,
1078    );
1079}
1080extern "C" {
1081    pub fn n_fq_poly_pow(
1082        A: *mut n_poly_struct,
1083        B: *mut n_poly_struct,
1084        e: mp_limb_t,
1085        ctx: *mut fq_nmod_ctx_struct,
1086    );
1087}
1088extern "C" {
1089    pub fn n_fq_poly_remove(
1090        f: *mut n_poly_struct,
1091        g: *mut n_poly_struct,
1092        ctx: *mut fq_nmod_ctx_struct,
1093    ) -> mp_limb_t;
1094}
1095extern "C" {
1096    pub fn n_fq_poly_divrem_divconquer_(
1097        Q: *mut n_poly_struct,
1098        R: *mut n_poly_struct,
1099        A: *mut n_poly_struct,
1100        B: *mut n_poly_struct,
1101        ctx: *mut fq_nmod_ctx_struct,
1102        St: *mut n_poly_stack_struct,
1103    );
1104}
1105extern "C" {
1106    pub fn n_fq_poly_divrem_(
1107        Q: *mut n_poly_struct,
1108        R: *mut n_poly_struct,
1109        A: *mut n_poly_struct,
1110        B: *mut n_poly_struct,
1111        ctx: *mut fq_nmod_ctx_struct,
1112        St: *mut n_poly_stack_struct,
1113    );
1114}
1115extern "C" {
1116    pub fn n_fq_poly_divrem(
1117        Q: *mut n_poly_struct,
1118        R: *mut n_poly_struct,
1119        A: *mut n_poly_struct,
1120        B: *mut n_poly_struct,
1121        ctx: *mut fq_nmod_ctx_struct,
1122    );
1123}
1124extern "C" {
1125    pub fn n_fq_poly_gcd(
1126        G: *mut n_poly_struct,
1127        A: *mut n_poly_struct,
1128        B: *mut n_poly_struct,
1129        ctx: *mut fq_nmod_ctx_struct,
1130    );
1131}
1132extern "C" {
1133    pub fn n_fq_poly_gcd_(
1134        G: *mut n_poly_struct,
1135        A: *mut n_poly_struct,
1136        B: *mut n_poly_struct,
1137        ctx: *mut fq_nmod_ctx_struct,
1138        St: *mut n_poly_stack_struct,
1139    );
1140}
1141extern "C" {
1142    pub fn n_fq_poly_xgcd(
1143        G: *mut n_poly_struct,
1144        S: *mut n_poly_struct,
1145        T: *mut n_poly_struct,
1146        B: *mut n_poly_struct,
1147        C: *mut n_poly_struct,
1148        ctx: *mut fq_nmod_ctx_struct,
1149    );
1150}
1151extern "C" {
1152    pub fn n_fq_poly_mulmod(
1153        A: *mut n_poly_struct,
1154        B: *mut n_poly_struct,
1155        C: *mut n_poly_struct,
1156        M: *mut n_poly_struct,
1157        ctx: *mut fq_nmod_ctx_struct,
1158    );
1159}
1160extern "C" {
1161    pub fn n_fq_poly_rem(
1162        R: *mut n_poly_struct,
1163        A: *mut n_poly_struct,
1164        B: *mut n_poly_struct,
1165        ctx: *mut fq_nmod_ctx_struct,
1166    );
1167}
1168extern "C" {
1169    pub fn n_fq_poly_mullow(
1170        A: *mut n_poly_struct,
1171        B: *mut n_poly_struct,
1172        C: *mut n_poly_struct,
1173        order: mp_limb_signed_t,
1174        ctx: *mut fq_nmod_ctx_struct,
1175    );
1176}
1177extern "C" {
1178    pub fn n_fq_poly_inv_series(
1179        A: *mut n_poly_struct,
1180        B: *mut n_poly_struct,
1181        order: mp_limb_signed_t,
1182        ctx: *mut fq_nmod_ctx_struct,
1183    );
1184}
1185extern "C" {
1186    pub fn n_fq_poly_eval_pow(
1187        ev: *mut mp_limb_t,
1188        A: *mut n_poly_struct,
1189        alphapow: *mut n_poly_struct,
1190        ctx: *mut fq_nmod_ctx_struct,
1191    );
1192}
1193extern "C" {
1194    pub fn n_bpoly_init(A: *mut n_bpoly_struct);
1195}
1196extern "C" {
1197    pub fn n_bpoly_clear(A: *mut n_bpoly_struct);
1198}
1199extern "C" {
1200    pub fn n_bpoly_swap(A: *mut n_bpoly_struct, B: *mut n_bpoly_struct);
1201}
1202extern "C" {
1203    pub fn n_bpoly_print_pretty(A: *mut n_bpoly_struct, xvar: *const c_char, yvar: *const c_char);
1204}
1205extern "C" {
1206    pub fn n_bpoly_normalise(A: *mut n_bpoly_struct);
1207}
1208extern "C" {
1209    pub fn n_bpoly_realloc(A: *mut n_bpoly_struct, len: mp_limb_signed_t);
1210}
1211extern "C" {
1212    pub fn n_bpoly_fit_length(A: *mut n_bpoly_struct, len: mp_limb_signed_t);
1213}
1214extern "C" {
1215    pub fn n_bpoly_zero(A: *mut n_bpoly_struct);
1216}
1217extern "C" {
1218    pub fn n_bpoly_is_zero(A: *mut n_bpoly_struct) -> c_int;
1219}
1220extern "C" {
1221    pub fn _n_bpoly_set(A: *mut n_bpoly_struct, B: *mut n_bpoly_struct);
1222}
1223extern "C" {
1224    pub fn n_bpoly_set(A: *mut n_bpoly_struct, B: *mut n_bpoly_struct);
1225}
1226extern "C" {
1227    pub fn n_bpoly_one(A: *mut n_bpoly_struct);
1228}
1229extern "C" {
1230    pub fn n_bpoly_equal(A: *mut n_bpoly_struct, B: *mut n_bpoly_struct) -> c_int;
1231}
1232extern "C" {
1233    pub fn n_bpoly_set_coeff(
1234        A: *mut n_bpoly_struct,
1235        e0: mp_limb_signed_t,
1236        e1: mp_limb_signed_t,
1237        c: mp_limb_t,
1238    );
1239}
1240extern "C" {
1241    pub fn n_bpoly_set_coeff_nonzero(
1242        A: *mut n_bpoly_struct,
1243        e0: mp_limb_signed_t,
1244        e1: mp_limb_signed_t,
1245        c: mp_limb_t,
1246    );
1247}
1248extern "C" {
1249    pub fn n_bpoly_mod_derivative_gen0(A: *mut n_bpoly_struct, B: *mut n_bpoly_struct, ctx: nmod_t);
1250}
1251extern "C" {
1252    pub fn n_bpoly_get_coeff(
1253        A: *mut n_bpoly_struct,
1254        e0: mp_limb_signed_t,
1255        e1: mp_limb_signed_t,
1256    ) -> mp_limb_t;
1257}
1258extern "C" {
1259    pub fn n_bpoly_degree0(A: *mut n_bpoly_struct) -> mp_limb_signed_t;
1260}
1261extern "C" {
1262    pub fn n_bpoly_degree1(A: *mut n_bpoly_struct) -> mp_limb_signed_t;
1263}
1264extern "C" {
1265    pub fn n_bpoly_set_poly_gen1(A: *mut n_bpoly_struct, B: *mut n_poly_struct);
1266}
1267extern "C" {
1268    pub fn n_bpoly_set_poly_gen0(A: *mut n_bpoly_struct, B: *mut n_poly_struct);
1269}
1270extern "C" {
1271    pub fn n_bpoly_mod_is_canonical(A: *mut n_bpoly_struct, mod_: nmod_t) -> c_int;
1272}
1273extern "C" {
1274    pub fn n_bpoly_bidegree(A: *mut n_bpoly_struct) -> mp_limb_t;
1275}
1276extern "C" {
1277    pub fn n_bpoly_scalar_mul_nmod(A: *mut n_bpoly_struct, c: mp_limb_t, ctx: nmod_t);
1278}
1279extern "C" {
1280    pub fn n_bpoly_mod_content_last(g: *mut n_poly_struct, A: *mut n_bpoly_struct, ctx: nmod_t);
1281}
1282extern "C" {
1283    pub fn n_bpoly_mod_divexact_last(A: *mut n_bpoly_struct, b: *mut n_poly_struct, ctx: nmod_t);
1284}
1285extern "C" {
1286    pub fn n_bpoly_mod_mul_last(A: *mut n_bpoly_struct, b: *mut n_poly_struct, ctx: nmod_t);
1287}
1288extern "C" {
1289    pub fn n_bpoly_mod_taylor_shift_gen1(
1290        A: *mut n_bpoly_struct,
1291        B: *mut n_bpoly_struct,
1292        c: mp_limb_t,
1293        ctx: nmod_t,
1294    );
1295}
1296extern "C" {
1297    pub fn n_bpoly_mod_taylor_shift_gen0(A: *mut n_bpoly_struct, c: mp_limb_t, ctx: nmod_t);
1298}
1299extern "C" {
1300    pub fn n_bpoly_mod_add(
1301        A: *mut n_bpoly_struct,
1302        B: *mut n_bpoly_struct,
1303        C: *mut n_bpoly_struct,
1304        ctx: nmod_t,
1305    );
1306}
1307extern "C" {
1308    pub fn n_bpoly_mod_sub(
1309        A: *mut n_bpoly_struct,
1310        B: *mut n_bpoly_struct,
1311        C: *mut n_bpoly_struct,
1312        ctx: nmod_t,
1313    );
1314}
1315extern "C" {
1316    pub fn n_bpoly_mod_make_primitive(g: *mut n_poly_struct, A: *mut n_bpoly_struct, ctx: nmod_t);
1317}
1318extern "C" {
1319    pub fn n_bpoly_mod_mul(
1320        A: *mut n_bpoly_struct,
1321        B: *mut n_bpoly_struct,
1322        C: *mut n_bpoly_struct,
1323        ctx: nmod_t,
1324    );
1325}
1326extern "C" {
1327    pub fn n_bpoly_mod_divides(
1328        Q: *mut n_bpoly_struct,
1329        A: *mut n_bpoly_struct,
1330        B: *mut n_bpoly_struct,
1331        ctx: nmod_t,
1332    ) -> c_int;
1333}
1334extern "C" {
1335    pub fn n_bpoly_mod_mul_series(
1336        A: *mut n_bpoly_struct,
1337        B: *mut n_bpoly_struct,
1338        C: *mut n_bpoly_struct,
1339        order: mp_limb_signed_t,
1340        ctx: nmod_t,
1341    );
1342}
1343extern "C" {
1344    pub fn n_bpoly_mod_divrem_series(
1345        Q: *mut n_bpoly_struct,
1346        R: *mut n_bpoly_struct,
1347        A: *mut n_bpoly_struct,
1348        B: *mut n_bpoly_struct,
1349        order: mp_limb_signed_t,
1350        ctx: nmod_t,
1351    );
1352}
1353extern "C" {
1354    pub fn n_bpoly_mod_interp_reduce_2sm_poly(
1355        Ap: *mut n_poly_struct,
1356        Am: *mut n_poly_struct,
1357        A: *mut n_bpoly_struct,
1358        alphapow: *mut n_poly_struct,
1359        mod_: nmod_t,
1360    );
1361}
1362extern "C" {
1363    pub fn n_bpoly_mod_interp_lift_2sm_poly(
1364        deg1: *mut mp_limb_signed_t,
1365        T: *mut n_bpoly_struct,
1366        A: *mut n_poly_struct,
1367        B: *mut n_poly_struct,
1368        alpha: mp_limb_t,
1369        mod_: nmod_t,
1370    );
1371}
1372extern "C" {
1373    pub fn n_bpoly_mod_interp_crt_2sm_poly(
1374        deg1: *mut mp_limb_signed_t,
1375        F: *mut n_bpoly_struct,
1376        T: *mut n_bpoly_struct,
1377        A: *mut n_poly_struct,
1378        B: *mut n_poly_struct,
1379        modulus: *mut n_poly_struct,
1380        alphapow: *mut n_poly_struct,
1381        mod_: nmod_t,
1382    ) -> c_int;
1383}
1384extern "C" {
1385    pub fn n_bpoly_mod_gcd_brown_smprime(
1386        G: *mut n_bpoly_struct,
1387        Abar: *mut n_bpoly_struct,
1388        Bbar: *mut n_bpoly_struct,
1389        A: *mut n_bpoly_struct,
1390        B: *mut n_bpoly_struct,
1391        ctx: nmod_t,
1392        Sp: *mut n_poly_bpoly_stack_struct,
1393    ) -> c_int;
1394}
1395extern "C" {
1396    pub fn n_polyu1n_mod_gcd_brown_smprime(
1397        G: *mut n_polyun_struct,
1398        Abar: *mut n_polyun_struct,
1399        Bbar: *mut n_polyun_struct,
1400        A: *mut n_polyun_struct,
1401        B: *mut n_polyun_struct,
1402        ctx: nmod_t,
1403        St: *mut n_poly_polyun_stack_struct,
1404    ) -> c_int;
1405}
1406extern "C" {
1407    pub fn n_fq_bpoly_equal(
1408        A: *mut n_bpoly_struct,
1409        B: *mut n_bpoly_struct,
1410        ctx: *mut fq_nmod_ctx_struct,
1411    ) -> c_int;
1412}
1413extern "C" {
1414    pub fn n_fq_bpoly_get_coeff_n_fq(
1415        c: *mut mp_limb_t,
1416        A: *mut n_bpoly_struct,
1417        e0: mp_limb_signed_t,
1418        e1: mp_limb_signed_t,
1419        ctx: *mut fq_nmod_ctx_struct,
1420    );
1421}
1422extern "C" {
1423    pub fn n_fq_bpoly_set_coeff_n_fq(
1424        A: *mut n_bpoly_struct,
1425        e0: mp_limb_signed_t,
1426        e1: mp_limb_signed_t,
1427        c: *const mp_limb_t,
1428        ctx: *mut fq_nmod_ctx_struct,
1429    );
1430}
1431extern "C" {
1432    pub fn n_fq_bpoly_get_coeff_fq_nmod(
1433        c: *mut nmod_poly_struct,
1434        A: *mut n_bpoly_struct,
1435        e0: mp_limb_signed_t,
1436        e1: mp_limb_signed_t,
1437        ctx: *mut fq_nmod_ctx_struct,
1438    );
1439}
1440extern "C" {
1441    pub fn n_fq_bpoly_set_fq_nmod_poly_gen0(
1442        A: *mut n_bpoly_struct,
1443        B: *mut fq_nmod_poly_struct,
1444        ctx: *mut fq_nmod_ctx_struct,
1445    );
1446}
1447extern "C" {
1448    pub fn n_fq_bpoly_set_n_fq_poly_gen0(
1449        A: *mut n_bpoly_struct,
1450        B: *mut n_poly_struct,
1451        ctx: *mut fq_nmod_ctx_struct,
1452    );
1453}
1454extern "C" {
1455    pub fn n_fq_bpoly_set_n_fq_poly_gen1(
1456        A: *mut n_bpoly_struct,
1457        B: *mut n_poly_struct,
1458        ctx: *mut fq_nmod_ctx_struct,
1459    );
1460}
1461extern "C" {
1462    pub fn n_fq_bpoly_derivative_gen0(
1463        A: *mut n_bpoly_struct,
1464        B: *mut n_bpoly_struct,
1465        ctx: *mut fq_nmod_ctx_struct,
1466    );
1467}
1468extern "C" {
1469    pub fn n_fq_bpoly_scalar_mul_n_fq(
1470        A: *mut n_bpoly_struct,
1471        c: *const mp_limb_t,
1472        ctx: *mut fq_nmod_ctx_struct,
1473    );
1474}
1475extern "C" {
1476    pub fn n_fq_bpoly_taylor_shift_gen1_fq_nmod(
1477        A: *mut n_bpoly_struct,
1478        B: *mut n_bpoly_struct,
1479        c_: *mut nmod_poly_struct,
1480        ctx: *mut fq_nmod_ctx_struct,
1481    );
1482}
1483extern "C" {
1484    pub fn n_fq_bpoly_taylor_shift_gen0_fq_nmod(
1485        A: *mut n_bpoly_struct,
1486        alpha: *mut nmod_poly_struct,
1487        ctx: *mut fq_nmod_ctx_struct,
1488    );
1489}
1490extern "C" {
1491    pub fn n_fq_bpoly_taylor_shift_gen0_n_fq(
1492        A: *mut n_bpoly_struct,
1493        alpha: *const mp_limb_t,
1494        ctx: *mut fq_nmod_ctx_struct,
1495    );
1496}
1497extern "C" {
1498    pub fn n_fq_bpoly_gcd_brown_smprime(
1499        G: *mut n_bpoly_struct,
1500        Abar: *mut n_bpoly_struct,
1501        Bbar: *mut n_bpoly_struct,
1502        A: *mut n_bpoly_struct,
1503        B: *mut n_bpoly_struct,
1504        ctx: *mut fq_nmod_ctx_struct,
1505        Sp: *mut n_poly_bpoly_stack_struct,
1506    ) -> c_int;
1507}
1508extern "C" {
1509    pub fn n_fq_bpoly_print_pretty(
1510        A: *mut n_bpoly_struct,
1511        xvar: *const c_char,
1512        yvar: *const c_char,
1513        ctx: *mut fq_nmod_ctx_struct,
1514    );
1515}
1516extern "C" {
1517    pub fn n_fq_bpoly_one(A: *mut n_bpoly_struct, ctx: *mut fq_nmod_ctx_struct);
1518}
1519extern "C" {
1520    pub fn n_fq_bpoly_set(
1521        A: *mut n_bpoly_struct,
1522        B: *mut n_bpoly_struct,
1523        ctx: *mut fq_nmod_ctx_struct,
1524    );
1525}
1526extern "C" {
1527    pub fn n_fq_bpoly_is_canonical(A: *mut n_bpoly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
1528}
1529extern "C" {
1530    pub fn n_tpoly_init(A: *mut n_tpoly_struct);
1531}
1532extern "C" {
1533    pub fn n_tpoly_swap(A: *mut n_tpoly_struct, B: *mut n_tpoly_struct);
1534}
1535extern "C" {
1536    pub fn n_tpoly_fit_length(A: *mut n_tpoly_struct, len: mp_limb_signed_t);
1537}
1538extern "C" {
1539    pub fn n_tpoly_clear(A: *mut n_tpoly_struct);
1540}
1541extern "C" {
1542    pub fn n_polyu_init(A: *mut n_polyu_struct);
1543}
1544extern "C" {
1545    pub fn n_polyu_clear(A: *mut n_polyu_struct);
1546}
1547extern "C" {
1548    pub fn n_polyu_realloc(A: *mut n_polyu_struct, len: mp_limb_signed_t);
1549}
1550extern "C" {
1551    pub fn n_polyu_fit_length(A: *mut n_polyu_struct, len: mp_limb_signed_t);
1552}
1553extern "C" {
1554    pub fn n_polyu_swap(A: *mut n_polyu_struct, B: *mut n_polyu_struct);
1555}
1556extern "C" {
1557    pub fn n_polyu3_print_pretty(
1558        A: *mut n_polyu_struct,
1559        gen0: *const c_char,
1560        gen1: *const c_char,
1561        var2: *const c_char,
1562    );
1563}
1564extern "C" {
1565    pub fn n_polyu3_degrees(
1566        deg0: *mut mp_limb_signed_t,
1567        deg1: *mut mp_limb_signed_t,
1568        deg2: *mut mp_limb_signed_t,
1569        A: *mut n_polyu_struct,
1570    );
1571}
1572extern "C" {
1573    pub fn nmod_pow_cache_start(
1574        b: mp_limb_t,
1575        pos_direct: *mut n_poly_struct,
1576        pos_bin: *mut n_poly_struct,
1577        neg_direct: *mut n_poly_struct,
1578    );
1579}
1580extern "C" {
1581    pub fn nmod_pow_cache_mulpow_ui(
1582        a: mp_limb_t,
1583        e: mp_limb_t,
1584        pos_direct: *mut n_poly_struct,
1585        pos_bin: *mut n_poly_struct,
1586        neg_direct: *mut n_poly_struct,
1587        ctx: nmod_t,
1588    ) -> mp_limb_t;
1589}
1590extern "C" {
1591    pub fn nmod_pow_cache_mulpow_neg_ui(
1592        a: mp_limb_t,
1593        e: mp_limb_t,
1594        pos_direct: *mut n_poly_struct,
1595        pos_bin: *mut n_poly_struct,
1596        neg_direct: *mut n_poly_struct,
1597        ctx: nmod_t,
1598    ) -> mp_limb_t;
1599}
1600extern "C" {
1601    pub fn nmod_pow_cache_mulpow_fmpz(
1602        a: mp_limb_t,
1603        e: *mut fmpz,
1604        pos_direct: *mut n_poly_struct,
1605        pos_bin: *mut n_poly_struct,
1606        neg_direct: *mut n_poly_struct,
1607        ctx: nmod_t,
1608    ) -> mp_limb_t;
1609}
1610extern "C" {
1611    pub fn n_fq_pow_cache_start_n_fq(
1612        b: *const mp_limb_t,
1613        pos_direct: *mut n_poly_struct,
1614        pos_bin: *mut n_poly_struct,
1615        neg_direct: *mut n_poly_struct,
1616        ctx: *mut fq_nmod_ctx_struct,
1617    );
1618}
1619extern "C" {
1620    pub fn n_fq_pow_cache_start_fq_nmod(
1621        b: *mut nmod_poly_struct,
1622        pos_direct: *mut n_poly_struct,
1623        pos_bin: *mut n_poly_struct,
1624        neg_direct: *mut n_poly_struct,
1625        ctx: *mut fq_nmod_ctx_struct,
1626    );
1627}
1628extern "C" {
1629    pub fn n_fq_pow_cache_mulpow_ui(
1630        r: *mut mp_limb_t,
1631        a: *const mp_limb_t,
1632        e: mp_limb_t,
1633        pos_direct: *mut n_poly_struct,
1634        pos_bin: *mut n_poly_struct,
1635        neg_direct: *mut n_poly_struct,
1636        ctx: *mut fq_nmod_ctx_struct,
1637    );
1638}
1639extern "C" {
1640    pub fn n_fq_pow_cache_mulpow_neg_ui(
1641        r: *mut mp_limb_t,
1642        a: *const mp_limb_t,
1643        e: mp_limb_t,
1644        pos_direct: *mut n_poly_struct,
1645        pos_bin: *mut n_poly_struct,
1646        neg_direct: *mut n_poly_struct,
1647        ctx: *mut fq_nmod_ctx_struct,
1648    );
1649}
1650extern "C" {
1651    pub fn n_fq_pow_cache_mulpow_fmpz(
1652        r: *mut mp_limb_t,
1653        a: *const mp_limb_t,
1654        e: *mut fmpz,
1655        pos_direct: *mut n_poly_struct,
1656        pos_bin: *mut n_poly_struct,
1657        neg_direct: *mut n_poly_struct,
1658        ctx: *mut fq_nmod_ctx_struct,
1659    );
1660}
1661#[repr(C)]
1662#[derive(Debug, Copy, Clone)]
1663pub struct nmod_eval_interp_struct {
1664    pub M: *mut mp_limb_t,
1665    pub T: *mut mp_limb_t,
1666    pub Q: *mut mp_limb_t,
1667    pub array: *mut mp_limb_t,
1668    pub alloc: mp_limb_signed_t,
1669    pub d: mp_limb_signed_t,
1670    pub radix: mp_limb_signed_t,
1671    pub w: mp_limb_t,
1672}
1673pub type nmod_eval_interp_t = [nmod_eval_interp_struct; 1usize];
1674extern "C" {
1675    pub fn nmod_eval_interp_init(E: *mut nmod_eval_interp_struct);
1676}
1677extern "C" {
1678    pub fn nmod_eval_interp_clear(E: *mut nmod_eval_interp_struct);
1679}
1680extern "C" {
1681    pub fn nmod_eval_interp_set_degree_modulus(
1682        E: *mut nmod_eval_interp_struct,
1683        deg: mp_limb_signed_t,
1684        ctx: nmod_t,
1685    ) -> c_int;
1686}
1687extern "C" {
1688    pub fn nmod_eval_interp_eval_length(E: *mut nmod_eval_interp_struct) -> mp_limb_signed_t;
1689}
1690extern "C" {
1691    pub fn nmod_eval_interp_to_coeffs_poly(
1692        a: *mut n_poly_struct,
1693        v: *mut n_poly_struct,
1694        E: *mut nmod_eval_interp_struct,
1695        ctx: nmod_t,
1696    );
1697}
1698extern "C" {
1699    pub fn nmod_eval_interp_from_coeffs_poly(
1700        v: *mut n_poly_struct,
1701        a: *mut n_poly_struct,
1702        E: *mut nmod_eval_interp_struct,
1703        ctx: nmod_t,
1704    );
1705}
1706extern "C" {
1707    pub fn nmod_eval_interp_to_coeffs_n_fq_poly(
1708        a: *mut n_poly_struct,
1709        v: *mut n_poly_struct,
1710        E: *mut nmod_eval_interp_struct,
1711        ctx: *mut fq_nmod_ctx_struct,
1712    );
1713}
1714extern "C" {
1715    pub fn nmod_eval_interp_from_coeffs_n_fq_poly(
1716        v: *mut n_poly_struct,
1717        a: *mut n_poly_struct,
1718        E: *mut nmod_eval_interp_struct,
1719        ctx: *mut fq_nmod_ctx_struct,
1720    );
1721}
1722extern "C" {
1723    pub fn nmod_evals_zero(a: *mut n_poly_struct);
1724}
1725extern "C" {
1726    pub fn nmod_evals_add_inplace(
1727        a: *mut n_poly_struct,
1728        b: *mut n_poly_struct,
1729        len: mp_limb_signed_t,
1730        ctx: nmod_t,
1731    );
1732}
1733extern "C" {
1734    pub fn nmod_evals_mul(
1735        a: *mut n_poly_struct,
1736        b: *mut n_poly_struct,
1737        c: *mut n_poly_struct,
1738        len: mp_limb_signed_t,
1739        ctx: nmod_t,
1740    );
1741}
1742extern "C" {
1743    pub fn nmod_evals_addmul(
1744        a: *mut n_poly_struct,
1745        b: *mut n_poly_struct,
1746        c: *mut n_poly_struct,
1747        len: mp_limb_signed_t,
1748        ctx: nmod_t,
1749    );
1750}
1751extern "C" {
1752    pub fn nmod_evals_fmma(
1753        a: *mut n_poly_struct,
1754        b: *mut n_poly_struct,
1755        c: *mut n_poly_struct,
1756        d: *mut n_poly_struct,
1757        e: *mut n_poly_struct,
1758        len: mp_limb_signed_t,
1759        ctx: nmod_t,
1760    );
1761}
1762extern "C" {
1763    pub fn n_fq_evals_zero(a: *mut n_poly_struct);
1764}
1765extern "C" {
1766    pub fn n_fq_evals_add_inplace(
1767        a: *mut n_poly_struct,
1768        b: *mut n_poly_struct,
1769        len: mp_limb_signed_t,
1770        ctx: *mut fq_nmod_ctx_struct,
1771    );
1772}
1773extern "C" {
1774    pub fn n_fq_evals_mul(
1775        a: *mut n_poly_struct,
1776        b: *mut n_poly_struct,
1777        c: *mut n_poly_struct,
1778        len: mp_limb_signed_t,
1779        ctx: *mut fq_nmod_ctx_struct,
1780    );
1781}
1782extern "C" {
1783    pub fn n_fq_evals_addmul(
1784        a: *mut n_poly_struct,
1785        b: *mut n_poly_struct,
1786        c: *mut n_poly_struct,
1787        len: mp_limb_signed_t,
1788        ctx: *mut fq_nmod_ctx_struct,
1789    );
1790}
1791extern "C" {
1792    pub fn n_fq_evals_fmma(
1793        a: *mut n_poly_struct,
1794        b: *mut n_poly_struct,
1795        c: *mut n_poly_struct,
1796        f: *mut n_poly_struct,
1797        e: *mut n_poly_struct,
1798        len: mp_limb_signed_t,
1799        ctx: *mut fq_nmod_ctx_struct,
1800    );
1801}
1802extern "C" {
1803    pub fn n_polyun_init(A: *mut n_polyun_struct);
1804}
1805extern "C" {
1806    pub fn n_polyun_is_canonical(A: *mut n_polyun_struct) -> c_int;
1807}
1808extern "C" {
1809    pub fn n_polyun_clear(A: *mut n_polyun_struct);
1810}
1811extern "C" {
1812    pub fn n_polyun_realloc(A: *mut n_polyun_struct, len: mp_limb_signed_t);
1813}
1814extern "C" {
1815    pub fn n_polyun_fit_length(A: *mut n_polyun_struct, len: mp_limb_signed_t);
1816}
1817extern "C" {
1818    pub fn n_polyun_mod_is_canonical(A: *mut n_polyun_struct, mod_: nmod_t) -> c_int;
1819}
1820extern "C" {
1821    pub fn n_polyun_swap(A: *mut n_polyun_struct, B: *mut n_polyun_struct);
1822}
1823extern "C" {
1824    pub fn n_polyun_set(A: *mut n_polyun_struct, B: *mut n_polyun_struct);
1825}
1826extern "C" {
1827    pub fn n_polyu1n_print_pretty(
1828        A: *mut n_polyun_struct,
1829        var0: *const c_char,
1830        varlast: *const c_char,
1831    );
1832}
1833extern "C" {
1834    pub fn n_polyu2n_print_pretty(
1835        A: *mut n_polyun_struct,
1836        gen0: *const c_char,
1837        gen1: *const c_char,
1838        varlast: *const c_char,
1839    );
1840}
1841extern "C" {
1842    pub fn n_polyu3n_print_pretty(
1843        A: *mut n_polyun_struct,
1844        gen0: *const c_char,
1845        gen1: *const c_char,
1846        var2: *const c_char,
1847        varlast: *const c_char,
1848    );
1849}
1850extern "C" {
1851    pub fn n_fq_polyun_set(
1852        A: *mut n_polyun_struct,
1853        B: *mut n_polyun_struct,
1854        ctx: *mut fq_nmod_ctx_struct,
1855    );
1856}
1857extern "C" {
1858    pub fn n_polyun_equal(A: *mut n_polyun_struct, B: *mut n_polyun_struct) -> c_int;
1859}
1860extern "C" {
1861    pub fn n_polyun_one(A: *mut n_polyun_struct);
1862}
1863extern "C" {
1864    pub fn n_polyu1n_bidegree(A: *mut n_polyun_struct) -> mp_limb_t;
1865}
1866extern "C" {
1867    pub fn n_fq_poly_product_roots_n_fq(
1868        M: *mut n_poly_struct,
1869        H: *const mp_limb_t,
1870        length: mp_limb_signed_t,
1871        ctx: *mut fq_nmod_ctx_struct,
1872        St: *mut n_poly_stack_struct,
1873    );
1874}
1875extern "C" {
1876    pub fn n_polyun_product_roots(
1877        M: *mut n_polyun_struct,
1878        H: *mut n_polyun_struct,
1879        ctx: nmod_t,
1880    ) -> mp_limb_signed_t;
1881}
1882extern "C" {
1883    pub fn n_fq_polyun_product_roots(
1884        M: *mut n_polyun_struct,
1885        H: *mut n_polyun_struct,
1886        ctx: *mut fq_nmod_ctx_struct,
1887        St: *mut n_poly_stack_struct,
1888    ) -> mp_limb_signed_t;
1889}
1890extern "C" {
1891    pub fn _nmod_zip_eval_step(
1892        cur: *mut mp_limb_t,
1893        inc: *const mp_limb_t,
1894        coeffs: *const mp_limb_t,
1895        length: mp_limb_signed_t,
1896        ctx: nmod_t,
1897    ) -> mp_limb_t;
1898}
1899extern "C" {
1900    pub fn _n_fq_zip_eval_step(
1901        res: *mut mp_limb_t,
1902        cur: *mut mp_limb_t,
1903        inc: *const mp_limb_t,
1904        coeffs: *const mp_limb_t,
1905        length: mp_limb_signed_t,
1906        ctx: *mut fq_nmod_ctx_struct,
1907    );
1908}
1909extern "C" {
1910    pub fn _n_fqp_zip_eval_step(
1911        res: *mut mp_limb_t,
1912        cur: *mut mp_limb_t,
1913        inc: *const mp_limb_t,
1914        coeffs: *const mp_limb_t,
1915        length: mp_limb_signed_t,
1916        d: mp_limb_signed_t,
1917        mod_: nmod_t,
1918    );
1919}
1920extern "C" {
1921    pub fn _nmod_zip_vand_solve(
1922        coeffs: *mut mp_limb_t,
1923        monomials: *const mp_limb_t,
1924        mlength: mp_limb_signed_t,
1925        evals: *const mp_limb_t,
1926        elength: mp_limb_signed_t,
1927        master: *const mp_limb_t,
1928        scratch: *mut mp_limb_t,
1929        ctx: nmod_t,
1930    ) -> c_int;
1931}
1932extern "C" {
1933    pub fn _n_fq_zip_vand_solve(
1934        coeffs: *mut mp_limb_t,
1935        monomials: *const mp_limb_t,
1936        mlength: mp_limb_signed_t,
1937        evals: *const mp_limb_t,
1938        elength: mp_limb_signed_t,
1939        master: *const mp_limb_t,
1940        scratch: *mut mp_limb_t,
1941        ctx: *mut fq_nmod_ctx_struct,
1942    ) -> c_int;
1943}
1944extern "C" {
1945    pub fn _n_fqp_zip_vand_solve(
1946        coeffs: *mut mp_limb_t,
1947        monomials: *const mp_limb_t,
1948        mlength: mp_limb_signed_t,
1949        evals: *const mp_limb_t,
1950        elength: mp_limb_signed_t,
1951        master: *const mp_limb_t,
1952        scratch: *mut mp_limb_t,
1953        ctx: *mut fq_nmod_ctx_struct,
1954    ) -> c_int;
1955}
1956extern "C" {
1957    pub fn n_poly_stack_init(S: *mut n_poly_stack_struct);
1958}
1959extern "C" {
1960    pub fn n_poly_stack_clear(S: *mut n_poly_stack_struct);
1961}
1962extern "C" {
1963    pub fn n_poly_stack_fit_request(
1964        S: *mut n_poly_stack_struct,
1965        k: mp_limb_signed_t,
1966    ) -> *mut *mut n_poly_struct;
1967}
1968extern "C" {
1969    pub fn n_poly_stack_vec_init(
1970        S: *mut n_poly_stack_struct,
1971        len: mp_limb_signed_t,
1972    ) -> *mut mp_limb_t;
1973}
1974extern "C" {
1975    pub fn n_poly_stack_vec_clear(S: *mut n_poly_stack_struct);
1976}
1977extern "C" {
1978    pub fn n_poly_stack_request(
1979        S: *mut n_poly_stack_struct,
1980        k: mp_limb_signed_t,
1981    ) -> *mut *mut n_poly_struct;
1982}
1983extern "C" {
1984    pub fn n_poly_stack_take_top(S: *mut n_poly_stack_struct) -> *mut n_poly_struct;
1985}
1986extern "C" {
1987    pub fn n_poly_stack_give_back(S: *mut n_poly_stack_struct, k: mp_limb_signed_t);
1988}
1989extern "C" {
1990    pub fn n_poly_stack_size(S: *mut n_poly_stack_struct) -> mp_limb_signed_t;
1991}
1992extern "C" {
1993    pub fn n_bpoly_stack_init(S: *mut n_bpoly_stack_struct);
1994}
1995extern "C" {
1996    pub fn n_bpoly_stack_clear(S: *mut n_bpoly_stack_struct);
1997}
1998extern "C" {
1999    pub fn n_bpoly_stack_fit_request(
2000        S: *mut n_bpoly_stack_struct,
2001        k: mp_limb_signed_t,
2002    ) -> *mut *mut n_bpoly_struct;
2003}
2004extern "C" {
2005    pub fn n_bpoly_stack_request(
2006        S: *mut n_bpoly_stack_struct,
2007        k: mp_limb_signed_t,
2008    ) -> *mut *mut n_bpoly_struct;
2009}
2010extern "C" {
2011    pub fn n_bpoly_stack_take_top(S: *mut n_bpoly_stack_struct) -> *mut n_bpoly_struct;
2012}
2013extern "C" {
2014    pub fn n_bpoly_stack_give_back(S: *mut n_bpoly_stack_struct, k: mp_limb_signed_t);
2015}
2016extern "C" {
2017    pub fn n_bpoly_stack_size(S: *mut n_bpoly_stack_struct) -> mp_limb_signed_t;
2018}
2019extern "C" {
2020    pub fn n_polyun_stack_init(S: *mut n_polyun_stack_struct);
2021}
2022extern "C" {
2023    pub fn n_polyun_stack_clear(S: *mut n_polyun_stack_struct);
2024}
2025extern "C" {
2026    pub fn n_polyun_stack_fit_request(
2027        S: *mut n_polyun_stack_struct,
2028        k: mp_limb_signed_t,
2029    ) -> *mut *mut n_polyun_struct;
2030}
2031extern "C" {
2032    pub fn n_polyun_stack_request(
2033        S: *mut n_polyun_stack_struct,
2034        k: mp_limb_signed_t,
2035    ) -> *mut *mut n_polyun_struct;
2036}
2037extern "C" {
2038    pub fn n_polyun_stack_take_top(S: *mut n_polyun_stack_struct) -> *mut n_polyun_struct;
2039}
2040extern "C" {
2041    pub fn n_polyun_stack_give_back(S: *mut n_polyun_stack_struct, k: mp_limb_signed_t);
2042}
2043extern "C" {
2044    pub fn n_polyun_stack_size(S: *mut n_polyun_stack_struct) -> mp_limb_signed_t;
2045}