flint_sys/
fq.rs

1#![allow(non_camel_case_types)]
2
3//! See the [FLINT documentation](http://flintlib.org/doc/fq.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::fmpz_mod::{fmpz_mod_ctx_struct, fmpz_mod_ctx_t};
9use crate::fmpz_mod_mat::fmpz_mod_mat_struct;
10use crate::fmpz_mod_poly::{fmpz_mod_poly_struct, fmpz_mod_poly_t};
11use crate::fmpz_poly::{fmpz_poly_struct, fmpz_poly_t};
12use libc::{c_char, c_int, FILE};
13
14pub type fq_t = fmpz_poly_t;
15pub type fq_struct = fmpz_poly_struct;
16
17#[repr(C)]
18#[derive(Debug, Copy, Clone)]
19pub struct fq_ctx_struct {
20    pub ctxp: fmpz_mod_ctx_t,
21    pub sparse_modulus: c_int,
22    pub is_conway: c_int,
23    pub a: *mut fmpz,
24    pub j: *mut mp_limb_signed_t,
25    pub len: mp_limb_signed_t,
26    pub modulus: fmpz_mod_poly_t,
27    pub inv: fmpz_mod_poly_t,
28    pub var: *mut c_char,
29}
30
31pub type fq_ctx_t = [fq_ctx_struct; 1usize];
32
33extern "C" {
34    pub fn fq_ctx_init(
35        ctx: *mut fq_ctx_struct,
36        p: *const fmpz,
37        d: mp_limb_signed_t,
38        var: *const c_char,
39    );
40    pub fn _fq_ctx_init_conway(
41        ctx: *mut fq_ctx_struct,
42        p: *const fmpz,
43        d: mp_limb_signed_t,
44        var: *const c_char,
45    ) -> c_int;
46    pub fn fq_ctx_init_conway(
47        ctx: *mut fq_ctx_struct,
48        p: *const fmpz,
49        d: mp_limb_signed_t,
50        var: *const c_char,
51    );
52    pub fn fq_ctx_init_modulus(
53        ctx: *mut fq_ctx_struct,
54        modulus: *const fmpz_mod_poly_struct,
55        ctxp: *const fmpz_mod_ctx_struct,
56        var: *const c_char,
57    );
58    pub fn fq_ctx_randtest(ctx: *mut fq_ctx_struct, state: *const flint_rand_s);
59    pub fn fq_ctx_randtest_reducible(ctx: *mut fq_ctx_struct, state: *const flint_rand_s);
60    pub fn fq_ctx_clear(ctx: *mut fq_ctx_struct);
61    pub fn fq_ctx_modulus(ctx: *const fq_ctx_struct) -> *const fmpz_mod_poly_struct;
62    pub fn fq_ctx_degree(ctx: *const fq_ctx_struct) -> mp_limb_signed_t;
63    pub fn fq_ctx_prime(ctx: *const fq_ctx_struct) -> *const fmpz;
64    pub fn fq_ctx_order(f: *mut fmpz, ctx: *const fq_ctx_struct);
65    pub fn fq_ctx_fprint(file: *mut FILE, ctx: *const fq_ctx_struct) -> c_int;
66    pub fn fq_ctx_print(ctx: *const fq_ctx_struct);
67    pub fn fq_init(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
68    pub fn fq_init2(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
69    pub fn fq_clear(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
70    pub fn _fq_sparse_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
71    pub fn _fq_dense_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
72    pub fn _fq_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
73    pub fn fq_reduce(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
74    pub fn fq_add(
75        rop: *mut fmpz_poly_struct,
76        op1: *const fmpz_poly_struct,
77        op2: *const fmpz_poly_struct,
78        ctx: *const fq_ctx_struct,
79    );
80    pub fn fq_sub(
81        rop: *mut fmpz_poly_struct,
82        op1: *const fmpz_poly_struct,
83        op2: *const fmpz_poly_struct,
84        ctx: *const fq_ctx_struct,
85    );
86    pub fn fq_sub_one(
87        rop: *mut fmpz_poly_struct,
88        op1: *const fmpz_poly_struct,
89        ctx: *const fq_ctx_struct,
90    );
91    pub fn fq_neg(
92        rop: *mut fmpz_poly_struct,
93        op1: *const fmpz_poly_struct,
94        ctx: *const fq_ctx_struct,
95    );
96    pub fn fq_mul(
97        rop: *mut fmpz_poly_struct,
98        op1: *const fmpz_poly_struct,
99        op2: *const fmpz_poly_struct,
100        ctx: *const fq_ctx_struct,
101    );
102    pub fn fq_mul_fmpz(
103        rop: *mut fmpz_poly_struct,
104        op: *const fmpz_poly_struct,
105        x: *const fmpz,
106        ctx: *const fq_ctx_struct,
107    );
108    pub fn fq_mul_si(
109        rop: *mut fmpz_poly_struct,
110        op: *const fmpz_poly_struct,
111        x: mp_limb_signed_t,
112        ctx: *const fq_ctx_struct,
113    );
114    pub fn fq_mul_ui(
115        rop: *mut fmpz_poly_struct,
116        op: *const fmpz_poly_struct,
117        x: mp_limb_t,
118        ctx: *const fq_ctx_struct,
119    );
120    pub fn fq_sqr(
121        rop: *mut fmpz_poly_struct,
122        op: *const fmpz_poly_struct,
123        ctx: *const fq_ctx_struct,
124    );
125    pub fn fq_inv(
126        rop: *mut fmpz_poly_struct,
127        op1: *const fmpz_poly_struct,
128        ctx: *const fq_ctx_struct,
129    );
130    pub fn _fq_pow(
131        rop: *mut fmpz,
132        op: *const fmpz,
133        len: mp_limb_signed_t,
134        e: *const fmpz,
135        ctx: *const fq_ctx_struct,
136    );
137    pub fn fq_pow(
138        rop: *mut fmpz_poly_struct,
139        op1: *const fmpz_poly_struct,
140        e: *const fmpz,
141        ctx: *const fq_ctx_struct,
142    );
143    pub fn fq_pow_ui(
144        rop: *mut fmpz_poly_struct,
145        op: *const fmpz_poly_struct,
146        e: mp_limb_t,
147        ctx: *const fq_ctx_struct,
148    );
149    pub fn fq_sqrt(
150        rop: *mut fmpz_poly_struct,
151        op: *const fmpz_poly_struct,
152        ctx: *const fq_ctx_struct,
153    ) -> c_int;
154    pub fn fq_pth_root(
155        rop: *mut fmpz_poly_struct,
156        op1: *const fmpz_poly_struct,
157        ctx: *const fq_ctx_struct,
158    );
159    pub fn fq_is_square(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
160    pub fn fq_randtest(
161        rop: *mut fmpz_poly_struct,
162        state: *const flint_rand_s,
163        ctx: *const fq_ctx_struct,
164    );
165    pub fn fq_randtest_dense(
166        rop: *mut fmpz_poly_struct,
167        state: *const flint_rand_s,
168        ctx: *const fq_ctx_struct,
169    );
170    pub fn fq_randtest_not_zero(
171        rop: *mut fmpz_poly_struct,
172        state: *const flint_rand_s,
173        ctx: *const fq_ctx_struct,
174    );
175    pub fn fq_rand(
176        rop: *mut fmpz_poly_struct,
177        state: *const flint_rand_s,
178        ctx: *const fq_ctx_struct,
179    );
180    pub fn fq_rand_not_zero(
181        rop: *mut fmpz_poly_struct,
182        state: *const flint_rand_s,
183        ctx: *const fq_ctx_struct,
184    );
185    pub fn fq_equal(
186        op1: *const fmpz_poly_struct,
187        op2: *const fmpz_poly_struct,
188        ctx: *const fq_ctx_struct,
189    ) -> c_int;
190    pub fn fq_is_zero(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
191    pub fn fq_is_one(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
192    pub fn fq_set(rop: *mut fmpz_poly_struct, op: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
193    pub fn fq_set_fmpz(rop: *mut fmpz_poly_struct, x: *const fmpz, ctx: *const fq_ctx_struct);
194    pub fn fq_set_ui(rop: *mut fmpz_poly_struct, x: mp_limb_t, ctx: *const fq_ctx_struct);
195    pub fn fq_set_si(rop: *mut fmpz_poly_struct, x: mp_limb_signed_t, ctx: *const fq_ctx_struct);
196    pub fn fq_swap(
197        op1: *mut fmpz_poly_struct,
198        op2: *mut fmpz_poly_struct,
199        ctx: *const fq_ctx_struct,
200    );
201    pub fn fq_zero(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
202    pub fn fq_one(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
203    pub fn fq_gen(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
204    pub fn fq_get_fmpz_poly(
205        a: *mut fmpz_poly_struct,
206        b: *const fmpz_poly_struct,
207        ctx: *const fq_ctx_struct,
208    );
209    pub fn fq_set_fmpz_poly(
210        a: *mut fmpz_poly_struct,
211        b: *const fmpz_poly_struct,
212        ctx: *const fq_ctx_struct,
213    );
214    pub fn fq_get_fmpz_mod_poly(
215        a: *mut fmpz_mod_poly_struct,
216        b: *const fmpz_poly_struct,
217        ctx: *const fq_ctx_struct,
218    );
219    pub fn fq_set_fmpz_mod_poly(
220        a: *mut fmpz_poly_struct,
221        b: *const fmpz_mod_poly_struct,
222        ctx: *const fq_ctx_struct,
223    );
224    pub fn fq_fprint(
225        file: *mut FILE,
226        op: *const fmpz_poly_struct,
227        ctx: *const fq_ctx_struct,
228    ) -> c_int;
229    pub fn fq_print(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
230    pub fn fq_fprint_pretty(
231        file: *mut FILE,
232        op: *const fmpz_poly_struct,
233        ctx: *const fq_ctx_struct,
234    ) -> c_int;
235    pub fn fq_print_pretty(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
236    pub fn fq_get_str(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> *mut c_char;
237    pub fn fq_get_str_pretty(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct)
238        -> *mut c_char;
239    pub fn _fq_trace(
240        rop: *mut fmpz,
241        op: *const fmpz,
242        len: mp_limb_signed_t,
243        ctx: *const fq_ctx_struct,
244    );
245    pub fn fq_trace(rop: *mut fmpz, op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
246    pub fn _fq_frobenius(
247        rop: *mut fmpz,
248        op: *const fmpz,
249        len: mp_limb_signed_t,
250        e: mp_limb_signed_t,
251        ctx: *const fq_ctx_struct,
252    );
253    pub fn fq_frobenius(
254        rop: *mut fmpz_poly_struct,
255        op: *const fmpz_poly_struct,
256        e: mp_limb_signed_t,
257        ctx: *const fq_ctx_struct,
258    );
259    pub fn _fq_norm(
260        rop: *mut fmpz,
261        op: *const fmpz,
262        len: mp_limb_signed_t,
263        ctx: *const fq_ctx_struct,
264    );
265    pub fn fq_norm(rop: *mut fmpz, op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
266    pub fn fq_bit_pack(
267        f: *mut fmpz,
268        op: *const fmpz_poly_struct,
269        bit_size: mp_limb_t,
270        ctx: *const fq_ctx_struct,
271    );
272    pub fn fq_bit_unpack(
273        rop: *mut fmpz_poly_struct,
274        f: *const fmpz,
275        bit_size: mp_limb_t,
276        ctx: *const fq_ctx_struct,
277    );
278    pub fn __fq_ctx_prime(p: *mut fmpz, ctx: *const fq_ctx_struct);
279    pub fn fq_gcdinv(
280        rop: *mut fmpz_poly_struct,
281        inv: *mut fmpz_poly_struct,
282        op: *const fmpz_poly_struct,
283        ctx: *const fq_ctx_struct,
284    );
285    pub fn fq_is_invertible(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
286    pub fn fq_is_invertible_f(
287        rop: *const fmpz_poly_struct,
288        op: *const fmpz_poly_struct,
289        ctx: *const fq_ctx_struct,
290    ) -> c_int;
291    pub fn fq_div(
292        rop: *mut fmpz_poly_struct,
293        op1: *const fmpz_poly_struct,
294        op2: *const fmpz_poly_struct,
295        ctx: *const fq_ctx_struct,
296    );
297    pub fn fq_multiplicative_order(
298        ord: *mut fmpz,
299        op: *const fmpz_poly_struct,
300        ctx: *const fq_ctx_struct,
301    ) -> c_int;
302    pub fn fq_get_fmpz_mod_mat(
303        col: *mut fmpz_mod_mat_struct,
304        a: *const fmpz_poly_struct,
305        ctx: *const fq_ctx_struct,
306    );
307    pub fn fq_set_fmpz_mod_mat(
308        a: *mut fmpz_poly_struct,
309        col: *const fmpz_mod_mat_struct,
310        ctx: *const fq_ctx_struct,
311    );
312    pub fn fq_is_primitive(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
313}