flint_sys/
fmpz_poly_factor.rs

1#![allow(non_camel_case_types)]
2
3//! See the [FLINT documentation](http://flintlib.org/doc/fmpz_poly_factor.html).
4
5use crate::deps::*;
6use crate::fmpz::fmpz;
7use crate::fmpz_mat::fmpz_mat_struct;
8use crate::fmpz_poly::fmpz_poly_struct;
9use libc::{c_int, c_uchar};
10
11#[repr(C)]
12#[derive(Debug, Copy, Clone)]
13pub struct fmpz_poly_factor_struct {
14    pub c: fmpz,
15    pub p: *mut fmpz_poly_struct,
16    pub exp: *mut mp_limb_signed_t,
17    pub num: mp_limb_signed_t,
18    pub alloc: mp_limb_signed_t,
19}
20
21#[repr(C)]
22#[derive(Debug, Copy, Clone)]
23pub struct zassenhaus_prune_struct {
24    pub deg: mp_limb_signed_t,
25    pub pos_degs: *mut c_uchar,
26    pub new_length: mp_limb_signed_t,
27    pub new_total: mp_limb_signed_t,
28    pub new_degs: *mut mp_limb_signed_t,
29    pub alloc: mp_limb_signed_t,
30}
31
32pub type zassenhaus_prune_t = [zassenhaus_prune_struct; 1usize];
33
34extern "C" {
35    pub fn fmpz_poly_factor_init(fac: *mut fmpz_poly_factor_struct);
36    pub fn fmpz_poly_factor_init2(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
37    pub fn fmpz_poly_factor_realloc(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
38    pub fn fmpz_poly_factor_fit_length(fac: *mut fmpz_poly_factor_struct, len: mp_limb_signed_t);
39    pub fn fmpz_poly_factor_clear(fac: *mut fmpz_poly_factor_struct);
40    pub fn fmpz_poly_factor_set(
41        res: *mut fmpz_poly_factor_struct,
42        fac: *const fmpz_poly_factor_struct,
43    );
44    pub fn fmpz_poly_factor_insert(
45        fac: *mut fmpz_poly_factor_struct,
46        p: *const fmpz_poly_struct,
47        exp: mp_limb_signed_t,
48    );
49    pub fn fmpz_poly_factor_concat(
50        res: *mut fmpz_poly_factor_struct,
51        fac: *const fmpz_poly_factor_struct,
52    );
53    pub fn fmpz_poly_factor_print(fac: *const fmpz_poly_factor_struct);
54    pub fn fmpz_poly_factor_zassenhaus_recombination(
55        final_fac: *mut fmpz_poly_factor_struct,
56        lifted_fac: *const fmpz_poly_factor_struct,
57        F: *const fmpz_poly_struct,
58        P: *const fmpz,
59        exp: mp_limb_signed_t,
60    );
61    pub fn fmpz_poly_factor_squarefree(
62        fac: *mut fmpz_poly_factor_struct,
63        F: *const fmpz_poly_struct,
64    );
65    pub fn fmpz_poly_factor_mignotte(B: *mut fmpz, f: *const fmpz_poly_struct);
66    pub fn _fmpz_poly_factor_zassenhaus(
67        final_fac: *mut fmpz_poly_factor_struct,
68        exp: mp_limb_signed_t,
69        f: *const fmpz_poly_struct,
70        cutoff: mp_limb_signed_t,
71        use_van_hoeij: c_int,
72    );
73    pub fn fmpz_poly_factor_zassenhaus(
74        fac: *mut fmpz_poly_factor_struct,
75        G: *const fmpz_poly_struct,
76    );
77    pub fn _fmpz_poly_factor_quadratic(
78        fac: *mut fmpz_poly_factor_struct,
79        f: *const fmpz_poly_struct,
80        exp: mp_limb_signed_t,
81    );
82    pub fn _fmpz_poly_factor_cubic(
83        fac: *mut fmpz_poly_factor_struct,
84        f: *const fmpz_poly_struct,
85        exp: mp_limb_signed_t,
86    );
87    pub fn _fmpz_poly_factor_CLD_mat(
88        res: *mut fmpz_mat_struct,
89        f: *const fmpz_poly_struct,
90        lifted_fac: *const fmpz_poly_factor_struct,
91        P: *const fmpz,
92        k: mp_limb_t,
93    ) -> mp_limb_signed_t;
94    pub fn fmpz_poly_factor_van_hoeij_check_if_solved(
95        M: *const fmpz_mat_struct,
96        final_fac: *const fmpz_poly_factor_struct,
97        lifted_fac: *const fmpz_poly_factor_struct,
98        f: *const fmpz_poly_struct,
99        P: *const fmpz,
100        exp: mp_limb_signed_t,
101        lc: *const fmpz,
102    ) -> c_int;
103    /*
104    pub fn fmpz_poly_factor_van_hoeij(
105        final_fac: *mut fmpz_poly_factor_struct,
106        fac: *const nmod_poly_factor_struct,
107        f: *const fmpz_poly_struct,
108        exp: mp_limb_signed_t,
109        p: mp_limb_t,
110    );*/
111    pub fn fmpz_poly_factor(fac: *mut fmpz_poly_factor_struct, G: *const fmpz_poly_struct);
112    pub fn fmpz_poly_factor_get_fmpz_poly(
113        z: *mut fmpz_poly_struct,
114        F: *const fmpz_poly_factor_struct,
115        i: mp_limb_signed_t,
116    );
117    pub fn fmpz_poly_factor_get_fmpz(z: *mut fmpz, F: *const fmpz_poly_factor_struct);
118    pub fn zassenhaus_subset_first(
119        s: *mut mp_limb_signed_t,
120        r: mp_limb_signed_t,
121        m: mp_limb_signed_t,
122    );
123    pub fn zassenhaus_subset_next(s: *mut mp_limb_signed_t, r: mp_limb_signed_t) -> c_int;
124    pub fn zassenhaus_subset_next_disjoint(
125        s: *mut mp_limb_signed_t,
126        r: mp_limb_signed_t,
127    ) -> mp_limb_signed_t;
128    pub fn zassenhaus_prune_init(Z: *mut zassenhaus_prune_struct);
129    pub fn zassenhaus_prune_clear(Z: *mut zassenhaus_prune_struct);
130    pub fn zassenhaus_prune_set_degree(Z: *mut zassenhaus_prune_struct, d: mp_limb_signed_t);
131    pub fn zassenhaus_prune_start_add_factors(Z: *mut zassenhaus_prune_struct);
132    pub fn zassenhaus_prune_add_factor(
133        Z: *mut zassenhaus_prune_struct,
134        deg: mp_limb_signed_t,
135        exp: mp_limb_signed_t,
136    );
137    pub fn zassenhaus_prune_end_add_factors(Z: *mut zassenhaus_prune_struct);
138    pub fn zassenhaus_prune_must_be_irreducible(Z: *mut zassenhaus_prune_struct) -> c_int;
139    pub fn zassenhaus_prune_degree_is_possible(
140        Z: *mut zassenhaus_prune_struct,
141        d: mp_limb_signed_t,
142    ) -> c_int;
143    pub fn fmpz_poly_factor_zassenhaus_recombination_with_prune(
144        final_fac: *mut fmpz_poly_factor_struct,
145        lifted_fac: *mut fmpz_poly_factor_struct,
146        F: *mut fmpz_poly_struct,
147        P: *mut fmpz,
148        exp: mp_limb_signed_t,
149        Z: *mut zassenhaus_prune_struct,
150    );
151}