flint_sys/
fmpz_mpoly_factor.rs

1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4//! See the [FLINT documentation](http://flintlib.org/doc/fmpz_mpoly_factor.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpq::fmpq;
9use crate::fmpz::{fmpz, fmpz_t};
10use crate::fmpz_mod::{fmpz_mod_ctx_struct, fmpz_mod_ctx_t};
11use crate::fmpz_mod_poly::{fmpz_mod_poly_struct, fmpz_mod_poly_t};
12use crate::fmpz_mpoly::{
13    fmpz_mpoly_ctx_struct, fmpz_mpoly_geobucket_struct, fmpz_mpoly_struct, fmpz_mpoly_univar_struct,
14};
15use crate::fmpz_poly::{fmpz_poly_struct, fmpz_poly_t};
16use crate::fmpz_poly_factor::{fmpz_poly_factor_struct, zassenhaus_prune_struct};
17use crate::mpoly::*;
18use crate::nmod_mpoly::*;
19use libc::{c_char, c_int, c_uint};
20
21#[repr(C)]
22#[derive(Debug, Copy, Clone)]
23pub struct fmpz_mpoly_factor_struct {
24    pub constant: fmpz_t,
25    pub constant_den: fmpz_t,
26    pub poly: *mut fmpz_mpoly_struct,
27    pub exp: *mut fmpz,
28    pub num: mp_limb_signed_t,
29    pub alloc: mp_limb_signed_t,
30}
31pub type fmpz_mpoly_factor_t = [fmpz_mpoly_factor_struct; 1usize];
32extern "C" {
33    pub fn fmpz_mpoly_factor_init(
34        f: *mut fmpz_mpoly_factor_struct,
35        ctx: *mut fmpz_mpoly_ctx_struct,
36    );
37}
38extern "C" {
39    pub fn fmpz_mpoly_factor_init2(
40        f: *mut fmpz_mpoly_factor_struct,
41        alloc: mp_limb_signed_t,
42        ctx: *mut fmpz_mpoly_ctx_struct,
43    );
44}
45extern "C" {
46    pub fn fmpz_mpoly_factor_realloc(
47        f: *mut fmpz_mpoly_factor_struct,
48        alloc: mp_limb_signed_t,
49        ctx: *mut fmpz_mpoly_ctx_struct,
50    );
51}
52extern "C" {
53    pub fn fmpz_mpoly_factor_fit_length(
54        f: *mut fmpz_mpoly_factor_struct,
55        len: mp_limb_signed_t,
56        ctx: *mut fmpz_mpoly_ctx_struct,
57    );
58}
59extern "C" {
60    pub fn fmpz_mpoly_factor_clear(
61        f: *mut fmpz_mpoly_factor_struct,
62        ctx: *mut fmpz_mpoly_ctx_struct,
63    );
64}
65extern "C" {
66    pub fn fmpz_mpoly_factor_length(
67        f: *mut fmpz_mpoly_factor_struct,
68        ctx: *mut fmpz_mpoly_ctx_struct,
69    ) -> mp_limb_signed_t;
70}
71extern "C" {
72    pub fn fmpz_mpoly_factor_get_constant_fmpz(
73        c: *mut fmpz,
74        f: *mut fmpz_mpoly_factor_struct,
75        ctx: *mut fmpz_mpoly_ctx_struct,
76    );
77}
78extern "C" {
79    pub fn fmpz_mpoly_factor_get_constant_fmpq(
80        c: *mut fmpq,
81        f: *mut fmpz_mpoly_factor_struct,
82        ctx: *mut fmpz_mpoly_ctx_struct,
83    );
84}
85extern "C" {
86    pub fn fmpz_mpoly_factor_get_base(
87        p: *mut fmpz_mpoly_struct,
88        f: *mut fmpz_mpoly_factor_struct,
89        i: mp_limb_signed_t,
90        ctx: *mut fmpz_mpoly_ctx_struct,
91    );
92}
93extern "C" {
94    pub fn fmpz_mpoly_factor_swap_base(
95        p: *mut fmpz_mpoly_struct,
96        f: *mut fmpz_mpoly_factor_struct,
97        i: mp_limb_signed_t,
98        ctx: *mut fmpz_mpoly_ctx_struct,
99    );
100}
101extern "C" {
102    pub fn fmpz_mpoly_factor_get_exp_si(
103        f: *mut fmpz_mpoly_factor_struct,
104        i: mp_limb_signed_t,
105        ctx: *mut fmpz_mpoly_ctx_struct,
106    ) -> mp_limb_signed_t;
107}
108extern "C" {
109    pub fn fmpz_mpoly_factor_set(
110        f: *mut fmpz_mpoly_factor_struct,
111        g: *mut fmpz_mpoly_factor_struct,
112        ctx: *mut fmpz_mpoly_ctx_struct,
113    );
114}
115extern "C" {
116    pub fn fmpz_mpoly_factor_cmp(
117        f: *mut fmpz_mpoly_factor_struct,
118        g: *mut fmpz_mpoly_factor_struct,
119        ctx: *mut fmpz_mpoly_ctx_struct,
120    ) -> c_int;
121}
122extern "C" {
123    pub fn fmpz_mpoly_factor_print_pretty(
124        f: *mut fmpz_mpoly_factor_struct,
125        vars: *mut *const c_char,
126        ctx: *mut fmpz_mpoly_ctx_struct,
127    );
128}
129extern "C" {
130    pub fn fmpz_mpoly_factor_content(
131        f: *mut fmpz_mpoly_factor_struct,
132        A: *mut fmpz_mpoly_struct,
133        ctx: *mut fmpz_mpoly_ctx_struct,
134    ) -> c_int;
135}
136extern "C" {
137    pub fn fmpz_mpoly_factor_squarefree(
138        f: *mut fmpz_mpoly_factor_struct,
139        A: *mut fmpz_mpoly_struct,
140        ctx: *mut fmpz_mpoly_ctx_struct,
141    ) -> c_int;
142}
143extern "C" {
144    pub fn fmpz_mpoly_factor(
145        f: *mut fmpz_mpoly_factor_struct,
146        A: *mut fmpz_mpoly_struct,
147        ctx: *mut fmpz_mpoly_ctx_struct,
148    ) -> c_int;
149}
150extern "C" {
151    pub fn fmpz_mpoly_factor_swap(
152        f: *mut fmpz_mpoly_factor_struct,
153        g: *mut fmpz_mpoly_factor_struct,
154        ctx: *mut fmpz_mpoly_ctx_struct,
155    );
156}
157extern "C" {
158    pub fn fmpz_mpoly_factor_set_fmpz(
159        f: *mut fmpz_mpoly_factor_struct,
160        a: *mut fmpz,
161        ctx: *mut fmpz_mpoly_ctx_struct,
162    );
163}
164extern "C" {
165    pub fn fmpz_mpoly_factor_zero(
166        f: *mut fmpz_mpoly_factor_struct,
167        ctx: *mut fmpz_mpoly_ctx_struct,
168    );
169}
170extern "C" {
171    pub fn fmpz_mpoly_factor_one(f: *mut fmpz_mpoly_factor_struct, ctx: *mut fmpz_mpoly_ctx_struct);
172}
173extern "C" {
174    pub fn fmpz_mpoly_factor_sort(
175        f: *mut fmpz_mpoly_factor_struct,
176        ctx: *mut fmpz_mpoly_ctx_struct,
177    );
178}
179extern "C" {
180    pub fn fmpz_mpoly_factor_expand(
181        A: *mut fmpz_mpoly_struct,
182        f: *mut fmpz_mpoly_factor_struct,
183        ctx: *mut fmpz_mpoly_ctx_struct,
184    ) -> c_int;
185}
186extern "C" {
187    pub fn fmpz_mpoly_factor_bound_si(
188        B: *mut fmpz,
189        A: *mut fmpz,
190        degs: *const mp_limb_signed_t,
191        nvars: mp_limb_signed_t,
192    ) -> c_int;
193}
194extern "C" {
195    pub fn fmpz_mpoly_factor_matches(
196        A: *mut fmpz_mpoly_struct,
197        f: *mut fmpz_mpoly_factor_struct,
198        ctx: *mut fmpz_mpoly_ctx_struct,
199    ) -> c_int;
200}
201extern "C" {
202    pub fn fmpz_mpoly_factor_append_fmpz_swap(
203        f: *mut fmpz_mpoly_factor_struct,
204        A: *mut fmpz_mpoly_struct,
205        e: *mut fmpz,
206        ctx: *mut fmpz_mpoly_ctx_struct,
207    );
208}
209extern "C" {
210    pub fn fmpz_mpoly_factor_append_ui(
211        f: *mut fmpz_mpoly_factor_struct,
212        A: *mut fmpz_mpoly_struct,
213        e: mp_limb_t,
214        ctx: *mut fmpz_mpoly_ctx_struct,
215    );
216}
217extern "C" {
218    pub fn fmpz_mpoly_interp_lift_p(
219        A: *mut fmpz_mpoly_struct,
220        ctx: *mut fmpz_mpoly_ctx_struct,
221        Ap: *mut nmod_mpoly_struct,
222        ctxp: *mut nmod_mpoly_ctx_struct,
223    );
224}
225extern "C" {
226    pub fn fmpz_mpoly_interp_reduce_p(
227        Ap: *mut nmod_mpoly_struct,
228        ctxp: *mut nmod_mpoly_ctx_struct,
229        A: *mut fmpz_mpoly_struct,
230        ctx: *mut fmpz_mpoly_ctx_struct,
231    );
232}
233extern "C" {
234    pub fn fmpz_mpoly_interp_mcrt_p(
235        coeffbits: *mut mp_limb_t,
236        H: *mut fmpz_mpoly_struct,
237        ctx: *mut fmpz_mpoly_ctx_struct,
238        m: *mut fmpz,
239        A: *mut nmod_mpoly_struct,
240        ctxp: *mut nmod_mpoly_ctx_struct,
241    ) -> c_int;
242}
243extern "C" {
244    pub fn fmpz_mpoly_interp_reduce_p_mpolyn(
245        E: *mut nmod_mpolyn_struct,
246        pctx: *mut nmod_mpoly_ctx_struct,
247        A: *mut fmpz_mpoly_struct,
248        ctx: *mut fmpz_mpoly_ctx_struct,
249    );
250}
251extern "C" {
252    pub fn fmpz_mpoly_interp_lift_p_mpolyn(
253        A: *mut fmpz_mpoly_struct,
254        ctx: *mut fmpz_mpoly_ctx_struct,
255        B: *mut nmod_mpolyn_struct,
256        pctx: *mut nmod_mpoly_ctx_struct,
257    );
258}
259extern "C" {
260    pub fn fmpz_mpoly_interp_crt_p_mpolyn(
261        F: *mut fmpz_mpoly_struct,
262        T: *mut fmpz_mpoly_struct,
263        ctx: *mut fmpz_mpoly_ctx_struct,
264        modulus: *mut fmpz,
265        A: *mut nmod_mpolyn_struct,
266        pctx: *mut nmod_mpoly_ctx_struct,
267    ) -> c_int;
268}
269#[repr(C)]
270#[derive(Debug, Copy, Clone)]
271pub struct fmpz_mpolyv_struct {
272    pub coeffs: *mut fmpz_mpoly_struct,
273    pub alloc: mp_limb_signed_t,
274    pub length: mp_limb_signed_t,
275}
276pub type fmpz_mpolyv_t = [fmpz_mpolyv_struct; 1usize];
277extern "C" {
278    pub fn fmpz_mpolyv_init(A: *mut fmpz_mpolyv_struct, ctx: *mut fmpz_mpoly_ctx_struct);
279}
280extern "C" {
281    pub fn fmpz_mpolyv_swap(
282        A: *mut fmpz_mpolyv_struct,
283        B: *mut fmpz_mpolyv_struct,
284        ctx: *mut fmpz_mpoly_ctx_struct,
285    );
286}
287extern "C" {
288    pub fn fmpz_mpolyv_clear(A: *mut fmpz_mpolyv_struct, ctx: *mut fmpz_mpoly_ctx_struct);
289}
290extern "C" {
291    pub fn fmpz_mpolyv_print_pretty(
292        poly: *mut fmpz_mpolyv_struct,
293        x: *mut *const c_char,
294        ctx: *mut fmpz_mpoly_ctx_struct,
295    );
296}
297extern "C" {
298    pub fn fmpz_mpolyv_fit_length(
299        A: *mut fmpz_mpolyv_struct,
300        length: mp_limb_signed_t,
301        ctx: *mut fmpz_mpoly_ctx_struct,
302    );
303}
304extern "C" {
305    pub fn fmpz_mpolyv_set_coeff(
306        A: *mut fmpz_mpolyv_struct,
307        i: mp_limb_signed_t,
308        c: *mut fmpz_mpoly_struct,
309        ctx: *mut fmpz_mpoly_ctx_struct,
310    );
311}
312extern "C" {
313    pub fn fmpz_mpoly_to_mpolyv(
314        A: *mut fmpz_mpolyv_struct,
315        B: *mut fmpz_mpoly_struct,
316        xalpha: *mut fmpz_mpoly_struct,
317        ctx: *mut fmpz_mpoly_ctx_struct,
318    );
319}
320extern "C" {
321    pub fn fmpz_mpoly_from_mpolyv(
322        A: *mut fmpz_mpoly_struct,
323        Abits: mp_limb_t,
324        B: *mut fmpz_mpolyv_struct,
325        xalpha: *mut fmpz_mpoly_struct,
326        ctx: *mut fmpz_mpoly_ctx_struct,
327    );
328}
329extern "C" {
330    pub fn _fmpz_mpoly_vec_content_mpoly(
331        g: *mut fmpz_mpoly_struct,
332        A: *const fmpz_mpoly_struct,
333        Alen: mp_limb_signed_t,
334        ctx: *mut fmpz_mpoly_ctx_struct,
335    ) -> c_int;
336}
337extern "C" {
338    pub fn _fmpz_mpoly_vec_divexact_mpoly(
339        A: *mut fmpz_mpoly_struct,
340        Alen: mp_limb_signed_t,
341        c: *mut fmpz_mpoly_struct,
342        ctx: *mut fmpz_mpoly_ctx_struct,
343    );
344}
345extern "C" {
346    pub fn _fmpz_mpoly_vec_mul_mpoly(
347        A: *mut fmpz_mpoly_struct,
348        Alen: mp_limb_signed_t,
349        c: *mut fmpz_mpoly_struct,
350        ctx: *mut fmpz_mpoly_ctx_struct,
351    );
352}
353extern "C" {
354    pub fn _fmpz_mpoly_gcd_algo(
355        G: *mut fmpz_mpoly_struct,
356        Abar: *mut fmpz_mpoly_struct,
357        Bbar: *mut fmpz_mpoly_struct,
358        A: *mut fmpz_mpoly_struct,
359        B: *mut fmpz_mpoly_struct,
360        ctx: *mut fmpz_mpoly_ctx_struct,
361        algo: c_uint,
362    ) -> c_int;
363}
364extern "C" {
365    pub fn fmpz_mpoly_to_mpolyl_perm_deflate(
366        A: *mut fmpz_mpoly_struct,
367        lctx: *mut fmpz_mpoly_ctx_struct,
368        B: *mut fmpz_mpoly_struct,
369        ctx: *mut fmpz_mpoly_ctx_struct,
370        perm: *const mp_limb_signed_t,
371        shift: *const mp_limb_t,
372        stride: *const mp_limb_t,
373    );
374}
375extern "C" {
376    pub fn fmpz_mpoly_from_mpolyl_perm_inflate(
377        A: *mut fmpz_mpoly_struct,
378        Abits: mp_limb_t,
379        ctx: *mut fmpz_mpoly_ctx_struct,
380        B: *mut fmpz_mpoly_struct,
381        lctx: *mut fmpz_mpoly_ctx_struct,
382        perm: *const mp_limb_signed_t,
383        shift: *const mp_limb_t,
384        stride: *const mp_limb_t,
385    );
386}
387extern "C" {
388    pub fn fmpz_mpolyl_gcd_brown(
389        G: *mut fmpz_mpoly_struct,
390        Abar: *mut fmpz_mpoly_struct,
391        Bbar: *mut fmpz_mpoly_struct,
392        A: *mut fmpz_mpoly_struct,
393        B: *mut fmpz_mpoly_struct,
394        ctx: *mut fmpz_mpoly_ctx_struct,
395        I: *mut mpoly_gcd_info_struct,
396    ) -> c_int;
397}
398extern "C" {
399    pub fn fmpz_mpolyl_gcd_brown_threaded_pool(
400        G: *mut fmpz_mpoly_struct,
401        Abar: *mut fmpz_mpoly_struct,
402        Bbar: *mut fmpz_mpoly_struct,
403        A: *mut fmpz_mpoly_struct,
404        B: *mut fmpz_mpoly_struct,
405        ctx: *mut fmpz_mpoly_ctx_struct,
406        I: *mut mpoly_gcd_info_struct,
407        handles: *const thread_pool_handle,
408        num_handles: mp_limb_signed_t,
409    ) -> c_int;
410}
411extern "C" {
412    pub fn fmpz_mpolyl_gcd_zippel(
413        G: *mut fmpz_mpoly_struct,
414        Abar: *mut fmpz_mpoly_struct,
415        Bbar: *mut fmpz_mpoly_struct,
416        A: *mut fmpz_mpoly_struct,
417        B: *mut fmpz_mpoly_struct,
418        ctx: *mut fmpz_mpoly_ctx_struct,
419        randstate: *mut flint_rand_s,
420    ) -> c_int;
421}
422extern "C" {
423    pub fn fmpz_mpolyl_gcd_zippel2(
424        G: *mut fmpz_mpoly_struct,
425        Abar: *mut fmpz_mpoly_struct,
426        Bbar: *mut fmpz_mpoly_struct,
427        A: *mut fmpz_mpoly_struct,
428        B: *mut fmpz_mpoly_struct,
429        Gamma: *mut fmpz_mpoly_struct,
430        ctx: *mut fmpz_mpoly_ctx_struct,
431    ) -> c_int;
432}
433extern "C" {
434    pub fn fmpz_mpolyl_gcd_hensel(
435        G: *mut fmpz_mpoly_struct,
436        Gdeg: mp_limb_signed_t,
437        Abar: *mut fmpz_mpoly_struct,
438        Bbar: *mut fmpz_mpoly_struct,
439        A: *mut fmpz_mpoly_struct,
440        B: *mut fmpz_mpoly_struct,
441        ctx: *mut fmpz_mpoly_ctx_struct,
442    ) -> c_int;
443}
444#[repr(C)]
445#[derive(Debug, Copy, Clone)]
446pub struct fmpz_poly_pfrac_struct {
447    pub r: mp_limb_signed_t,
448    pub bits: *mut mp_limb_t,
449    pub a: fmpz_poly_t,
450    pub newa: fmpz_poly_t,
451    pub t: fmpz_poly_t,
452    pub b: *mut fmpz_poly_struct,
453    pub bprod: *mut fmpz_poly_struct,
454    pub old_pk: fmpz_t,
455    pub pk: fmpz_t,
456    pub p: fmpz_t,
457    pub halfpks: *mut fmpz,
458    pub ctxp: fmpz_mod_ctx_t,
459    pub ctxs: *mut fmpz_mod_ctx_struct,
460    pub T: fmpz_mod_poly_t,
461    pub R: fmpz_mod_poly_t,
462    pub Q: fmpz_mod_poly_t,
463    pub B: *mut fmpz_mod_poly_struct,
464    pub invBprod: *mut fmpz_mod_poly_struct,
465    pub inwBprod: *mut fmpz_mod_poly_struct,
466    pub B_inv: *mut fmpz_mod_poly_struct,
467}
468pub type fmpz_poly_pfrac_t = [fmpz_poly_pfrac_struct; 1usize];
469extern "C" {
470    pub fn fmpz_poly_pfrac_init(I: *mut fmpz_poly_pfrac_struct);
471}
472extern "C" {
473    pub fn fmpz_poly_pfrac_clear(I: *mut fmpz_poly_pfrac_struct);
474}
475extern "C" {
476    pub fn fmpz_poly_pfrac_precompute(
477        I: *mut fmpz_poly_pfrac_struct,
478        b: *const fmpz_poly_struct,
479        r: mp_limb_signed_t,
480    ) -> c_int;
481}
482extern "C" {
483    pub fn fmpz_poly_pfrac_precomp(
484        c: *mut fmpz_poly_struct,
485        A: *mut fmpz_poly_struct,
486        I: *mut fmpz_poly_pfrac_struct,
487    ) -> c_int;
488}
489#[repr(C)]
490#[derive(Debug, Copy, Clone)]
491pub struct fmpz_mpoly_pfrac_struct {
492    pub bits: mp_limb_t,
493    pub w: mp_limb_signed_t,
494    pub r: mp_limb_signed_t,
495    pub prod_mbetas: *mut fmpz_mpoly_struct,
496    pub prod_mbetas_coeffs: *mut fmpz_mpolyv_struct,
497    pub mbetas: *mut fmpz_mpoly_struct,
498    pub deltas: *mut fmpz_mpoly_struct,
499    pub xalpha: *mut fmpz_mpoly_struct,
500    pub q: *mut fmpz_mpoly_struct,
501    pub U: *mut fmpz_mpoly_univar_struct,
502    pub G: *mut fmpz_mpoly_geobucket_struct,
503    pub qt: *mut fmpz_mpoly_struct,
504    pub newt: *mut fmpz_mpoly_struct,
505    pub delta_coeffs: *mut fmpz_mpolyv_struct,
506    pub uni_pfrac: fmpz_poly_pfrac_t,
507    pub uni_a: fmpz_poly_t,
508    pub uni_c: *mut fmpz_poly_struct,
509}
510pub type fmpz_mpoly_pfrac_t = [fmpz_mpoly_pfrac_struct; 1usize];
511extern "C" {
512    pub fn fmpz_mpoly_pfrac_init(
513        I: *mut fmpz_mpoly_pfrac_struct,
514        bits: mp_limb_t,
515        r: mp_limb_signed_t,
516        w: mp_limb_signed_t,
517        betas: *const fmpz_mpoly_struct,
518        alpha: *const fmpz,
519        ctx: *mut fmpz_mpoly_ctx_struct,
520    ) -> c_int;
521}
522extern "C" {
523    pub fn fmpz_mpoly_pfrac_clear(I: *mut fmpz_mpoly_pfrac_struct, ctx: *mut fmpz_mpoly_ctx_struct);
524}
525extern "C" {
526    pub fn fmpz_mpoly_pfrac(
527        l: mp_limb_signed_t,
528        t: *mut fmpz_mpoly_struct,
529        degs: *const mp_limb_signed_t,
530        I: *mut fmpz_mpoly_pfrac_struct,
531        ctx: *mut fmpz_mpoly_ctx_struct,
532    ) -> c_int;
533}
534extern "C" {
535    pub fn fmpz_mpoly_hlift(
536        m: mp_limb_signed_t,
537        f: *mut fmpz_mpoly_struct,
538        r: mp_limb_signed_t,
539        alpha: *const fmpz,
540        A: *mut fmpz_mpoly_struct,
541        degs: *const mp_limb_signed_t,
542        ctx: *mut fmpz_mpoly_ctx_struct,
543    ) -> c_int;
544}
545extern "C" {
546    pub fn _fmpz_mpoly_get_lead0(
547        c: *mut fmpz_mpoly_struct,
548        A: *mut fmpz_mpoly_struct,
549        ctx: *mut fmpz_mpoly_ctx_struct,
550    );
551}
552extern "C" {
553    pub fn _fmpz_mpoly_set_lead0(
554        A: *mut fmpz_mpoly_struct,
555        B: *mut fmpz_mpoly_struct,
556        c: *mut fmpz_mpoly_struct,
557        ctx: *mut fmpz_mpoly_ctx_struct,
558    );
559}
560#[repr(C)]
561#[derive(Debug, Copy, Clone)]
562pub struct fmpz_bpoly_struct {
563    pub coeffs: *mut fmpz_poly_struct,
564    pub alloc: mp_limb_signed_t,
565    pub length: mp_limb_signed_t,
566}
567pub type fmpz_bpoly_t = [fmpz_bpoly_struct; 1usize];
568extern "C" {
569    pub fn fmpz_bpoly_init(A: *mut fmpz_bpoly_struct);
570}
571extern "C" {
572    pub fn fmpz_bpoly_swap(A: *mut fmpz_bpoly_struct, B: *mut fmpz_bpoly_struct);
573}
574extern "C" {
575    pub fn fmpz_bpoly_clear(A: *mut fmpz_bpoly_struct);
576}
577extern "C" {
578    pub fn fmpz_bpoly_realloc(A: *mut fmpz_bpoly_struct, len: mp_limb_signed_t);
579}
580extern "C" {
581    pub fn fmpz_bpoly_fit_length(A: *mut fmpz_bpoly_struct, len: mp_limb_signed_t);
582}
583extern "C" {
584    pub fn fmpz_bpoly_print_pretty(
585        A: *mut fmpz_bpoly_struct,
586        var0: *const c_char,
587        var1: *const c_char,
588    );
589}
590extern "C" {
591    pub fn fmpz_bpoly_lead(A: *mut fmpz_bpoly_struct) -> *mut fmpz_poly_struct;
592}
593extern "C" {
594    pub fn fmpz_bpoly_zero(A: *mut fmpz_bpoly_struct);
595}
596extern "C" {
597    pub fn fmpz_bpoly_degree0(A: *mut fmpz_bpoly_struct) -> mp_limb_signed_t;
598}
599extern "C" {
600    pub fn fmpz_bpoly_degree1(A: *mut fmpz_bpoly_struct) -> mp_limb_signed_t;
601}
602extern "C" {
603    pub fn fmpz_bpoly_set_coeff(
604        A: *mut fmpz_bpoly_struct,
605        exp0: mp_limb_signed_t,
606        exp1: mp_limb_signed_t,
607        c: *mut fmpz,
608    );
609}
610extern "C" {
611    pub fn fmpz_mpoly_set_fmpz_bpoly(
612        A: *mut fmpz_mpoly_struct,
613        Abits: mp_limb_t,
614        B: *mut fmpz_bpoly_struct,
615        var0: mp_limb_signed_t,
616        var1: mp_limb_signed_t,
617        ctx: *mut fmpz_mpoly_ctx_struct,
618    );
619}
620extern "C" {
621    pub fn fmpz_mpoly_get_bpoly(
622        A: *mut fmpz_bpoly_struct,
623        B: *mut fmpz_mpoly_struct,
624        var0: mp_limb_signed_t,
625        var1: mp_limb_signed_t,
626        ctx: *mut fmpz_mpoly_ctx_struct,
627    );
628}
629#[repr(C)]
630#[derive(Debug, Copy, Clone)]
631pub struct fmpz_tpoly_struct {
632    pub coeffs: *mut fmpz_bpoly_struct,
633    pub alloc: mp_limb_signed_t,
634    pub length: mp_limb_signed_t,
635}
636pub type fmpz_tpoly_t = [fmpz_tpoly_struct; 1usize];
637extern "C" {
638    pub fn fmpz_tpoly_init(A: *mut fmpz_tpoly_struct);
639}
640extern "C" {
641    pub fn fmpz_tpoly_swap(A: *mut fmpz_tpoly_struct, B: *mut fmpz_tpoly_struct);
642}
643extern "C" {
644    pub fn fmpz_tpoly_fit_length(A: *mut fmpz_tpoly_struct, len: mp_limb_signed_t);
645}
646extern "C" {
647    pub fn fmpz_tpoly_clear(A: *mut fmpz_tpoly_struct);
648}
649extern "C" {
650    pub fn fmpz_bpoly_factor(
651        c: *mut fmpz_poly_struct,
652        F: *mut fmpz_tpoly_struct,
653        B: *mut fmpz_bpoly_struct,
654    );
655}
656extern "C" {
657    pub fn fmpz_bpoly_factor_ordered(
658        c: *mut fmpz_poly_struct,
659        F: *mut fmpz_tpoly_struct,
660        B: *mut fmpz_bpoly_struct,
661        alpha: *mut fmpz,
662        Bevalf: *mut fmpz_poly_factor_struct,
663    ) -> c_int;
664}
665extern "C" {
666    pub fn fmpz_mpoly_unit_normalize(A: *mut fmpz_mpoly_struct, ctx: *mut fmpz_mpoly_ctx_struct);
667}
668extern "C" {
669    pub fn _fmpz_mpoly_factor_squarefree(
670        f: *mut fmpz_mpoly_factor_struct,
671        A: *mut fmpz_mpoly_struct,
672        e: *mut fmpz,
673        ctx: *mut fmpz_mpoly_ctx_struct,
674    ) -> c_int;
675}
676extern "C" {
677    pub fn fmpz_mpoly_factor_lcc_wang(
678        lc_divs: *mut fmpz_mpoly_struct,
679        lcAfac: *mut fmpz_mpoly_factor_struct,
680        Auc: *mut fmpz,
681        Auf: *const fmpz_poly_struct,
682        r: mp_limb_signed_t,
683        alpha: *const fmpz,
684        ctx: *mut fmpz_mpoly_ctx_struct,
685    ) -> c_int;
686}
687extern "C" {
688    pub fn fmpz_mpoly_factor_irred_zassenhaus(
689        fac: *mut fmpz_mpolyv_struct,
690        A: *mut fmpz_mpoly_struct,
691        ctx: *mut fmpz_mpoly_ctx_struct,
692        Z: *mut zassenhaus_prune_struct,
693    ) -> c_int;
694}
695extern "C" {
696    pub fn fmpz_mpoly_factor_irred_wang(
697        fac: *mut fmpz_mpolyv_struct,
698        A: *mut fmpz_mpoly_struct,
699        lcAfac: *mut fmpz_mpoly_factor_struct,
700        lcAfac_irred: c_int,
701        lcA: *mut fmpz_mpoly_struct,
702        ctx: *mut fmpz_mpoly_ctx_struct,
703        state: *mut flint_rand_s,
704        Z: *mut zassenhaus_prune_struct,
705        allow_shift: c_int,
706    ) -> c_int;
707}
708extern "C" {
709    pub fn fmpz_mpoly_factor_irred_zippel(
710        fac: *mut fmpz_mpolyv_struct,
711        A: *mut fmpz_mpoly_struct,
712        lcAfac: *mut fmpz_mpoly_factor_struct,
713        lcAfac_irred: c_int,
714        lcA: *mut fmpz_mpoly_struct,
715        ctx: *mut fmpz_mpoly_ctx_struct,
716        state: *mut flint_rand_s,
717        Z: *mut zassenhaus_prune_struct,
718    ) -> c_int;
719}
720extern "C" {
721    pub fn fmpz_mpoly_factor_irred(
722        f: *mut fmpz_mpoly_factor_struct,
723        ctx: *mut fmpz_mpoly_ctx_struct,
724        algo: c_uint,
725    ) -> c_int;
726}
727extern "C" {
728    pub fn fmpz_mpoly_factor_zassenhaus(
729        f: *mut fmpz_mpoly_factor_struct,
730        A: *mut fmpz_mpoly_struct,
731        ctx: *mut fmpz_mpoly_ctx_struct,
732    ) -> c_int;
733}
734extern "C" {
735    pub fn fmpz_mpoly_factor_wang(
736        f: *mut fmpz_mpoly_factor_struct,
737        A: *mut fmpz_mpoly_struct,
738        ctx: *mut fmpz_mpoly_ctx_struct,
739    ) -> c_int;
740}
741extern "C" {
742    pub fn fmpz_mpoly_factor_zippel(
743        f: *mut fmpz_mpoly_factor_struct,
744        A: *mut fmpz_mpoly_struct,
745        ctx: *mut fmpz_mpoly_ctx_struct,
746    ) -> c_int;
747}
748extern "C" {
749    pub fn _fmpz_mpoly_evaluate_rest_fmpz(
750        E: *mut fmpz,
751        starts: *mut mp_limb_signed_t,
752        ends: *mut mp_limb_signed_t,
753        stops: *mut mp_limb_signed_t,
754        es: *mut mp_limb_t,
755        Acoeffs: *const fmpz,
756        Aexps: *const mp_limb_t,
757        Alen: mp_limb_signed_t,
758        var: mp_limb_signed_t,
759        alphas: *const fmpz,
760        offsets: *const mp_limb_signed_t,
761        shifts: *const mp_limb_signed_t,
762        N: mp_limb_signed_t,
763        mask: mp_limb_t,
764        nvars: mp_limb_signed_t,
765    ) -> c_int;
766}
767extern "C" {
768    pub fn _fmpz_mpoly_eval_rest_to_poly(
769        E: *mut fmpz_poly_struct,
770        A: *mut fmpz_mpoly_struct,
771        alphas: *const fmpz,
772        ctx: *mut fmpz_mpoly_ctx_struct,
773    );
774}
775extern "C" {
776    pub fn fmpz_mpoly_factor_lcc_kaltofen_step(
777        divs: *mut fmpz_mpoly_struct,
778        r: mp_limb_signed_t,
779        Af: *mut fmpz_mpoly_factor_struct,
780        Au: *const fmpz_poly_struct,
781        v: mp_limb_signed_t,
782        alphas: *const fmpz,
783        ctx: *mut fmpz_mpoly_ctx_struct,
784    ) -> c_int;
785}
786extern "C" {
787    pub fn fmpz_mpoly_factor_lcc_kaltofen(
788        divs: *mut fmpz_mpoly_struct,
789        lcAf_: *mut fmpz_mpoly_factor_struct,
790        A: *mut fmpz_mpoly_struct,
791        r: mp_limb_signed_t,
792        alpha: *const fmpz,
793        degs: *mut mp_limb_signed_t,
794        uf: *mut fmpz_poly_factor_struct,
795        ctx: *mut fmpz_mpoly_ctx_struct,
796    ) -> c_int;
797}
798extern "C" {
799    pub fn fmpz_mpoly_evaluate_rest_except_one(
800        e: *mut fmpz_poly_struct,
801        A: *mut fmpz_mpoly_struct,
802        alphas: *const fmpz,
803        v: mp_limb_signed_t,
804        ctx: *mut fmpz_mpoly_ctx_struct,
805    ) -> c_int;
806}
807extern "C" {
808    pub fn fmpz_mpoly_compression_do(
809        L: *mut fmpz_mpoly_struct,
810        Lctx: *mut fmpz_mpoly_ctx_struct,
811        Acoeffs: *mut fmpz,
812        Alen: mp_limb_signed_t,
813        M: *mut mpoly_compression_struct,
814    );
815}
816extern "C" {
817    pub fn fmpz_mpoly_compression_undo(
818        A: *mut fmpz_mpoly_struct,
819        Abits: mp_limb_t,
820        Actx: *mut fmpz_mpoly_ctx_struct,
821        L: *mut fmpz_mpoly_struct,
822        Lctx: *mut fmpz_mpoly_ctx_struct,
823        M: *mut mpoly_compression_struct,
824    );
825}