flint_sys/
fq_zech.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_zech.html).
4
5use 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}