1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4use 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}