1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::fq_nmod::fq_nmod_ctx_struct;
9use crate::nmod_mat::nmod_mat_struct;
10use crate::nmod_poly::nmod_poly_struct;
11use libc::{c_char, c_int, FILE};
12
13#[repr(C)]
14#[derive(Debug, Copy, Clone, Hash)]
15pub struct fq_zech_struct {
16 pub value: mp_limb_t,
17}
18
19pub type fq_zech_t = [fq_zech_struct; 1usize];
20
21#[repr(C)]
22#[derive(Debug, Copy, Clone)]
23pub struct fq_zech_ctx_struct {
24 pub qm1: mp_limb_t,
25 pub qm1o2: mp_limb_t,
26 pub qm1opm1: mp_limb_t,
27 pub p: mp_limb_t,
28 pub ppre: f64,
29 pub prime_root: mp_limb_t,
30 pub zech_log_table: *mut mp_limb_t,
31 pub prime_field_table: *mut mp_limb_t,
32 pub eval_table: *mut mp_limb_t,
33 pub fq_nmod_ctx: *mut fq_nmod_ctx_struct,
34 pub owns_fq_nmod_ctx: c_int,
35 pub is_conway: c_int,
36}
37
38pub type fq_zech_ctx_t = [fq_zech_ctx_struct; 1usize];
39
40extern "C" {
41 pub fn fq_zech_ctx_init(
42 ctx: *mut fq_zech_ctx_struct,
43 p: *mut fmpz,
44 d: mp_limb_signed_t,
45 var: *const c_char,
46 );
47 pub fn fq_zech_ctx_init_fq_nmod_ctx(
48 ctx: *mut fq_zech_ctx_struct,
49 ctxn: *mut fq_nmod_ctx_struct,
50 );
51 pub fn _fq_zech_ctx_init_conway(
52 ctx: *mut fq_zech_ctx_struct,
53 p: *mut fmpz,
54 d: mp_limb_signed_t,
55 var: *const c_char,
56 ) -> c_int;
57 pub fn fq_zech_ctx_init_conway(
58 ctx: *mut fq_zech_ctx_struct,
59 p: *mut fmpz,
60 d: mp_limb_signed_t,
61 var: *const c_char,
62 );
63 pub fn fq_zech_ctx_init_random(
64 ctx: *mut fq_zech_ctx_struct,
65 p: *mut fmpz,
66 d: mp_limb_signed_t,
67 var: *const c_char,
68 );
69 pub fn fq_zech_ctx_init_modulus(
70 ctx: *mut fq_zech_ctx_struct,
71 modulus: *mut nmod_poly_struct,
72 var: *const c_char,
73 );
74 pub fn fq_zech_ctx_randtest(ctx: *mut fq_zech_ctx_struct, state: *mut flint_rand_s);
75 pub fn fq_zech_ctx_randtest_reducible(ctx: *mut fq_zech_ctx_struct, state: *mut flint_rand_s);
76 pub fn fq_zech_ctx_clear(ctx: *mut fq_zech_ctx_struct);
77 pub fn fq_zech_ctx_modulus(ctx: *mut fq_zech_ctx_struct) -> *const nmod_poly_struct;
78 pub fn fq_zech_ctx_degree(ctx: *mut fq_zech_ctx_struct) -> mp_limb_signed_t;
79 pub fn fq_zech_ctx_order(f: *mut fmpz, ctx: *mut fq_zech_ctx_struct);
80 pub fn fq_zech_ctx_order_ui(ctx: *mut fq_zech_ctx_struct) -> mp_limb_t;
81 pub fn fq_zech_ctx_fprint(file: *mut FILE, ctx: *mut fq_zech_ctx_struct) -> c_int;
82 pub fn fq_zech_ctx_print(ctx: *mut fq_zech_ctx_struct);
83 pub fn fq_zech_init(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
84 pub fn fq_zech_init2(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
85 pub fn fq_zech_clear(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
86 pub fn fq_zech_reduce(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
87 pub fn fq_zech_add(
88 rop: *mut fq_zech_struct,
89 op1: *mut fq_zech_struct,
90 op2: *mut fq_zech_struct,
91 ctx: *mut fq_zech_ctx_struct,
92 );
93 pub fn fq_zech_sub(
94 rop: *mut fq_zech_struct,
95 op1: *mut fq_zech_struct,
96 op2: *mut fq_zech_struct,
97 ctx: *mut fq_zech_ctx_struct,
98 );
99 pub fn fq_zech_sub_one(
100 rop: *mut fq_zech_struct,
101 op1: *mut fq_zech_struct,
102 ctx: *mut fq_zech_ctx_struct,
103 );
104 pub fn fq_zech_neg(
105 rop: *mut fq_zech_struct,
106 op1: *mut fq_zech_struct,
107 ctx: *mut fq_zech_ctx_struct,
108 );
109 pub fn fq_zech_mul(
110 rop: *mut fq_zech_struct,
111 op1: *mut fq_zech_struct,
112 op2: *mut fq_zech_struct,
113 ctx: *mut fq_zech_ctx_struct,
114 );
115 pub fn fq_zech_mul_fmpz(
116 rop: *mut fq_zech_struct,
117 op: *mut fq_zech_struct,
118 x: *mut fmpz,
119 ctx: *mut fq_zech_ctx_struct,
120 );
121 pub fn fq_zech_mul_si(
122 rop: *mut fq_zech_struct,
123 op: *mut fq_zech_struct,
124 x: mp_limb_signed_t,
125 ctx: *mut fq_zech_ctx_struct,
126 );
127 pub fn fq_zech_mul_ui(
128 rop: *mut fq_zech_struct,
129 op: *mut fq_zech_struct,
130 x: mp_limb_t,
131 ctx: *mut fq_zech_ctx_struct,
132 );
133 pub fn fq_zech_sqr(
134 rop: *mut fq_zech_struct,
135 op: *mut fq_zech_struct,
136 ctx: *mut fq_zech_ctx_struct,
137 );
138 pub fn fq_zech_inv(
139 rop: *mut fq_zech_struct,
140 op1: *mut fq_zech_struct,
141 ctx: *mut fq_zech_ctx_struct,
142 );
143 pub fn _fq_zech_pow(
144 rop: *mut fmpz,
145 op: *const fmpz,
146 len: mp_limb_signed_t,
147 e: *mut fmpz,
148 a: *const fmpz,
149 j: *const mp_limb_signed_t,
150 lena: mp_limb_signed_t,
151 p: *mut fmpz,
152 );
153 pub fn fq_zech_pow(
154 rop: *mut fq_zech_struct,
155 op1: *mut fq_zech_struct,
156 e: *mut fmpz,
157 ctx: *mut fq_zech_ctx_struct,
158 );
159 pub fn fq_zech_pow_ui(
160 rop: *mut fq_zech_struct,
161 op1: *mut fq_zech_struct,
162 e: mp_limb_t,
163 ctx: *mut fq_zech_ctx_struct,
164 );
165 pub fn fq_zech_sqrt(
166 rop: *mut fq_zech_struct,
167 op1: *mut fq_zech_struct,
168 ctx: *mut fq_zech_ctx_struct,
169 ) -> c_int;
170 pub fn fq_zech_pth_root(
171 rop: *mut fq_zech_struct,
172 op1: *mut fq_zech_struct,
173 ctx: *mut fq_zech_ctx_struct,
174 );
175 pub fn fq_zech_is_square(op1: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> c_int;
176 pub fn fq_zech_randtest(
177 rop: *mut fq_zech_struct,
178 state: *mut flint_rand_s,
179 ctx: *mut fq_zech_ctx_struct,
180 );
181 pub fn fq_zech_randtest_not_zero(
182 rop: *mut fq_zech_struct,
183 state: *mut flint_rand_s,
184 ctx: *mut fq_zech_ctx_struct,
185 );
186 pub fn fq_zech_rand(
187 rop: *mut fq_zech_struct,
188 state: *mut flint_rand_s,
189 ctx: *mut fq_zech_ctx_struct,
190 );
191 pub fn fq_zech_rand_not_zero(
192 rop: *mut fq_zech_struct,
193 state: *mut flint_rand_s,
194 ctx: *mut fq_zech_ctx_struct,
195 );
196 pub fn fq_zech_equal(
197 op1: *mut fq_zech_struct,
198 op2: *mut fq_zech_struct,
199 ctx: *mut fq_zech_ctx_struct,
200 ) -> c_int;
201 pub fn fq_zech_is_zero(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> c_int;
202 pub fn fq_zech_is_one(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> c_int;
203 pub fn fq_zech_set(
204 rop: *mut fq_zech_struct,
205 op: *mut fq_zech_struct,
206 ctx: *mut fq_zech_ctx_struct,
207 );
208 pub fn fq_zech_set_fmpz(rop: *mut fq_zech_struct, x: *mut fmpz, ctx: *mut fq_zech_ctx_struct);
209 pub fn fq_zech_set_si(
210 rop: *mut fq_zech_struct,
211 x: mp_limb_signed_t,
212 ctx: *mut fq_zech_ctx_struct,
213 );
214 pub fn fq_zech_set_ui(rop: *mut fq_zech_struct, x: mp_limb_t, ctx: *mut fq_zech_ctx_struct);
215 pub fn fq_zech_swap(
216 op1: *mut fq_zech_struct,
217 op2: *mut fq_zech_struct,
218 ctx: *mut fq_zech_ctx_struct,
219 );
220 pub fn fq_zech_zero(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
221 pub fn fq_zech_one(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
222 pub fn fq_zech_gen(rop: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
223 pub fn fq_zech_set_fq_nmod(
224 rop: *mut fq_zech_struct,
225 op: *mut nmod_poly_struct,
226 ctx: *mut fq_zech_ctx_struct,
227 );
228 pub fn fq_zech_get_fq_nmod(
229 rop: *mut nmod_poly_struct,
230 op: *mut fq_zech_struct,
231 ctx: *mut fq_zech_ctx_struct,
232 );
233 pub fn fq_zech_get_nmod_poly(
234 a: *mut nmod_poly_struct,
235 b: *mut fq_zech_struct,
236 ctx: *mut fq_zech_ctx_struct,
237 );
238 pub fn fq_zech_set_nmod_poly(
239 a: *mut fq_zech_struct,
240 b: *mut nmod_poly_struct,
241 ctx: *mut fq_zech_ctx_struct,
242 );
243 pub fn fq_zech_fprint_pretty(
244 file: *mut FILE,
245 op: *mut fq_zech_struct,
246 ctx: *mut fq_zech_ctx_struct,
247 ) -> c_int;
248 pub fn fq_zech_print_pretty(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
249 pub fn fq_zech_fprint(
250 file: *mut FILE,
251 op: *mut fq_zech_struct,
252 ctx: *mut fq_zech_ctx_struct,
253 ) -> c_int;
254 pub fn fq_zech_print(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
255 pub fn fq_zech_get_str(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> *mut c_char;
256 pub fn fq_zech_get_str_pretty(
257 op: *mut fq_zech_struct,
258 ctx: *mut fq_zech_ctx_struct,
259 ) -> *mut c_char;
260 pub fn fq_zech_trace(rop: *mut fmpz, op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
261 pub fn fq_zech_frobenius(
262 rop: *mut fq_zech_struct,
263 op: *mut fq_zech_struct,
264 e: mp_limb_signed_t,
265 ctx: *mut fq_zech_ctx_struct,
266 );
267 pub fn fq_zech_norm(rop: *mut fmpz, op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct);
268 pub fn fq_zech_bit_pack(
269 f: *mut fmpz,
270 op: *mut fq_zech_struct,
271 bit_size: mp_limb_t,
272 ctx: *mut fq_zech_ctx_struct,
273 );
274 pub fn fq_zech_bit_unpack(
275 rop: *mut fq_zech_struct,
276 f: *mut fmpz,
277 bit_size: mp_limb_t,
278 ctx: *mut fq_zech_ctx_struct,
279 );
280 pub fn __fq_zech_ctx_prime(p: *mut fmpz, ctx: *mut fq_zech_ctx_struct);
281 pub fn fq_zech_gcdinv(
282 rop: *mut fq_zech_struct,
283 inv: *mut fq_zech_struct,
284 op: *mut fq_zech_struct,
285 ctx: *mut fq_zech_ctx_struct,
286 );
287 pub fn fq_zech_is_invertible(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> c_int;
288 pub fn fq_zech_is_invertible_f(
289 rop: *mut fq_zech_struct,
290 op: *mut fq_zech_struct,
291 ctx: *mut fq_zech_ctx_struct,
292 ) -> c_int;
293 pub fn fq_zech_div(
294 rop: *mut fq_zech_struct,
295 op1: *mut fq_zech_struct,
296 op2: *mut fq_zech_struct,
297 ctx: *mut fq_zech_ctx_struct,
298 );
299 pub fn fq_zech_multiplicative_order(
300 ord: *mut fmpz,
301 op: *mut fq_zech_struct,
302 ctx: *mut fq_zech_ctx_struct,
303 ) -> c_int;
304 pub fn fq_zech_get_nmod_mat(
305 col: *mut nmod_mat_struct,
306 a: *mut fq_zech_struct,
307 ctx: *mut fq_zech_ctx_struct,
308 );
309 pub fn fq_zech_set_nmod_mat(
310 a: *mut fq_zech_struct,
311 col: *mut nmod_mat_struct,
312 ctx: *mut fq_zech_ctx_struct,
313 );
314 pub fn fq_zech_is_primitive(op: *mut fq_zech_struct, ctx: *mut fq_zech_ctx_struct) -> c_int;
315 pub fn fq_zech_embed_gens(
316 gen_sub: *mut fq_zech_struct,
317 gen_sup: *mut fq_zech_struct,
318 minpoly: *mut nmod_poly_struct,
319 sub_ctx: *mut fq_zech_ctx_struct,
320 sup_ctx: *mut fq_zech_ctx_struct,
321 );
322 pub fn _fq_zech_embed_gens_naive(
323 gen_sub: *mut fq_zech_struct,
324 gen_sup: *mut fq_zech_struct,
325 minpoly: *mut nmod_poly_struct,
326 sub_ctx: *mut fq_zech_ctx_struct,
327 sup_ctx: *mut fq_zech_ctx_struct,
328 );
329 pub fn _fq_zech_embed_gens_allombert(
330 gen_sub: *mut fq_zech_struct,
331 gen_sup: *mut fq_zech_struct,
332 minpoly: *mut nmod_poly_struct,
333 sub_ctx: *mut fq_zech_ctx_struct,
334 sup_ctx: *mut fq_zech_ctx_struct,
335 );
336 pub fn fq_zech_embed_matrices(
337 embed: *mut nmod_mat_struct,
338 project: *mut nmod_mat_struct,
339 gen_sub: *mut fq_zech_struct,
340 sub_ctx: *mut fq_zech_ctx_struct,
341 gen_sup: *mut fq_zech_struct,
342 sup_ctx: *mut fq_zech_ctx_struct,
343 gen_minpoly: *mut nmod_poly_struct,
344 );
345 pub fn fq_zech_embed_trace_matrix(
346 res: *mut nmod_mat_struct,
347 basis: *mut nmod_mat_struct,
348 sub_ctx: *mut fq_zech_ctx_struct,
349 sup_ctx: *mut fq_zech_ctx_struct,
350 );
351 pub fn fq_zech_embed_composition_matrix_sub(
352 matrix: *mut nmod_mat_struct,
353 gen: *mut fq_zech_struct,
354 ctx: *mut fq_zech_ctx_struct,
355 trunc: mp_limb_signed_t,
356 );
357 pub fn fq_zech_embed_composition_matrix(
358 matrix: *mut nmod_mat_struct,
359 gen: *mut fq_zech_struct,
360 ctx: *mut fq_zech_ctx_struct,
361 );
362 pub fn fq_zech_embed_mul_matrix(
363 matrix: *mut nmod_mat_struct,
364 gen: *mut fq_zech_struct,
365 ctx: *mut fq_zech_ctx_struct,
366 );
367 pub fn fq_zech_embed_mono_to_dual_matrix(
368 res: *mut nmod_mat_struct,
369 ctx: *mut fq_zech_ctx_struct,
370 );
371 pub fn fq_zech_embed_dual_to_mono_matrix(
372 res: *mut nmod_mat_struct,
373 ctx: *mut fq_zech_ctx_struct,
374 );
375 pub fn fq_zech_modulus_pow_series_inv(
376 res: *mut nmod_poly_struct,
377 ctx: *mut fq_zech_ctx_struct,
378 trunc: mp_limb_signed_t,
379 );
380 pub fn fq_zech_modulus_derivative_inv(
381 m_prime: *mut fq_zech_struct,
382 m_prime_inv: *mut fq_zech_struct,
383 ctx: *mut fq_zech_ctx_struct,
384 );
385}