flint_sys/
fq_nmod.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_nmod.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::nmod_mat::nmod_mat_struct;
9use crate::nmod_poly::{nmod_poly_struct, nmod_poly_t};
10use crate::nmod_vec::nmod_t;
11use libc::{c_char, c_int, FILE};
12
13pub type fq_nmod_t = nmod_poly_t;
14pub type fq_nmod_struct = nmod_poly_struct;
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone, Hash)]
18pub struct fq_nmod_ctx_struct {
19    pub p: fmpz,
20    pub mod_: nmod_t,
21    pub sparse_modulus: c_int,
22    pub is_conway: c_int,
23    pub a: *mut mp_limb_t,
24    pub j: *mut mp_limb_signed_t,
25    pub len: mp_limb_signed_t,
26    pub modulus: nmod_poly_t,
27    pub inv: nmod_poly_t,
28    pub var: *mut c_char,
29}
30
31pub type fq_nmod_ctx_t = [fq_nmod_ctx_struct; 1usize];
32
33extern "C" {
34    pub fn fq_nmod_ctx_init(
35        ctx: *mut fq_nmod_ctx_struct,
36        p: *mut fmpz,
37        d: mp_limb_signed_t,
38        var: *const c_char,
39    );
40    pub fn _fq_nmod_ctx_init_conway(
41        ctx: *mut fq_nmod_ctx_struct,
42        p: *mut fmpz,
43        d: mp_limb_signed_t,
44        var: *const c_char,
45    ) -> c_int;
46    pub fn fq_nmod_ctx_init_conway(
47        ctx: *mut fq_nmod_ctx_struct,
48        p: *mut fmpz,
49        d: mp_limb_signed_t,
50        var: *const c_char,
51    );
52    pub fn fq_nmod_ctx_init_modulus(
53        ctx: *mut fq_nmod_ctx_struct,
54        modulus: *mut nmod_poly_struct,
55        var: *const c_char,
56    );
57    pub fn fq_nmod_ctx_randtest(ctx: *mut fq_nmod_ctx_struct, state: *mut flint_rand_s);
58    pub fn fq_nmod_ctx_randtest_reducible(ctx: *mut fq_nmod_ctx_struct, state: *mut flint_rand_s);
59    pub fn fq_nmod_ctx_clear(ctx: *mut fq_nmod_ctx_struct);
60    pub fn fq_nmod_ctx_modulus(ctx: *mut fq_nmod_ctx_struct) -> *const nmod_poly_struct;
61    pub fn fq_nmod_ctx_degree(ctx: *mut fq_nmod_ctx_struct) -> mp_limb_signed_t;
62    pub fn fq_nmod_ctx_order(f: *mut fmpz, ctx: *mut fq_nmod_ctx_struct);
63    pub fn fq_nmod_ctx_fprint(file: *mut FILE, ctx: *mut fq_nmod_ctx_struct) -> c_int;
64    pub fn fq_nmod_ctx_print(ctx: *mut fq_nmod_ctx_struct);
65    pub fn fq_nmod_init(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
66    pub fn fq_nmod_init2(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
67    pub fn fq_nmod_clear(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
68    pub fn _fq_nmod_sparse_reduce(
69        R: *mut mp_limb_t,
70        lenR: mp_limb_signed_t,
71        ctx: *mut fq_nmod_ctx_struct,
72    );
73    pub fn _fq_nmod_dense_reduce(
74        R: *mut mp_limb_t,
75        lenR: mp_limb_signed_t,
76        ctx: *mut fq_nmod_ctx_struct,
77    );
78    pub fn _fq_nmod_reduce(R: *mut mp_limb_t, lenR: mp_limb_signed_t, ctx: *mut fq_nmod_ctx_struct);
79    pub fn fq_nmod_reduce(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
80    pub fn fq_nmod_add(
81        rop: *mut nmod_poly_struct,
82        op1: *mut nmod_poly_struct,
83        op2: *mut nmod_poly_struct,
84        ctx: *mut fq_nmod_ctx_struct,
85    );
86    pub fn fq_nmod_sub(
87        rop: *mut nmod_poly_struct,
88        op1: *mut nmod_poly_struct,
89        op2: *mut nmod_poly_struct,
90        ctx: *mut fq_nmod_ctx_struct,
91    );
92    pub fn fq_nmod_sub_one(
93        rop: *mut nmod_poly_struct,
94        op1: *mut nmod_poly_struct,
95        ctx: *mut fq_nmod_ctx_struct,
96    );
97    pub fn fq_nmod_neg(
98        rop: *mut nmod_poly_struct,
99        op1: *mut nmod_poly_struct,
100        ctx: *mut fq_nmod_ctx_struct,
101    );
102    pub fn fq_nmod_mul(
103        rop: *mut nmod_poly_struct,
104        op1: *mut nmod_poly_struct,
105        op2: *mut nmod_poly_struct,
106        ctx: *mut fq_nmod_ctx_struct,
107    );
108    pub fn fq_nmod_mul_fmpz(
109        rop: *mut nmod_poly_struct,
110        op: *mut nmod_poly_struct,
111        x: *mut fmpz,
112        ctx: *mut fq_nmod_ctx_struct,
113    );
114    pub fn fq_nmod_mul_si(
115        rop: *mut nmod_poly_struct,
116        op: *mut nmod_poly_struct,
117        x: mp_limb_signed_t,
118        ctx: *mut fq_nmod_ctx_struct,
119    );
120    pub fn fq_nmod_mul_ui(
121        rop: *mut nmod_poly_struct,
122        op: *mut nmod_poly_struct,
123        x: mp_limb_t,
124        ctx: *mut fq_nmod_ctx_struct,
125    );
126    pub fn fq_nmod_sqr(
127        rop: *mut nmod_poly_struct,
128        op: *mut nmod_poly_struct,
129        ctx: *mut fq_nmod_ctx_struct,
130    );
131    pub fn fq_nmod_inv(
132        rop: *mut nmod_poly_struct,
133        op1: *mut nmod_poly_struct,
134        ctx: *mut fq_nmod_ctx_struct,
135    );
136    pub fn _fq_nmod_pow(
137        rop: *mut mp_limb_t,
138        op: *const mp_limb_t,
139        len: mp_limb_signed_t,
140        e: *mut fmpz,
141        ctx: *mut fq_nmod_ctx_struct,
142    );
143    pub fn fq_nmod_pow(
144        rop: *mut nmod_poly_struct,
145        op1: *mut nmod_poly_struct,
146        e: *mut fmpz,
147        ctx: *mut fq_nmod_ctx_struct,
148    );
149    pub fn fq_nmod_pow_ui(
150        rop: *mut nmod_poly_struct,
151        op1: *mut nmod_poly_struct,
152        e: mp_limb_t,
153        ctx: *mut fq_nmod_ctx_struct,
154    );
155    pub fn fq_nmod_sqrt(
156        rop: *mut nmod_poly_struct,
157        op: *mut nmod_poly_struct,
158        ctx: *mut fq_nmod_ctx_struct,
159    ) -> c_int;
160    pub fn fq_nmod_pth_root(
161        rop: *mut nmod_poly_struct,
162        op1: *mut nmod_poly_struct,
163        ctx: *mut fq_nmod_ctx_struct,
164    );
165    pub fn fq_nmod_is_square(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
166    pub fn fq_nmod_randtest(
167        rop: *mut nmod_poly_struct,
168        state: *mut flint_rand_s,
169        ctx: *mut fq_nmod_ctx_struct,
170    );
171    pub fn fq_nmod_randtest_dense(
172        rop: *mut nmod_poly_struct,
173        state: *mut flint_rand_s,
174        ctx: *mut fq_nmod_ctx_struct,
175    );
176    pub fn fq_nmod_randtest_not_zero(
177        rop: *mut nmod_poly_struct,
178        state: *mut flint_rand_s,
179        ctx: *mut fq_nmod_ctx_struct,
180    );
181    pub fn fq_nmod_rand(
182        rop: *mut nmod_poly_struct,
183        state: *mut flint_rand_s,
184        ctx: *mut fq_nmod_ctx_struct,
185    );
186    pub fn fq_nmod_rand_not_zero(
187        rop: *mut nmod_poly_struct,
188        state: *mut flint_rand_s,
189        ctx: *mut fq_nmod_ctx_struct,
190    );
191    pub fn fq_nmod_equal(
192        op1: *mut nmod_poly_struct,
193        op2: *mut nmod_poly_struct,
194        ctx: *mut fq_nmod_ctx_struct,
195    ) -> c_int;
196    pub fn fq_nmod_is_zero(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
197    pub fn fq_nmod_is_one(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
198    pub fn fq_nmod_cmp(
199        a: *mut nmod_poly_struct,
200        b: *mut nmod_poly_struct,
201        ctx: *mut fq_nmod_ctx_struct,
202    ) -> c_int;
203    pub fn fq_nmod_set(
204        rop: *mut nmod_poly_struct,
205        op: *mut nmod_poly_struct,
206        ctx: *mut fq_nmod_ctx_struct,
207    );
208    pub fn fq_nmod_set_fmpz(rop: *mut nmod_poly_struct, x: *mut fmpz, ctx: *mut fq_nmod_ctx_struct);
209    pub fn fq_nmod_set_si(
210        rop: *mut nmod_poly_struct,
211        x: mp_limb_signed_t,
212        ctx: *mut fq_nmod_ctx_struct,
213    );
214    pub fn fq_nmod_set_ui(rop: *mut nmod_poly_struct, x: mp_limb_t, ctx: *mut fq_nmod_ctx_struct);
215    pub fn fq_nmod_swap(
216        op1: *mut nmod_poly_struct,
217        op2: *mut nmod_poly_struct,
218        ctx: *mut fq_nmod_ctx_struct,
219    );
220    pub fn fq_nmod_zero(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
221    pub fn fq_nmod_one(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
222    pub fn fq_nmod_gen(rop: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
223    pub fn fq_nmod_get_nmod_poly(
224        a: *mut nmod_poly_struct,
225        b: *mut nmod_poly_struct,
226        ctx: *mut fq_nmod_ctx_struct,
227    );
228    pub fn fq_nmod_set_nmod_poly(
229        a: *mut nmod_poly_struct,
230        b: *mut nmod_poly_struct,
231        ctx: *mut fq_nmod_ctx_struct,
232    );
233    pub fn fq_nmod_fprint(
234        file: *mut FILE,
235        op: *mut nmod_poly_struct,
236        ctx: *mut fq_nmod_ctx_struct,
237    ) -> c_int;
238    pub fn fq_nmod_print(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
239    pub fn fq_nmod_fprint_pretty(
240        file: *mut FILE,
241        op: *mut nmod_poly_struct,
242        ctx: *mut fq_nmod_ctx_struct,
243    ) -> c_int;
244    pub fn fq_nmod_print_pretty(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
245    pub fn fq_nmod_get_str(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> *mut c_char;
246    pub fn fq_nmod_get_str_pretty(
247        op: *mut nmod_poly_struct,
248        ctx: *mut fq_nmod_ctx_struct,
249    ) -> *mut c_char;
250    pub fn _fq_nmod_trace(
251        rop: *mut fmpz,
252        op: *const mp_limb_t,
253        len: mp_limb_signed_t,
254        ctx: *mut fq_nmod_ctx_struct,
255    );
256    pub fn fq_nmod_trace(rop: *mut fmpz, op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
257    pub fn _fq_nmod_frobenius(
258        rop: *mut mp_limb_t,
259        op: *const mp_limb_t,
260        len: mp_limb_signed_t,
261        e: mp_limb_signed_t,
262        ctx: *mut fq_nmod_ctx_struct,
263    );
264    pub fn fq_nmod_frobenius(
265        rop: *mut nmod_poly_struct,
266        op: *mut nmod_poly_struct,
267        e: mp_limb_signed_t,
268        ctx: *mut fq_nmod_ctx_struct,
269    );
270    pub fn _fq_nmod_norm(
271        rop: *mut fmpz,
272        op: *const mp_limb_t,
273        len: mp_limb_signed_t,
274        ctx: *mut fq_nmod_ctx_struct,
275    );
276    pub fn fq_nmod_norm(rop: *mut fmpz, op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct);
277    pub fn fq_nmod_bit_pack(
278        f: *mut fmpz,
279        op: *mut nmod_poly_struct,
280        bit_size: mp_limb_t,
281        ctx: *mut fq_nmod_ctx_struct,
282    );
283    pub fn fq_nmod_bit_unpack(
284        rop: *mut nmod_poly_struct,
285        f: *mut fmpz,
286        bit_size: mp_limb_t,
287        ctx: *mut fq_nmod_ctx_struct,
288    );
289    pub fn __fq_nmod_ctx_prime(p: *mut fmpz, ctx: *mut fq_nmod_ctx_struct);
290    pub fn fq_nmod_gcdinv(
291        rop: *mut nmod_poly_struct,
292        inv: *mut nmod_poly_struct,
293        op: *mut nmod_poly_struct,
294        ctx: *mut fq_nmod_ctx_struct,
295    );
296    pub fn fq_nmod_is_invertible(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
297    pub fn fq_nmod_is_invertible_f(
298        rop: *mut nmod_poly_struct,
299        op: *mut nmod_poly_struct,
300        ctx: *mut fq_nmod_ctx_struct,
301    ) -> c_int;
302    pub fn fq_nmod_div(
303        rop: *mut nmod_poly_struct,
304        op1: *mut nmod_poly_struct,
305        op2: *mut nmod_poly_struct,
306        ctx: *mut fq_nmod_ctx_struct,
307    );
308    pub fn fq_nmod_multiplicative_order(
309        ord: *mut fmpz,
310        op: *mut nmod_poly_struct,
311        ctx: *mut fq_nmod_ctx_struct,
312    ) -> c_int;
313    pub fn fq_nmod_get_nmod_mat(
314        col: *mut nmod_mat_struct,
315        a: *mut nmod_poly_struct,
316        ctx: *mut fq_nmod_ctx_struct,
317    );
318    pub fn fq_nmod_set_nmod_mat(
319        a: *mut nmod_poly_struct,
320        col: *mut nmod_mat_struct,
321        ctx: *mut fq_nmod_ctx_struct,
322    );
323    pub fn fq_nmod_is_primitive(op: *mut nmod_poly_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
324}