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