flint_sys/
fmpz_mod_poly_factor.rs

1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4//! *See the [FLINT documentation](http://flintlib.org/doc/fmpz_mod_poly_factor.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpz::fmpz;
9use crate::fmpz_factor::fmpz_factor_struct;
10use crate::fmpz_mod::fmpz_mod_ctx_struct;
11use crate::fmpz_mod_poly::fmpz_mod_poly_struct;
12use libc::{c_int, c_void};
13
14#[repr(C)]
15#[derive(Debug, Copy, Clone)]
16pub struct fmpz_mod_poly_factor_struct {
17    pub poly: *mut fmpz_mod_poly_struct,
18    pub exp: *mut mp_limb_signed_t,
19    pub num: mp_limb_signed_t,
20    pub alloc: mp_limb_signed_t,
21}
22
23pub type fmpz_mod_poly_factor_t = [fmpz_mod_poly_factor_struct; 1usize];
24
25#[repr(C)]
26#[derive(Debug, Copy, Clone)]
27pub struct fmpz_mod_poly_interval_poly_arg_t {
28    pub baby: *mut fmpz_mod_poly_struct,
29    pub res: *mut fmpz_mod_poly_struct,
30    pub H: *mut fmpz_mod_poly_struct,
31    pub v: *mut fmpz_mod_poly_struct,
32    pub vinv: *mut fmpz_mod_poly_struct,
33    pub ctx: *const fmpz_mod_ctx_struct,
34    pub tmp: *mut fmpz,
35    pub m: mp_limb_signed_t,
36}
37
38extern "C" {
39    pub fn fmpz_mod_poly_factor_init(
40        fac: *mut fmpz_mod_poly_factor_struct,
41        ctx: *const fmpz_mod_ctx_struct,
42    );
43    pub fn fmpz_mod_poly_factor_clear(
44        fac: *mut fmpz_mod_poly_factor_struct,
45        ctx: *const fmpz_mod_ctx_struct,
46    );
47    pub fn fmpz_mod_poly_factor_realloc(
48        fac: *mut fmpz_mod_poly_factor_struct,
49        alloc: mp_limb_signed_t,
50        ctx: *const fmpz_mod_ctx_struct,
51    );
52    pub fn fmpz_mod_poly_factor_fit_length(
53        fac: *mut fmpz_mod_poly_factor_struct,
54        len: mp_limb_signed_t,
55        ctx: *const fmpz_mod_ctx_struct,
56    );
57    pub fn fmpz_mod_poly_factor_set(
58        res: *mut fmpz_mod_poly_factor_struct,
59        fac: *const fmpz_mod_poly_factor_struct,
60        ctx: *const fmpz_mod_ctx_struct,
61    );
62    pub fn fmpz_mod_poly_factor_swap(
63        a: *mut fmpz_mod_poly_factor_struct,
64        b: *mut fmpz_mod_poly_factor_struct,
65        ctx: *const fmpz_mod_ctx_struct,
66    );
67    pub fn fmpz_mod_poly_factor_insert(
68        fac: *mut fmpz_mod_poly_factor_struct,
69        poly: *const fmpz_mod_poly_struct,
70        exp: mp_limb_signed_t,
71        ctx: *const fmpz_mod_ctx_struct,
72    );
73    pub fn fmpz_mod_poly_factor_print(
74        fac: *const fmpz_mod_poly_factor_struct,
75        ctx: *const fmpz_mod_ctx_struct,
76    );
77    pub fn fmpz_mod_poly_factor_concat(
78        res: *mut fmpz_mod_poly_factor_struct,
79        fac: *const fmpz_mod_poly_factor_struct,
80        ctx: *const fmpz_mod_ctx_struct,
81    );
82    pub fn fmpz_mod_poly_factor_pow(
83        fac: *mut fmpz_mod_poly_factor_struct,
84        exp: mp_limb_signed_t,
85        ctx: *const fmpz_mod_ctx_struct,
86    );
87    pub fn fmpz_mod_poly_is_irreducible(
88        f: *const fmpz_mod_poly_struct,
89        ctx: *const fmpz_mod_ctx_struct,
90    ) -> c_int;
91    pub fn fmpz_mod_poly_is_irreducible_ddf(
92        f: *const fmpz_mod_poly_struct,
93        ctx: *const fmpz_mod_ctx_struct,
94    ) -> c_int;
95    pub fn fmpz_mod_poly_is_irreducible_rabin(
96        f: *const fmpz_mod_poly_struct,
97        ctx: *const fmpz_mod_ctx_struct,
98    ) -> c_int;
99    pub fn fmpz_mod_poly_is_irreducible_rabin_f(
100        fac: *const fmpz,
101        f: *const fmpz_mod_poly_struct,
102        ctx: *const fmpz_mod_ctx_struct,
103    ) -> c_int;
104    pub fn _fmpz_mod_poly_is_squarefree(
105        f: *const fmpz,
106        len: mp_limb_signed_t,
107        p: *const fmpz,
108    ) -> c_int;
109    pub fn _fmpz_mod_poly_is_squarefree_f(
110        fac: *const fmpz,
111        f: *const fmpz,
112        len: mp_limb_signed_t,
113        p: *const fmpz,
114    ) -> c_int;
115    pub fn fmpz_mod_poly_is_squarefree(
116        f: *const fmpz_mod_poly_struct,
117        ctx: *const fmpz_mod_ctx_struct,
118    ) -> c_int;
119    pub fn fmpz_mod_poly_is_squarefree_f(
120        fac: *const fmpz,
121        f: *const fmpz_mod_poly_struct,
122        ctx: *const fmpz_mod_ctx_struct,
123    ) -> c_int;
124    pub fn fmpz_mod_poly_factor_equal_deg_prob(
125        factor: *mut fmpz_mod_poly_struct,
126        state: *const flint_rand_s,
127        pol: *const fmpz_mod_poly_struct,
128        d: mp_limb_signed_t,
129        ctx: *const fmpz_mod_ctx_struct,
130    ) -> c_int;
131    pub fn fmpz_mod_poly_factor_equal_deg_with_frob(
132        factors: *mut fmpz_mod_poly_factor_struct,
133        f: *const fmpz_mod_poly_struct,
134        d: mp_limb_signed_t,
135        frob: *const fmpz_mod_poly_struct,
136        ctx: *const fmpz_mod_ctx_struct,
137    );
138    pub fn fmpz_mod_poly_factor_equal_deg(
139        factors: *mut fmpz_mod_poly_factor_struct,
140        pol: *const fmpz_mod_poly_struct,
141        d: mp_limb_signed_t,
142        ctx: *const fmpz_mod_ctx_struct,
143    );
144    pub fn fmpz_mod_poly_factor_distinct_deg_with_frob(
145        res: *mut fmpz_mod_poly_factor_struct,
146        poly: *const fmpz_mod_poly_struct,
147        polyinv: *const fmpz_mod_poly_struct,
148        frob: *const fmpz_mod_poly_struct,
149        ctx: *const fmpz_mod_ctx_struct,
150    );
151    pub fn fmpz_mod_poly_factor_distinct_deg(
152        res: *mut fmpz_mod_poly_factor_struct,
153        poly: *const fmpz_mod_poly_struct,
154        degs: *const *const mp_limb_signed_t,
155        ctx: *const fmpz_mod_ctx_struct,
156    );
157    pub fn fmpz_mod_poly_factor_distinct_deg_threaded_with_frob(
158        res: *mut fmpz_mod_poly_factor_struct,
159        poly: *const fmpz_mod_poly_struct,
160        polyinv: *const fmpz_mod_poly_struct,
161        frob: *const fmpz_mod_poly_struct,
162        ctx: *const fmpz_mod_ctx_struct,
163    );
164    pub fn fmpz_mod_poly_factor_distinct_deg_threaded(
165        res: *mut fmpz_mod_poly_factor_struct,
166        poly: *const fmpz_mod_poly_struct,
167        degs: *const *const mp_limb_signed_t,
168        ctx: *const fmpz_mod_ctx_struct,
169    );
170    pub fn fmpz_mod_poly_factor_squarefree(
171        res: *mut fmpz_mod_poly_factor_struct,
172        f: *const fmpz_mod_poly_struct,
173        ctx: *const fmpz_mod_ctx_struct,
174    );
175    pub fn fmpz_mod_poly_factor(
176        res: *mut fmpz_mod_poly_factor_struct,
177        f: *const fmpz_mod_poly_struct,
178        ctx: *const fmpz_mod_ctx_struct,
179    );
180    pub fn fmpz_mod_poly_factor_cantor_zassenhaus(
181        res: *mut fmpz_mod_poly_factor_struct,
182        f: *const fmpz_mod_poly_struct,
183        ctx: *const fmpz_mod_ctx_struct,
184    );
185    pub fn fmpz_mod_poly_factor_kaltofen_shoup(
186        res: *mut fmpz_mod_poly_factor_struct,
187        poly: *const fmpz_mod_poly_struct,
188        ctx: *const fmpz_mod_ctx_struct,
189    );
190    pub fn fmpz_mod_poly_factor_berlekamp(
191        factors: *mut fmpz_mod_poly_factor_struct,
192        f: *const fmpz_mod_poly_struct,
193        ctx: *const fmpz_mod_ctx_struct,
194    );
195    pub fn _fmpz_mod_poly_interval_poly_worker(arg_ptr: *mut c_void);
196    pub fn fmpz_mod_poly_roots(
197        r: *mut fmpz_mod_poly_factor_struct,
198        f: *const fmpz_mod_poly_struct,
199        with_multiplicity: c_int,
200        ctx: *const fmpz_mod_ctx_struct,
201    );
202    pub fn fmpz_mod_poly_roots_factored(
203        r: *mut fmpz_mod_poly_factor_struct,
204        f: *const fmpz_mod_poly_struct,
205        with_multiplicity: c_int,
206        n: *const fmpz_factor_struct,
207        ctx: *const fmpz_mod_ctx_struct,
208    ) -> c_int;
209    pub fn fmpz_mod_poly_factor_get_fmpz_mod_poly(
210        z: *mut fmpz_mod_poly_struct,
211        fac: *const fmpz_mod_poly_factor_struct,
212        i: mp_limb_signed_t,
213        ctx: *const fmpz_mod_ctx_struct,
214    );
215}